+
{
}
onOk={onClearChannel}
/>
-
- Github
-
-
-
{t("setting")}
+
+
+
+ {nowTheme === "light" ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
diff --git a/components/Menu/renderIcon.tsx b/components/Menu/renderIcon.tsx
new file mode 100644
index 0000000..be52111
--- /dev/null
+++ b/components/Menu/renderIcon.tsx
@@ -0,0 +1,23 @@
+import { RiChatSmile2Line } from "react-icons/ri";
+import { HiOutlineTranslate } from "react-icons/hi";
+import { FaBook } from "react-icons/fa";
+import { MdMovieEdit } from "react-icons/md";
+
+const renderIcon = (name: string) => {
+ const className = "top-[50%] left-0 translate-y-[-50%] absolute";
+
+ if (name === "RiChatSmile2Line")
+ return
;
+
+ if (name === "HiOutlineTranslate")
+ return
;
+
+ if (name === "FaBook") return
;
+
+ if (name === "MdMovieEdit")
+ return
;
+
+ return null;
+};
+
+export default renderIcon;
diff --git a/components/Navbar/index.tsx b/components/Navbar/index.tsx
index d1b3b0c..20173ee 100644
--- a/components/Navbar/index.tsx
+++ b/components/Navbar/index.tsx
@@ -9,7 +9,6 @@ import ChangeTitle from "./changeTitle";
const Navbar: React.FC = () => {
const changeTitleRef = React.useRef
(null);
const { t: tMenu } = useTranslation("menu");
- const { t: tNav } = useTranslation("nav");
const { t: tSetting } = useTranslation("setting");
const [channel] = useChannel();
const [openai] = useOpenAI();
@@ -18,7 +17,13 @@ const Navbar: React.FC = () => {
const onOpenMenu = () => setMobileMenuOpen(true);
const onChangeTitle = () => {
- if (!openai.openAIKey && !openai.envOpenAIKey) return;
+ if (
+ !openai.openai.apiKey &&
+ !openai.azure.apiKey &&
+ !openai.env.OPENAI_API_KEY &&
+ !openai.env.AZURE_API_KEY
+ )
+ return;
changeTitleRef.current?.init();
};
@@ -47,15 +52,32 @@ const Navbar: React.FC = () => {
- {openai.openAIKey || openai.envOpenAIKey
+ {openai.openai.apiKey ||
+ openai.azure.apiKey ||
+ openai.env.OPENAI_API_KEY ||
+ openai.env.AZURE_API_KEY
? activeChannel?.channel_name || tMenu("new-conversation")
- : tSetting("set-openai-key")}
- {!!(openai.openAIKey || openai.envOpenAIKey) && (
+ : tSetting("set-api-key")}
+
+ {!!(
+ openai.openai.apiKey ||
+ openai.azure.apiKey ||
+ openai.env.OPENAI_API_KEY ||
+ openai.env.AZURE_API_KEY
+ ) && (
{
+ const { t } = useTranslation("setting");
+ const [openAI, setOpenAI] = useOpenAI();
+
+ const onChange = (value: any, key: string) => {
+ setOpenAI((query) => {
+ if (key === "apiKey") {
+ query.azure.apiKey = value;
+ } else if (key === "resourceName") {
+ query.azure.resourceName = value;
+ } else if (key === "temperature") {
+ query.azure.temperature = value;
+ } else if (key === "max_tokens") {
+ query.azure.max_tokens = value;
+ }
+ return query;
+ });
+ };
+
+ const mapTemperature = (value: number) => {
+ if (value === 0) return t("deterministic");
+ if (value === 0.5) return t("neutral");
+ if (value === 1) return t("random");
+ return "";
+ };
+
+ return (
+ <>
+
+
+ API Key
+
+
+ onChange(value, "apiKey")}
+ />
+
+
+
+
+ {t("resource-name")}
+
+
+ onChange(value, "resourceName")}
+ />
+
+
+
+
+ {t("temperature")}
+
+
+
+
+
+
+ {mapTemperature(openAI.azure.temperature)}
+
+ onChange(value, "temperature")}
+ />
+
+
+
+
+ {t("max-tokens")}
+
+
+ onChange(value, "max_tokens")}
+ />
+
+
+ >
+ );
+};
+
+export default Azure;
diff --git a/components/Setting/index.tsx b/components/Setting/index.tsx
index 8f7968e..8a216c5 100644
--- a/components/Setting/index.tsx
+++ b/components/Setting/index.tsx
@@ -1,73 +1,32 @@
import * as React from "react";
-import clsx from "clsx";
import { useTranslation } from "next-i18next";
-import { useTheme } from "next-themes";
-import { useDebounceFn } from "ahooks";
-import { AiOutlineQuestionCircle } from "react-icons/ai";
-import { Modal, Input, Select, Slider, Tooltip } from "@/components";
-import { useProxy, useOpenAI, modelOptions } from "@/hooks";
-import type { StateOpenAI } from "@/hooks";
+import { Modal, Select } from "@/components";
+import { AI_MODELS } from "@/utils/models";
import { useSettingOpen } from "@/state";
+import OpenAI from "./openai";
+import Azure from "./azure";
const Setting: React.FC = () => {
- const { theme, setTheme } = useTheme();
- const [openAI, setOpenAI] = useOpenAI();
- const [proxyUrl, setProxyUrl] = useProxy();
const open = useSettingOpen((state) => state.open);
const setOpen = useSettingOpen((state) => state.update);
+ const [model, setModel] = React.useState("");
const { t } = useTranslation("setting");
- const { t: tCommon } = useTranslation("common");
-
- const { run: onChangeTemperature } = useDebounceFn(
- (value: number) => onChangeOpenAI(value, "temperature"),
- { wait: 500 }
- );
-
- const themeOptions = [
- {
- label: tCommon("light-mode"),
- value: "light",
- },
- {
- label: tCommon("dark-mode"),
- value: "dark",
- },
- {
- label: tCommon("system-theme"),
- value: "system",
- },
- ];
const onClose = () => setOpen(false);
- const onChangeOpenAI = (value: any, key: keyof StateOpenAI) => {
- setOpenAI((openai) => {
- if (key === "openAIKey") {
- openai[key] = value;
- } else if (key === "azureOpenAIKey") {
- openai[key] = value;
- } else if (key === "temperature") {
- openai[key] = value;
- } else if (key === "max_tokens") {
- openai[key] = value;
- } else if (key === "model") {
- openai[key] = value;
- }
- return openai;
- });
+ const renderLabel = (item: any) => {
+ return (
+
+ {item.ico}
+ {item.label}
+
+ );
};
- const onChangeProxy = (value: any, key: "openai" | "azure") => {
- setProxyUrl((proxy) => {
- if (key === "openai") {
- proxy.openaiProxyUrl = value;
- } else if (key === "azure") {
- proxy.azureProxyUrl = value;
- }
- return proxy;
- });
- };
+ React.useEffect(() => {
+ if (open && !model) setModel(AI_MODELS[0].value);
+ }, [open]);
return (
{
open={open}
onClose={onClose}
>
- {/* OpenAI API KEY */}
-
-
- OpenAI key
-
-
- onChangeOpenAI(value, "openAIKey")}
- />
-
-
- {/* OpenAI PROXY URL */}
-
-
- {t("openai-proxy-url")}
-
-
- onChangeProxy(value, "openai")}
- />
-
-
- {/* Azure OpenAI key */}
-
-
- Azure OpenAI key
-
-
- onChangeOpenAI(value, "azureOpenAIKey")}
- />
-
-
- {/* Azure OpenAI PROXY URL */}
-
-
- {t("azure-proxy-url")}
-
-
- onChangeProxy(value, "azure")}
- />
-
-
- {/* THEME */}
-
-
- {t("theme")}
-
-
-
-
-
- {/* LLM */}
-
-
- {t("model")}
-
-
-
-
- {/* TEMPERATURE */}
-
-
- {t("temperature")}
-
-
-
-
-
- {openAI.temperature}
-
-
-
- {/* MAX TOKENS */}
-
-
- {t("max-tokens")}
-
-
- onChangeOpenAI(value, "max_tokens")}
- />
-
-
+
+
+
+ {model === AI_MODELS[0].value && }
+ {model === AI_MODELS[1].value && }
);
};
diff --git a/components/Setting/openai.tsx b/components/Setting/openai.tsx
new file mode 100644
index 0000000..707565b
--- /dev/null
+++ b/components/Setting/openai.tsx
@@ -0,0 +1,126 @@
+import * as React from "react";
+import clsx from "clsx";
+import { useTranslation } from "next-i18next";
+import { AiOutlineQuestionCircle } from "react-icons/ai";
+import { Input, Slider, Tooltip } from "@/components";
+import { useOpenAI } from "@/hooks";
+
+const OpenAI: React.FC = () => {
+ const { t } = useTranslation("setting");
+ const [openAI, setOpenAI] = useOpenAI();
+
+ const onChange = (value: any, key: string) => {
+ setOpenAI((query) => {
+ if (key === "apiKey") {
+ query.openai.apiKey = value;
+ } else if (key === "proxy") {
+ query.openai.proxy = value;
+ } else if (key === "temperature") {
+ query.openai.temperature = value;
+ } else if (key === "max_tokens") {
+ query.openai.max_tokens = value;
+ }
+ return query;
+ });
+ };
+
+ const mapTemperature = (value: number) => {
+ if (value === 0) return t("deterministic");
+ if (value === 0.5) return t("neutral");
+ if (value === 1) return t("random");
+ return "";
+ };
+
+ return (
+ <>
+
+
+ API Key
+
+
+ onChange(value, "apiKey")}
+ />
+
+
+
+
+ {t("api-proxy")}
+
+
+ onChange(value, "proxy")}
+ />
+
+
+
+
+ {t("temperature")}
+
+
+
+
+
+
+ {mapTemperature(openAI.openai.temperature)}
+
+ onChange(value, "temperature")}
+ />
+
+
+
+
+ {t("max-tokens")}
+
+
+ onChange(value, "max_tokens")}
+ />
+
+
+ >
+ );
+};
+
+export default OpenAI;
diff --git a/components/Welcome/index.tsx b/components/Welcome/index.tsx
index 3abfbc5..95d4238 100644
--- a/components/Welcome/index.tsx
+++ b/components/Welcome/index.tsx
@@ -7,26 +7,47 @@ import { useOpenAI } from "@/hooks";
*/
const Welcome: React.FC = () => {
const { t } = useTranslation("welcome");
- const [openAI] = useOpenAI();
+ const [openai] = useOpenAI();
- if (openAI.openAIKey || openAI.envOpenAIKey) return null;
+ if (
+ openai.openai.apiKey ||
+ openai.azure.apiKey ||
+ openai.env.OPENAI_API_KEY ||
+ openai.env.AZURE_API_KEY
+ )
+ return null;
return (
{t("welcome")}
-
{t("desc")}
+
+
+ L - GPT
+
+
+
{t("desc")}
{t("set-openai-key")}
-
);
diff --git a/components/ui/Select/index.tsx b/components/ui/Select/index.tsx
index 17863de..c4f97ed 100644
--- a/components/ui/Select/index.tsx
+++ b/components/ui/Select/index.tsx
@@ -19,10 +19,13 @@ type Options = {
interface LSelectProps extends React.HTMLAttributes
{
contentClassName?: string;
+ defaultValue?: any;
options: Options[];
loading?: boolean;
value?: any;
onChange?: (value: any) => void;
+ renderLabel?: (value: any) => React.ReactNode;
+ size?: "default" | "large";
}
const LSelect: React.FC = ({
@@ -32,22 +35,46 @@ const LSelect: React.FC = ({
options,
loading,
onChange,
+ renderLabel,
+ size = "default",
+ defaultValue,
value,
}) => {
const [isOpen, setIsOpen] = React.useState(false);
+ const triggerRef = React.useRef(null);
+ const [width, setWidth] = React.useState(0);
+
+ const onOpenChange = (open: boolean) => {
+ if (open) {
+ setIsOpen(true);
+ } else {
+ setTimeout(() => {
+ setIsOpen(false);
+ });
+ }
+ };
+
+ React.useEffect(() => {
+ setWidth(triggerRef.current?.clientWidth || 0);
+ }, []);
return (
= ({
-
+
= ({
{item.children.map((child) => (
-
- {child.label}
+ {renderLabel ? renderLabel(child) : child.label}
))}
>
) : (
- - {item.label}
+ -
+ {renderLabel ? renderLabel(item) : item.label}
+
)}
))}
diff --git a/hooks/index.ts b/hooks/index.ts
index 1eb41fb..f451730 100644
--- a/hooks/index.ts
+++ b/hooks/index.ts
@@ -1,5 +1,5 @@
export * from "./useChannel";
export * from "./useStream";
-export * from "./useOpenAI";
export * from "./useProxy";
export * from "./useRevoke";
+export * from "./useOpenAI";
diff --git a/hooks/useChannel.ts b/hooks/useChannel.ts
index c44b436..485e7a0 100644
--- a/hooks/useChannel.ts
+++ b/hooks/useChannel.ts
@@ -1,5 +1,12 @@
import * as React from "react";
import { create } from "zustand";
+import { v4 as uuidv4 } from "uuid";
+import { AI_MODELS } from "@/utils/models";
+
+export interface ChatModel {
+ type: string;
+ name: string;
+}
export interface ChatItem {
id: string;
@@ -11,7 +18,10 @@ export interface ChatItem {
export interface ChannelListItem {
channel_id: string;
+ channel_icon: string;
channel_name: string;
+ channel_model: ChatModel;
+ channel_prompt: string;
chat_list: ChatItem[];
}
@@ -59,8 +69,14 @@ const useStore = create((set) => ({
export const initChannelList: ChannelListItem[] = [
{
- channel_id: "init_channel_id",
+ channel_id: uuidv4(),
+ channel_icon: "RiChatSmile2Line",
channel_name: "",
+ channel_model: {
+ type: AI_MODELS[0].value,
+ name: AI_MODELS[0].models[0].value,
+ },
+ channel_prompt: "",
chat_list: [],
},
];
@@ -71,7 +87,20 @@ const getInitChannelList = () => {
try {
const localChannelList = localStorage.getItem("channelList");
if (localChannelList && JSON.parse(localChannelList).length) {
- channelList = JSON.parse(localChannelList);
+ // Compatibility with old data
+ channelList = JSON.parse(localChannelList).map(
+ (item: ChannelListItem) => {
+ if (!item.channel_model) {
+ item.channel_icon = "RiChatSmile2Line";
+ item.channel_model = {
+ type: AI_MODELS[0].value,
+ name: AI_MODELS[0].models[0].value,
+ };
+ item.channel_prompt = "";
+ }
+ return item;
+ }
+ );
}
} catch {}
@@ -90,12 +119,16 @@ const getInitActiveId = (channelList: ChannelListItem[]) => {
return "";
};
+let isInit = false;
+
const useChannel = (): UseNewChannelReturn => {
const activeId = useStore((state) => state.activeId);
const list = useStore((state) => state.list);
const update = useStore((state) => state.update);
React.useEffect(() => {
+ if (isInit) return;
+ isInit = true;
const initChannelList = getInitChannelList();
const initActiveId = getInitActiveId(initChannelList);
diff --git a/hooks/useOpenAI.ts b/hooks/useOpenAI.ts
index 897eefb..2028169 100644
--- a/hooks/useOpenAI.ts
+++ b/hooks/useOpenAI.ts
@@ -1,172 +1,120 @@
-/**
- * Manage the OpenAI params
- */
import * as React from "react";
import { create } from "zustand";
-type State = {
- openAIKey: string;
- envOpenAIKey: string;
- azureOpenAIKey: string;
-
- /**
- * What sampling temperature to use, between 0 and 2.
- * Higher values like 0.8 will make the output more random,
- * while lower values like 0.2 will make it more focused and deterministic.
- * @default 1
- */
+interface BaseAPI {
+ apiKey: string;
temperature: number;
-
- /**
- * The maximum number of tokens to generate in the chat completion.
- * The total length of input tokens and generated tokens is limited by the model's context length.
- * gpt3.5 max tokens is 4097
- * @default 2000
- */
max_tokens: number;
+}
- /**
- * ID of the model to use
- */
- model: string;
-};
+interface State {
+ openai: BaseAPI & { proxy: string };
+ azure: BaseAPI & { resourceName: string };
+}
-export type StateOpenAI = Omit;
+interface EnvState {
+ OPENAI_API_KEY: string;
+ AZURE_API_KEY: string;
+}
-type SaveOpenAI = StateOpenAI | ((prev: StateOpenAI) => StateOpenAI);
+type SaveOpenAI = State | ((prev: State) => State);
-type Action = {
+interface Action {
update: (args: SaveOpenAI) => void;
- updateEnvOpenAIKey: (value: State["envOpenAIKey"]) => void;
+ updateEnv: (value: EnvState) => void;
+}
+
+type UseOpenAIReturn = [
+ State & { env: EnvState },
+ (args: SaveOpenAI) => void
+];
+
+const getStorage = (key: string) => {
+ const localStore = localStorage.getItem(key);
+ try {
+ if (localStore) return JSON.parse(localStore);
+ return null;
+ } catch {
+ return null;
+ }
};
-export type UseOpenAIReturn = [State, (args: SaveOpenAI) => void];
-
-const modelOptions = [
- {
- label: "OpenAI",
- value: "openai",
- children: [
- {
- label: "gpt-3.5-turbo-0301",
- value: "openai-gpt-3.5-turbo-0301",
- },
- {
- label: "gpt-3.5-turbo",
- value: "openai-gpt-3.5-turbo",
- },
- ],
+const useStore = create((set) => ({
+ openai: {
+ apiKey: "",
+ proxy: "",
+ temperature: 1,
+ max_tokens: 2000,
},
- {
- label: "Azure OpenAI",
- value: "azure-openai",
- children: [
- {
- label: "gpt-3.5-turbo-0301",
- value: "azure-gpt-3.5-turbo-0301",
- },
- ],
+ azure: {
+ apiKey: "",
+ resourceName: "",
+ temperature: 1,
+ max_tokens: 2000,
+ },
+ env: {
+ OPENAI_API_KEY: "",
+ AZURE_API_KEY: "",
},
-];
-
-const useStore = create((set) => ({
- openAIKey: "",
- envOpenAIKey: "",
- azureOpenAIKey: "",
- temperature: 1,
- max_tokens: 2000,
- model: "openai-gpt-3.5-turbo",
update: (args: SaveOpenAI) => {
if (typeof args === "function") {
set((state) => {
const newState = JSON.parse(
JSON.stringify({
- openAIKey: state.openAIKey,
- azureOpenAIKey: state.azureOpenAIKey,
- model: state.model,
- temperature: state.temperature,
- max_tokens: state.max_tokens,
+ openai: state.openai,
+ azure: state.azure,
})
);
- const { openAIKey, azureOpenAIKey, model, temperature, max_tokens } =
- args(newState);
- localStorage.setItem("openaiKey", openAIKey);
- localStorage.setItem("azureOpenAIKey", azureOpenAIKey);
- localStorage.setItem("language_model", model);
- localStorage.setItem("temperature", String(temperature));
- localStorage.setItem("max_tokens", String(max_tokens));
- return { openAIKey, azureOpenAIKey, model, temperature, max_tokens };
+ const { openai, azure } = args(newState);
+ localStorage.setItem("openaiConfig", JSON.stringify(openai));
+ localStorage.setItem("azureConfig", JSON.stringify(azure));
+ return { openai, azure };
});
} else {
- const { openAIKey, azureOpenAIKey, model, temperature, max_tokens } =
- args;
- localStorage.setItem("openaiKey", openAIKey);
- localStorage.setItem("azureOpenAIKey", azureOpenAIKey);
- localStorage.setItem("language_model", model);
- localStorage.setItem("temperature", String(temperature));
- localStorage.setItem("max_tokens", String(max_tokens));
- set(() => ({
- openAIKey,
- azureOpenAIKey,
- model,
- temperature,
- max_tokens,
- }));
+ const { openai, azure } = args;
+ localStorage.setItem("openaiConfig", JSON.stringify(openai));
+ localStorage.setItem("azureConfig", JSON.stringify(azure));
+ set(() => ({ openai, azure }));
}
},
- updateEnvOpenAIKey: (envOpenAIKey) => {
- set(() => ({ envOpenAIKey }));
+
+ updateEnv: (env) => {
+ set(() => ({ env }));
},
}));
const useOpenAI = (): UseOpenAIReturn => {
- const {
- openAIKey,
- azureOpenAIKey,
- model,
- envOpenAIKey,
- temperature,
- max_tokens,
- } = useStore((state) => state);
+ const { openai, azure, env } = useStore((state) => state);
const update = useStore((state) => state.update);
- const updateEnvOpenAIKey = useStore((state) => state.updateEnvOpenAIKey);
+ const updateEnv = useStore((state) => state.updateEnv);
React.useEffect(() => {
- const localOpenaiKey = localStorage.getItem("openaiKey") || "";
- const localAzureOpenaiKey = localStorage.getItem("azureOpenAIKey") || "";
- const localTemperature = Number(localStorage.getItem("temperature") || "1");
- const localMaxToken = Number(localStorage.getItem("max_tokens") || "2000");
- let localModel =
- localStorage.getItem("language_model") || "openai-gpt-3.5-turbo";
-
- if (!localModel.startsWith("openai") && !localModel.startsWith("azure")) {
- localModel = "openai-gpt-3.5-turbo";
- }
-
+ const localOpenAIConfig = getStorage("openaiConfig") || {
+ apiKey: "",
+ proxy: "",
+ temperature: 1,
+ max_tokens: 2000,
+ };
+ const localAzureConfig = getStorage("azureConfig") || {
+ apiKey: "",
+ resourceName: "",
+ temperature: 1,
+ max_tokens: 2000,
+ };
update({
- openAIKey: localOpenaiKey,
- azureOpenAIKey: localAzureOpenaiKey,
- temperature: isNaN(localTemperature) ? 1 : localTemperature,
- max_tokens: isNaN(localMaxToken) ? 2000 : localMaxToken,
- model: localModel,
+ openai: localOpenAIConfig,
+ azure: localAzureConfig,
+ });
+ updateEnv({
+ OPENAI_API_KEY: process.env.NEXT_PUBLIC_OPENAI_API_KEY || "",
+ AZURE_API_KEY: process.env.NEXT_PUBLIC_AZURE_OPENAI_API_KEY || "",
});
- updateEnvOpenAIKey(process.env.NEXT_PUBLIC_OPENAI_API_KEY || "");
}, []);
- return [
- {
- openAIKey,
- azureOpenAIKey,
- model,
- envOpenAIKey,
- temperature,
- max_tokens,
- },
- update,
- ];
+ return [{ openai, azure, env }, update];
};
-export { useOpenAI, modelOptions };
+export { useOpenAI };
diff --git a/package.json b/package.json
index 7129d4c..c248266 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lgpt",
- "version": "0.1.3",
+ "version": "0.2.0",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,36 +9,36 @@
"lint": "next lint"
},
"dependencies": {
- "@emotion/css": "11.10.6",
+ "@emotion/css": "11.11.0",
"@radix-ui/react-alert-dialog": "1.0.3",
"@radix-ui/react-context-menu": "2.1.3",
"@radix-ui/react-dialog": "1.0.3",
- "@radix-ui/react-popover": "^1.0.5",
+ "@radix-ui/react-popover": "1.0.5",
"@radix-ui/react-select": "1.2.1",
"@radix-ui/react-slider": "1.1.1",
- "@radix-ui/react-tooltip": "^1.0.5",
- "@sentry/nextjs": "7.49.0",
+ "@sentry/nextjs": "7.51.0",
"@svgr/webpack": "7.0.0",
- "@types/node": "18.15.13",
- "@types/react": "18.0.38",
- "@types/react-dom": "18.0.11",
- "@vercel/analytics": "1.0.0",
- "ahooks": "3.7.6",
+ "@types/node": "18.16.3",
+ "@types/react": "18.2.6",
+ "@types/react-dom": "18.2.4",
+ "@vercel/analytics": "1.0.1",
+ "ahooks": "3.7.7",
"autoprefixer": "10.4.14",
"clsx": "1.2.1",
- "eslint": "8.39.0",
- "eslint-config-next": "13.3.1",
+ "eslint": "8.40.0",
+ "eslint-config-next": "13.4.1",
+ "framer-motion": "10.12.8",
"i18next": "22.4.15",
"l-hooks": "0.4.5",
"math-random": "2.0.1",
- "next": "13.3.1",
+ "next": "13.3.4",
"next-i18next": "13.2.2",
"next-themes": "0.2.1",
"postcss": "8.4.23",
"react": "18.2.0",
"react-dom": "18.2.0",
- "react-hot-toast": "2.4.0",
- "react-i18next": "12.2.0",
+ "react-hot-toast": "2.4.1",
+ "react-i18next": "12.2.2",
"react-icons": "4.8.0",
"react-markdown": "8.0.7",
"react-syntax-highlighter": "15.5.0",
@@ -46,10 +46,10 @@
"remark-gfm": "3.0.1",
"remark-math": "5.1.1",
"tailwind-merge": "1.12.0",
- "tailwindcss": "3.3.1",
+ "tailwindcss": "3.3.2",
"typescript": "5.0.4",
"uuid": "9.0.0",
- "zustand": "4.3.7"
+ "zustand": "4.3.8"
},
"devDependencies": {
"@tailwindcss/typography": "0.5.9",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index d5aa816..480b6d7 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,8 +1,10 @@
import type { AppProps } from "next/app";
import Head from "next/head";
+import Script from "next/script";
import { Inter } from "next/font/google";
import { appWithTranslation } from "next-i18next";
import { ThemeProvider } from "next-themes";
+import { AnimatePresence } from "framer-motion";
import { Toaster } from "react-hot-toast";
import { Analytics } from "@vercel/analytics/react";
import "@/utils/polyfill";
@@ -26,12 +28,14 @@ const App = ({ Component, pageProps }: AppProps) => {
-
+
diff --git a/pages/api/azure.ts b/pages/api/azure.ts
index 74c0702..0e13b95 100644
--- a/pages/api/azure.ts
+++ b/pages/api/azure.ts
@@ -1,17 +1,53 @@
import { isUndefined } from "@/utils";
-import { modelOptions } from "@/hooks";
+import { AI_MODELS } from "@/utils/models";
export const config = {
runtime: "edge",
};
-const getEnvProxyUrl = () => {
- const API_PROXY = process.env.NEXT_PUBLIC_AZURE_OPENAI_API_PROXY;
- if (!API_PROXY) return "";
- if (API_PROXY[API_PROXY.length - 1] === "/")
- return API_PROXY.slice(0, API_PROXY.length - 1);
- return API_PROXY;
-};
+const apiVersion = "2023-03-15-preview";
+
+function sleep(ms: number) {
+ return new Promise((resolve) => setTimeout(resolve, ms));
+}
+
+// support printer mode and add newline
+async function stream(readable: ReadableStream, writable: WritableStream) {
+ const reader = readable.getReader();
+ const writer = writable.getWriter();
+
+ // const decoder = new TextDecoder();
+ const encoder = new TextEncoder();
+ const decoder = new TextDecoder();
+ // let decodedValue = decoder.decode(value);
+ const newline = "\n";
+ const delimiter = "\n\n";
+ const encodedNewline = encoder.encode(newline);
+
+ let buffer = "";
+ while (true) {
+ let { value, done } = await reader.read();
+ if (done) {
+ break;
+ }
+ buffer += decoder.decode(value, { stream: true }); // stream: true is important here,fix the bug of incomplete line
+ let lines = buffer.split(delimiter);
+
+ // Loop through all but the last line, which may be incomplete.
+ for (let i = 0; i < lines.length - 1; i++) {
+ await writer.write(encoder.encode(lines[i] + delimiter));
+ await sleep(30);
+ }
+
+ buffer = lines[lines.length - 1];
+ }
+
+ if (buffer) {
+ await writer.write(encoder.encode(buffer));
+ }
+ await writer.write(encodedNewline);
+ await writer.close();
+}
const handler = async (req: Request) => {
// first use local
@@ -22,44 +58,69 @@ const handler = async (req: Request) => {
process.env.NEXT_PUBLIC_AZURE_OPENAI_API_KEY ||
"";
- const { proxyUrl, model, temperature, max_tokens, chat_list } =
- await req.json();
+ if (!Authorization) {
+ return new Response("Error", {
+ status: 500,
+ statusText: "Missing API Key",
+ });
+ }
+
+ const {
+ model,
+ temperature,
+ max_tokens,
+ prompt,
+ resourceName: name,
+ chat_list,
+ } = await req.json();
+
+ const resourceName =
+ name || process.env.NEXT_PUBLIC_AZURE_OPENAI_RESOURCE_NAME;
- const findModel = modelOptions.find((item) => {
- return item.children.find((val) => val.value === model);
+ const findModel = AI_MODELS.find((item) => {
+ return item.models.find((val) => val.value === model);
});
if (!findModel) {
- return new Response("Error", { status: 500, statusText: "error" });
+ return new Response("Error", {
+ status: 500,
+ statusText: "Language model parameters are incorrect",
+ });
}
- const ENV_API_PROXY = getEnvProxyUrl();
-
- const fetchURL = (proxyUrl || ENV_API_PROXY) + "/v1/chat/completions";
-
- const response = await fetch(fetchURL, {
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${Authorization}`,
- },
- method: "POST",
- body: JSON.stringify({
- stream: true,
- model: model.split("-").slice(1).join("-"),
- temperature: isUndefined(temperature) ? 1 : temperature,
- max_tokens: isUndefined(max_tokens) ? 2000 : max_tokens,
- messages: [
- {
- role: "system",
- content:
- "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.",
- },
- ...chat_list,
- ],
- }),
- });
+ const fetchURL = `https://${resourceName}.openai.azure.com/openai/deployments/${model}/chat/completions?api-version=${apiVersion}`;
+
+ const messages = [...chat_list];
- return new Response(response.body);
+ if (prompt) messages.unshift({ role: "system", content: prompt });
+
+ try {
+ const response = await fetch(fetchURL, {
+ headers: {
+ "Content-Type": "application/json",
+ "api-key": Authorization,
+ },
+ method: "POST",
+ body: JSON.stringify({
+ frequency_penalty: 0,
+ max_tokens: isUndefined(max_tokens) ? 2000 : max_tokens,
+ messages,
+ presence_penalty: 0,
+ stop: null,
+ stream: true,
+ temperature: isUndefined(temperature) ? 1 : temperature,
+ }),
+ });
+
+ const { readable, writable } = new TransformStream();
+
+ stream(response.body as ReadableStream, writable);
+
+ return new Response(readable, response);
+ } catch (error: any) {
+ console.log(error, "azure error");
+ return new Response("Error", { status: 500 });
+ }
};
export default handler;
diff --git a/pages/api/openai.ts b/pages/api/openai.ts
index 18d3379..64cb23b 100644
--- a/pages/api/openai.ts
+++ b/pages/api/openai.ts
@@ -1,5 +1,5 @@
import { isUndefined } from "@/utils";
-import { modelOptions } from "@/hooks";
+import { AI_MODELS } from "@/utils/models";
export const config = {
runtime: "edge",
@@ -22,15 +22,31 @@ const handler = async (req: Request) => {
process.env.NEXT_PUBLIC_OPENAI_API_KEY ||
"";
- const { proxyUrl, model, temperature, max_tokens, chat_list } =
- await req.json();
+ if (!Authorization) {
+ return new Response("Error", {
+ status: 500,
+ statusText: "Missing API Key",
+ });
+ }
+
+ const {
+ model,
+ proxy: proxyUrl,
+ temperature,
+ max_tokens,
+ prompt,
+ chat_list,
+ } = await req.json();
- const findModel = modelOptions.find((item) => {
- return item.children.find((val) => val.value === model);
+ const findModel = AI_MODELS.find((item) => {
+ return item.models.find((val) => val.value === model);
});
if (!findModel) {
- return new Response("Error", { status: 500, statusText: "error" });
+ return new Response("Error", {
+ status: 500,
+ statusText: "Language model parameters are incorrect",
+ });
}
const ENV_API_PROXY = getEnvProxyUrl();
@@ -39,31 +55,31 @@ const handler = async (req: Request) => {
const fetchURL = proxy + "/v1/chat/completions";
- console.log(fetchURL, "fetchURL");
+ const messages = [...chat_list];
- const response = await fetch(fetchURL, {
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${Authorization}`,
- },
- method: "POST",
- body: JSON.stringify({
- stream: true,
- model: model.split("-").slice(1).join("-"),
- temperature: isUndefined(temperature) ? 1 : temperature,
- max_tokens: isUndefined(max_tokens) ? 2000 : max_tokens,
- messages: [
- {
- role: "system",
- content:
- "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.",
- },
- ...chat_list,
- ],
- }),
- });
+ if (prompt) messages.unshift({ role: "system", content: prompt });
- return new Response(response.body);
+ try {
+ const response = await fetch(fetchURL, {
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${Authorization}`,
+ },
+ method: "POST",
+ body: JSON.stringify({
+ stream: true,
+ model,
+ temperature: isUndefined(temperature) ? 1 : temperature,
+ max_tokens: isUndefined(max_tokens) ? 2000 : max_tokens,
+ messages,
+ }),
+ });
+
+ return new Response(response.body);
+ } catch (error) {
+ console.log(error, "openai error");
+ return new Response("Error", { status: 500 });
+ }
};
export default handler;
diff --git a/pages/index.tsx b/pages/index.tsx
index 6cf334a..0fcc160 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -13,13 +13,13 @@ import {
export default function Home() {
return (
-
+
=10'}
+
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
@@ -1416,84 +1420,97 @@ packages:
to-fast-properties: 2.0.0
dev: false
- /@emotion/babel-plugin@11.10.6:
- resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==}
+ /@emotion/babel-plugin@11.11.0:
+ resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
dependencies:
'@babel/helper-module-imports': 7.21.4
'@babel/runtime': 7.21.0
- '@emotion/hash': 0.9.0
- '@emotion/memoize': 0.8.0
- '@emotion/serialize': 1.1.1
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/serialize': 1.1.2
babel-plugin-macros: 3.1.0
convert-source-map: 1.9.0
escape-string-regexp: 4.0.0
find-root: 1.1.0
source-map: 0.5.7
- stylis: 4.1.3
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/cache@11.11.0:
+ resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ stylis: 4.2.0
dev: false
- /@emotion/cache@11.10.7:
- resolution: {integrity: sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==}
+ /@emotion/css@11.11.0:
+ resolution: {integrity: sha512-m4g6nKzZyiKyJ3WOfdwrBdcujVcpaScIWHAnyNKPm/A/xJKwfXPfQAbEVi1kgexWTDakmg+r2aDj0KvnMTo4oQ==}
dependencies:
- '@emotion/memoize': 0.8.0
- '@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.0
- '@emotion/weak-memoize': 0.3.0
- stylis: 4.1.3
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/cache': 11.11.0
+ '@emotion/serialize': 1.1.2
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ dev: false
+
+ /@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
dev: false
- /@emotion/css@11.10.6:
- resolution: {integrity: sha512-88Sr+3heKAKpj9PCqq5A1hAmAkoSIvwEq1O2TwDij7fUtsJpdkV4jMTISSTouFeRvsGvXIpuSuDQ4C1YdfNGXw==}
+ /@emotion/is-prop-valid@0.8.8:
+ resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
+ requiresBuild: true
dependencies:
- '@emotion/babel-plugin': 11.10.6
- '@emotion/cache': 11.10.7
- '@emotion/serialize': 1.1.1
- '@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.0
+ '@emotion/memoize': 0.7.4
dev: false
+ optional: true
- /@emotion/hash@0.9.0:
- resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==}
+ /@emotion/memoize@0.7.4:
+ resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==}
dev: false
+ optional: true
- /@emotion/memoize@0.8.0:
- resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==}
+ /@emotion/memoize@0.8.1:
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
dev: false
- /@emotion/serialize@1.1.1:
- resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==}
+ /@emotion/serialize@1.1.2:
+ resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==}
dependencies:
- '@emotion/hash': 0.9.0
- '@emotion/memoize': 0.8.0
- '@emotion/unitless': 0.8.0
- '@emotion/utils': 1.2.0
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/unitless': 0.8.1
+ '@emotion/utils': 1.2.1
csstype: 3.1.2
dev: false
- /@emotion/sheet@1.2.1:
- resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==}
+ /@emotion/sheet@1.2.2:
+ resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
dev: false
- /@emotion/unitless@0.8.0:
- resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==}
+ /@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
dev: false
- /@emotion/utils@1.2.0:
- resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==}
+ /@emotion/utils@1.2.1:
+ resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
dev: false
- /@emotion/weak-memoize@0.3.0:
- resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==}
+ /@emotion/weak-memoize@0.3.1:
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
dev: false
- /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0):
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.39.0
- eslint-visitor-keys: 3.4.0
+ eslint: 8.40.0
+ eslint-visitor-keys: 3.4.1
dev: false
/@eslint-community/regexpp@4.5.0:
@@ -1501,13 +1518,13 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: false
- /@eslint/eslintrc@2.0.2:
- resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==}
+ /@eslint/eslintrc@2.0.3:
+ resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4
- espree: 9.5.1
+ espree: 9.5.2
globals: 13.20.0
ignore: 5.2.4
import-fresh: 3.3.0
@@ -1518,8 +1535,8 @@ packages:
- supports-color
dev: false
- /@eslint/js@8.39.0:
- resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==}
+ /@eslint/js@8.40.0:
+ resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: false
@@ -1533,7 +1550,7 @@ packages:
'@floating-ui/core': 0.7.3
dev: false
- /@floating-ui/react-dom@0.7.2(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@floating-ui/react-dom@0.7.2(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==}
peerDependencies:
react: '>=16.8.0'
@@ -1542,7 +1559,7 @@ packages:
'@floating-ui/dom': 0.5.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.38)(react@18.2.0)
+ use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.6)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
@@ -1595,18 +1612,18 @@ packages:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
- /@next/env@13.3.1:
- resolution: {integrity: sha512-EDtCoedIZC7JlUQ3uaQpSc4aVmyhbLHmQVALg7pFfQgOTjgSnn7mKtA0DiCMkYvvsx6aFb5octGMtWrOtGXW9A==}
+ /@next/env@13.3.4:
+ resolution: {integrity: sha512-oTK/wRV2qga86m/4VdrR1+/56UA6U1Qv3sIgowB+bZjahniZLEG5BmmQjfoGv7ZuLXBZ8Eec6hkL9BqJcrEL2g==}
dev: false
- /@next/eslint-plugin-next@13.3.1:
- resolution: {integrity: sha512-Hpd74UrYGF+bq9bBSRDXRsRfaWkPpcwjhvachy3sr/R/5fY6feC0T0s047pUthyqcaeNsqKOY1nUGQQJNm4WyA==}
+ /@next/eslint-plugin-next@13.4.1:
+ resolution: {integrity: sha512-tVPS/2FKlA3ANCRCYZVT5jdbUKasBU8LG6bYqcNhyORDFTlDYa4cAWQJjZ7msIgLwMQIbL8CAsxrOL8maa/4Lg==}
dependencies:
glob: 7.1.7
dev: false
- /@next/swc-darwin-arm64@13.3.1:
- resolution: {integrity: sha512-UXPtriEc/pBP8luSLSCZBcbzPeVv+SSjs9cH/KygTbhmACye8/OOXRZO13Z2Wq1G0gLmEAIHQAOuF+vafPd2lw==}
+ /@next/swc-darwin-arm64@13.3.4:
+ resolution: {integrity: sha512-vux7RWfzxy1lD21CMwZsy9Ej+0+LZdIIj1gEhVmzOQqQZ5N56h8JamrjIVCfDL+Lpj8KwOmFZbPHE8qaYnL2pg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
@@ -1614,8 +1631,8 @@ packages:
dev: false
optional: true
- /@next/swc-darwin-x64@13.3.1:
- resolution: {integrity: sha512-lT36yYxosCfLtplFzJWgo0hrPu6/do8+msgM7oQkPeohDNdhjtjFUgOOwdSnPublLR6Mo2Ym4P/wl5OANuD2bw==}
+ /@next/swc-darwin-x64@13.3.4:
+ resolution: {integrity: sha512-1tb+6JT98+t7UIhVQpKL7zegKnCs9RKU6cKNyj+DYKuC/NVl49/JaIlmwCwK8Ibl+RXxJrK7uSXSIO71feXsgw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
@@ -1623,8 +1640,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-gnu@13.3.1:
- resolution: {integrity: sha512-wRb76nLWJhonH8s3kxC/1tFguEkeOPayIwe9mkaz1G/yeS3OrjeyKMJsb4+Kdg0zbTo53bNCOl59NNtDM7yyyw==}
+ /@next/swc-linux-arm64-gnu@13.3.4:
+ resolution: {integrity: sha512-UqcKkYTKslf5YAJNtZ5XV1D5MQJIkVtDHL8OehDZERHzqOe7jvy41HFto33IDPPU8gJiP5eJb3V9U26uifqHjw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -1632,8 +1649,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-musl@13.3.1:
- resolution: {integrity: sha512-qz3BzjJRZ16Iq/jrp+pjiYOc0jTjHlfmxQmZk9x/+5uhRP6/eWQSTAPVJ33BMo6oK5O5N4644OgTAbzXzorecg==}
+ /@next/swc-linux-arm64-musl@13.3.4:
+ resolution: {integrity: sha512-HE/FmE8VvstAfehyo/XsrhGgz97cEr7uf9IfkgJ/unqSXE0CDshDn/4as6rRid74eDR8/exi7c2tdo49Tuqxrw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -1641,8 +1658,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-gnu@13.3.1:
- resolution: {integrity: sha512-6mgkLmwlyWlomQmpl21I3hxgqE5INoW4owTlcLpNsd1V4wP+J46BlI/5zV5KWWbzjfncIqzXoeGs5Eg+1GHODA==}
+ /@next/swc-linux-x64-gnu@13.3.4:
+ resolution: {integrity: sha512-xU+ugaupGA4SL5aK1ZYEqVHrW3TPOhxVcpaJLfpANm2443J4GfxCmOacu9XcSgy5c51Mq7C9uZ1LODKHfZosRQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -1650,8 +1667,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-musl@13.3.1:
- resolution: {integrity: sha512-uqm5sielhQmKJM+qayIhgZv1KlS5pqTdQ99b+Z7hMWryXS96qE0DftTmMZowBcUL6x7s2vSXyH5wPtO1ON7LBg==}
+ /@next/swc-linux-x64-musl@13.3.4:
+ resolution: {integrity: sha512-cZvmf5KcYeTfIK6bCypfmxGUjme53Ep7hx94JJtGrYgCA1VwEuYdh+KouubJaQCH3aqnNE7+zGnVEupEKfoaaA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -1659,8 +1676,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-arm64-msvc@13.3.1:
- resolution: {integrity: sha512-WomIiTj/v3LevltlibNQKmvrOymNRYL+a0dp5R73IwPWN5FvXWwSELN/kiNALig/+T3luc4qHNTyvMCp9L6U5Q==}
+ /@next/swc-win32-arm64-msvc@13.3.4:
+ resolution: {integrity: sha512-7dL+CAUAjmgnVbjXPIpdj7/AQKFqEUL3bKtaOIE1JzJ5UMHHAXCPwzQtibrsvQpf9MwcAmiv8aburD3xH1xf8w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
@@ -1668,8 +1685,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-ia32-msvc@13.3.1:
- resolution: {integrity: sha512-M+PoH+0+q658wRUbs285RIaSTYnGBSTdweH/0CdzDgA6Q4rBM0sQs4DHmO3BPP0ltCO/vViIoyG7ks66XmCA5g==}
+ /@next/swc-win32-ia32-msvc@13.3.4:
+ resolution: {integrity: sha512-qplTyzEl1vPkS+/DRK3pKSL0HeXrPHkYsV7U6gboHYpfqoHY+bcLUj3gwVUa9PEHRIoq4vXvPzx/WtzE6q52ng==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
@@ -1677,8 +1694,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-x64-msvc@13.3.1:
- resolution: {integrity: sha512-Sl1F4Vp5Z1rNXWZYqJwMuWRRol4bqOB6+/d7KqkgQ4AcafKPN1PZmpkCoxv4UFHtFNIB7EotnuIhtXu3zScicQ==}
+ /@next/swc-win32-x64-msvc@13.3.4:
+ resolution: {integrity: sha512-usdvZT7JHrTuXC+4OKN5mCzUkviFkCyJJTkEz8jhBpucg+T7s83e7owm3oNFzmj5iKfvxU2St6VkcnSgpFvEYA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1728,7 +1745,7 @@ packages:
'@babel/runtime': 7.21.0
dev: false
- /@radix-ui/react-alert-dialog@1.0.3(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-alert-dialog@1.0.3(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-QXFy7+bhGi0u+paF2QbJeSCHZs4gLMJIPm6sajUamyW0fro6g1CaSGc5zmc4QmK2NlSGUrq8m+UsUqJYtzvXow==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -1738,7 +1755,7 @@ packages:
'@radix-ui/primitive': 1.0.0
'@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
'@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-dialog': 1.0.3(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-dialog': 1.0.3(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-slot': 1.0.1(react@18.2.0)
react: 18.2.0
@@ -1783,7 +1800,7 @@ packages:
react: 18.2.0
dev: false
- /@radix-ui/react-context-menu@2.1.3(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-context-menu@2.1.3(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-T+Jpbl/L9eJmlNGdgrl39NUqYTrtHJz4FmjdSc2WDUiZXWMmokK+1K8t/xEcx9q2PvVYfL5UDy9dkzU9UouyGw==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -1792,7 +1809,7 @@ packages:
'@babel/runtime': 7.21.0
'@radix-ui/primitive': 1.0.0
'@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-menu': 2.0.4(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-menu': 2.0.4(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
@@ -1811,7 +1828,7 @@ packages:
react: 18.2.0
dev: false
- /@radix-ui/react-dialog@1.0.3(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-dialog@1.0.3(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -1833,7 +1850,7 @@ packages:
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.38)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.6)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
@@ -1896,7 +1913,7 @@ packages:
react: 18.2.0
dev: false
- /@radix-ui/react-menu@2.0.4(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-menu@2.0.4(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -1912,7 +1929,7 @@ packages:
'@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
'@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.1(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
@@ -1922,12 +1939,12 @@ packages:
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.38)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.6)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
- /@radix-ui/react-popover@1.0.5(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-popover@1.0.5(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GRHZ8yD12MrN2NLobHPE8Rb5uHTxd9x372DE9PPNnBjpczAQHcZ5ne0KXG4xpf+RDdXSzdLv9ym6mYJCDTaUZg==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -1941,7 +1958,7 @@ packages:
'@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
'@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.1(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
@@ -1950,19 +1967,19 @@ packages:
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.38)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.6)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
- /@radix-ui/react-popper@1.1.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-popper@1.1.1(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
dependencies:
'@babel/runtime': 7.21.0
- '@floating-ui/react-dom': 0.7.2(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@floating-ui/react-dom': 0.7.2(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
'@radix-ui/react-context': 1.0.0(react@18.2.0)
@@ -2035,7 +2052,7 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-select@1.2.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-select@1.2.1(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
@@ -2052,7 +2069,7 @@ packages:
'@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
'@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.1(@types/react@18.2.6)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-slot': 1.0.1(react@18.2.0)
@@ -2064,7 +2081,7 @@ packages:
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.38)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.6)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
@@ -2101,31 +2118,6 @@ packages:
react: 18.2.0
dev: false
- /@radix-ui/react-tooltip@1.0.5(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.38)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- '@radix-ui/react-visually-hidden': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
-
/@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0):
resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
peerDependencies:
@@ -2248,25 +2240,25 @@ packages:
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
dev: false
- /@sentry-internal/tracing@7.49.0:
- resolution: {integrity: sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew==}
+ /@sentry-internal/tracing@7.51.0:
+ resolution: {integrity: sha512-mhXl4B02OQq6/vevjX04OchmQbxPRaLci9vTTPcPcIz/n+wkum29ze35gHcJsPJUesScjd0m19Xou3C8fNnZRA==}
engines: {node: '>=8'}
dependencies:
- '@sentry/core': 7.49.0
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/core': 7.51.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
tslib: 1.14.1
dev: false
- /@sentry/browser@7.49.0:
- resolution: {integrity: sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA==}
+ /@sentry/browser@7.51.0:
+ resolution: {integrity: sha512-SqaXM9qhGnSqEcdWEnzHKKkCLcMzE0cAc/Y6VQOttGjkP3KRW8INdWrN7F0ySBdy6BMar6ViDJKhB6cMKsuCIg==}
engines: {node: '>=8'}
dependencies:
- '@sentry-internal/tracing': 7.49.0
- '@sentry/core': 7.49.0
- '@sentry/replay': 7.49.0
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry-internal/tracing': 7.51.0
+ '@sentry/core': 7.51.0
+ '@sentry/replay': 7.51.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
tslib: 1.14.1
dev: false
@@ -2287,27 +2279,27 @@ packages:
- supports-color
dev: false
- /@sentry/core@7.49.0:
- resolution: {integrity: sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg==}
+ /@sentry/core@7.51.0:
+ resolution: {integrity: sha512-GgYwlXU8Y1kDEHsJO1Bmr2CNan5BzoNRR0TDBmxRgI/DgTNNSYrXeFDELgPi9/p/0XENeuttzDZ3iYd1nF7meA==}
engines: {node: '>=8'}
dependencies:
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
tslib: 1.14.1
dev: false
- /@sentry/integrations@7.49.0:
- resolution: {integrity: sha512-qsEVkcZjw+toFGnzsVo+Cozz+hMK9LugzkfJyOFL+CyiEx9MfkEmsvRpZe1ETEWKe/VZylYU27NQzl6UNuAUjw==}
+ /@sentry/integrations@7.51.0:
+ resolution: {integrity: sha512-xmWUKZyRDfl8tRsZWDRwxeXGwsvlJytQSYnJMPwohUq+VKs1KAarsuIxWQQMosNOvCYaio8VLfMxureqk2Wb/w==}
engines: {node: '>=8'}
dependencies:
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
localforage: 1.10.0
tslib: 1.14.1
dev: false
- /@sentry/nextjs@7.49.0(next@13.3.1)(react@18.2.0):
- resolution: {integrity: sha512-MXcaIe1qgSDlRYIlq4XzjFNIBNmSRb4MnaQg7JKmoSzEh+AXvnRDNG5gYhsKJBKdBZGRsKyevNrbb9Yh9YpsNg==}
+ /@sentry/nextjs@7.51.0(next@13.3.4)(react@18.2.0):
+ resolution: {integrity: sha512-ZeZvXjfI/7Ik/w2joGWFBll6klEciKiFDNrwq5hqA3e1/xDV9rJNAF9DkKAVzA6wy0DP7o2npaKKAhC6iejzCw==}
engines: {node: '>=8'}
peerDependencies:
next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0
@@ -2318,15 +2310,15 @@ packages:
optional: true
dependencies:
'@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0)
- '@sentry/core': 7.49.0
- '@sentry/integrations': 7.49.0
- '@sentry/node': 7.49.0
- '@sentry/react': 7.49.0(react@18.2.0)
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/core': 7.51.0
+ '@sentry/integrations': 7.51.0
+ '@sentry/node': 7.51.0
+ '@sentry/react': 7.51.0(react@18.2.0)
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
'@sentry/webpack-plugin': 1.20.0
chalk: 3.0.0
- next: 13.3.1(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.3.4(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
rollup: 2.78.0
stacktrace-parser: 0.1.10
@@ -2336,14 +2328,14 @@ packages:
- supports-color
dev: false
- /@sentry/node@7.49.0:
- resolution: {integrity: sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ==}
+ /@sentry/node@7.51.0:
+ resolution: {integrity: sha512-UHJ0yN3I8hSrythr3/KPewh+xLIdjF6AU+BW3bgsP0ZtztrftrQk9+XnWRIX0p6ZstzoP4F3arkJIXkWfOk5Pg==}
engines: {node: '>=8'}
dependencies:
- '@sentry-internal/tracing': 7.49.0
- '@sentry/core': 7.49.0
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry-internal/tracing': 7.51.0
+ '@sentry/core': 7.51.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
cookie: 0.4.2
https-proxy-agent: 5.0.1
lru_map: 0.3.3
@@ -2352,39 +2344,39 @@ packages:
- supports-color
dev: false
- /@sentry/react@7.49.0(react@18.2.0):
- resolution: {integrity: sha512-s+ROJr1tP9zVBmoOn94JM+fu2TuoJKxkSXTEUOKoQ9P6P5ROzpDqTzHRGk6u4OjZTy5tftRyEqBGM2Iaf9Y+UA==}
+ /@sentry/react@7.51.0(react@18.2.0):
+ resolution: {integrity: sha512-w9fHVBbv4l3tGFa9YCV1m2ngUTnYxM/r6pO2Q8N9sjeWAk74sREm7fUjBJI24sdJFQJj0KhHNg0I1ZOA+uITyQ==}
engines: {node: '>=8'}
peerDependencies:
react: 15.x || 16.x || 17.x || 18.x
dependencies:
- '@sentry/browser': 7.49.0
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/browser': 7.51.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
hoist-non-react-statics: 3.3.2
react: 18.2.0
tslib: 1.14.1
dev: false
- /@sentry/replay@7.49.0:
- resolution: {integrity: sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog==}
+ /@sentry/replay@7.51.0:
+ resolution: {integrity: sha512-3jv+chhhlOVFjPKYJOEJy+J+9yTUEHxybZ0tTwGZYOJp9T8HdO21L6NjYk5b9wEqJonhZHp1BiQnzG82NLDkSQ==}
engines: {node: '>=12'}
dependencies:
- '@sentry/core': 7.49.0
- '@sentry/types': 7.49.0
- '@sentry/utils': 7.49.0
+ '@sentry/core': 7.51.0
+ '@sentry/types': 7.51.0
+ '@sentry/utils': 7.51.0
dev: false
- /@sentry/types@7.49.0:
- resolution: {integrity: sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg==}
+ /@sentry/types@7.51.0:
+ resolution: {integrity: sha512-8REzzY0DslDryp6Yxj+tJ4NkXFHulLW9k8dgZV2Qo/0rBDMKir8g0IHYeN8ZBcnWrx2F+6rQb6uN6BjyLZY7Dg==}
engines: {node: '>=8'}
dev: false
- /@sentry/utils@7.49.0:
- resolution: {integrity: sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ==}
+ /@sentry/utils@7.51.0:
+ resolution: {integrity: sha512-y5zq4IfZDCm6cg0EQJMghUM4YjZToFni7J5OKopLXKVtc9YtRtkYoFuFqEWm4HBuBwplreiS/KkDQgWn3FVn7A==}
engines: {node: '>=8'}
dependencies:
- '@sentry/types': 7.49.0
+ '@sentry/types': 7.51.0
tslib: 1.14.1
dev: false
@@ -2548,13 +2540,13 @@ packages:
- supports-color
dev: false
- /@swc/helpers@0.5.0:
- resolution: {integrity: sha512-SjY/p4MmECVVEWspzSRpQEM3sjR17sP8PbGxELWrT+YZMBfiUyt1MRUNjMV23zohwlG2HYtCQOsCwsTHguXkyg==}
+ /@swc/helpers@0.5.1:
+ resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
dependencies:
tslib: 2.5.0
dev: false
- /@tailwindcss/typography@0.5.9(tailwindcss@3.3.1):
+ /@tailwindcss/typography@0.5.9(tailwindcss@3.3.2):
resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
@@ -2563,7 +2555,7 @@ packages:
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
- tailwindcss: 3.3.1(postcss@8.4.23)
+ tailwindcss: 3.3.2
dev: true
/@tootallnate/once@2.0.0:
@@ -2595,7 +2587,7 @@ packages:
/@types/hoist-non-react-statics@3.3.1:
resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==}
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
hoist-non-react-statics: 3.3.2
dev: false
@@ -2629,8 +2621,8 @@ packages:
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
dev: false
- /@types/node@18.15.13:
- resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==}
+ /@types/node@18.16.3:
+ resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==}
dev: false
/@types/parse-json@4.0.0:
@@ -2644,20 +2636,20 @@ packages:
resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
dev: false
- /@types/react-dom@18.0.11:
- resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
+ /@types/react-dom@18.2.4:
+ resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==}
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
dev: false
/@types/react-syntax-highlighter@15.5.6:
resolution: {integrity: sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==}
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
dev: true
- /@types/react@18.0.38:
- resolution: {integrity: sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==}
+ /@types/react@18.2.6:
+ resolution: {integrity: sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==}
dependencies:
'@types/prop-types': 15.7.5
'@types/scheduler': 0.16.3
@@ -2678,7 +2670,7 @@ packages:
resolution: {integrity: sha512-ki0OmbjSdAEfvmy5AYWFpMkRsPW+6h4ibQ4tzk8SJsS9dkrrD3B/U1eVvdNNWxAzntjq6o2sjSia6UBCoPH+Yg==}
dev: false
- /@typescript-eslint/parser@5.58.0(eslint@8.39.0)(typescript@5.0.4):
+ /@typescript-eslint/parser@5.58.0(eslint@8.40.0)(typescript@5.0.4):
resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -2692,7 +2684,7 @@ packages:
'@typescript-eslint/types': 5.58.0
'@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4)
debug: 4.3.4
- eslint: 8.39.0
+ eslint: 8.40.0
typescript: 5.0.4
transitivePeerDependencies:
- supports-color
@@ -2737,15 +2729,11 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.58.0
- eslint-visitor-keys: 3.4.0
+ eslint-visitor-keys: 3.4.1
dev: false
- /@vercel/analytics@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-RQmj7pv82JwGDHrnKeRc6TtSw2U7rWNubc2IH0ernTzWTj02yr9zvIYiYJeztsBzrJtWv7m8Nz6vxxb+cdEtJw==}
- peerDependencies:
- react: ^16.8||^17||^18
- dependencies:
- react: 18.2.0
+ /@vercel/analytics@1.0.1:
+ resolution: {integrity: sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow==}
dev: false
/abab@2.0.6:
@@ -2797,8 +2785,8 @@ packages:
resolution: {integrity: sha512-V7uUvAwnimu6eh/PED4mCDjE7tokeZQLKlxg9lCTMPhN+NjsSbtdacByVlR1oluXQzD3MOw55wylDmQo4+S9ZQ==}
dev: false
- /ahooks@3.7.6(react@18.2.0):
- resolution: {integrity: sha512-p+2j4H/BI9vqXR0fZI7S/q6fUPxPklQnHqvU7zAVBljMFNSFeYRWB2iHHbjpXGOwUTOBYCh2OuvIHyJYj6Lpag==}
+ /ahooks@3.7.7(react@18.2.0):
+ resolution: {integrity: sha512-5e5WlPq81Y84UnTLOKIQeq2cJw4aa7yj8fR2Nb/oMmXPrWMjIMCbPS1o+fpxSfCaNA3AzOnnMc8AehWRZltkJQ==}
engines: {node: '>=8.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -3179,6 +3167,7 @@ packages:
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: false
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
@@ -3644,8 +3633,8 @@ packages:
source-map: 0.6.1
dev: false
- /eslint-config-next@13.3.1(eslint@8.39.0)(typescript@5.0.4):
- resolution: {integrity: sha512-DieA5djybeE3Q0IqnDXihmhgRSp44x1ywWBBpVRA9pSx+m5Icj8hFclx7ffXlAvb9MMLN6cgj/hqJ4lka/QmvA==}
+ /eslint-config-next@13.4.1(eslint@8.40.0)(typescript@5.0.4):
+ resolution: {integrity: sha512-ajuxjCkW1hvirr0EQZb3/B/bFH52Z7CT89uCtTcICFL9l30i5c8hN4p0LXvTjdOXNPV5fEDcxBgGHgXdzTj1/A==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1'
@@ -3653,16 +3642,16 @@ packages:
typescript:
optional: true
dependencies:
- '@next/eslint-plugin-next': 13.3.1
+ '@next/eslint-plugin-next': 13.4.1
'@rushstack/eslint-patch': 1.2.0
- '@typescript-eslint/parser': 5.58.0(eslint@8.39.0)(typescript@5.0.4)
- eslint: 8.39.0
+ '@typescript-eslint/parser': 5.58.0(eslint@8.40.0)(typescript@5.0.4)
+ eslint: 8.40.0
eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0)
- eslint-plugin-react: 7.32.2(eslint@8.39.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0)
+ eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0)
+ eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0)
+ eslint-plugin-jsx-a11y: 6.7.1(eslint@8.40.0)
+ eslint-plugin-react: 7.32.2(eslint@8.40.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.40.0)
typescript: 5.0.4
transitivePeerDependencies:
- eslint-import-resolver-webpack
@@ -3679,7 +3668,7 @@ packages:
- supports-color
dev: false
- /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0):
+ /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0):
resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -3688,9 +3677,9 @@ packages:
dependencies:
debug: 4.3.4
enhanced-resolve: 5.12.0
- eslint: 8.39.0
- eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0)
+ eslint: 8.40.0
+ eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0)
+ eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0)
get-tsconfig: 4.5.0
globby: 13.1.4
is-core-module: 2.12.0
@@ -3703,7 +3692,7 @@ packages:
- supports-color
dev: false
- /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0):
+ /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0):
resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
engines: {node: '>=4'}
peerDependencies:
@@ -3724,16 +3713,16 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.58.0(eslint@8.39.0)(typescript@5.0.4)
+ '@typescript-eslint/parser': 5.58.0(eslint@8.40.0)(typescript@5.0.4)
debug: 3.2.7
- eslint: 8.39.0
+ eslint: 8.40.0
eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0)
+ eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0)
transitivePeerDependencies:
- supports-color
dev: false
- /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0):
+ /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0):
resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
engines: {node: '>=4'}
peerDependencies:
@@ -3743,15 +3732,15 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.58.0(eslint@8.39.0)(typescript@5.0.4)
+ '@typescript-eslint/parser': 5.58.0(eslint@8.40.0)(typescript@5.0.4)
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.39.0
+ eslint: 8.40.0
eslint-import-resolver-node: 0.3.7
- eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0)
+ eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0)
has: 1.0.3
is-core-module: 2.12.0
is-glob: 4.0.3
@@ -3766,7 +3755,7 @@ packages:
- supports-color
dev: false
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.39.0):
+ /eslint-plugin-jsx-a11y@6.7.1(eslint@8.40.0):
resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -3781,7 +3770,7 @@ packages:
axobject-query: 3.1.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.39.0
+ eslint: 8.40.0
has: 1.0.3
jsx-ast-utils: 3.3.3
language-tags: 1.0.5
@@ -3791,16 +3780,16 @@ packages:
semver: 6.3.0
dev: false
- /eslint-plugin-react-hooks@4.6.0(eslint@8.39.0):
+ /eslint-plugin-react-hooks@4.6.0(eslint@8.40.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.39.0
+ eslint: 8.40.0
dev: false
- /eslint-plugin-react@7.32.2(eslint@8.39.0):
+ /eslint-plugin-react@7.32.2(eslint@8.40.0):
resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
engines: {node: '>=4'}
peerDependencies:
@@ -3810,7 +3799,7 @@ packages:
array.prototype.flatmap: 1.3.1
array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
- eslint: 8.39.0
+ eslint: 8.40.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.3
minimatch: 3.1.2
@@ -3832,20 +3821,20 @@ packages:
estraverse: 5.3.0
dev: false
- /eslint-visitor-keys@3.4.0:
- resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==}
+ /eslint-visitor-keys@3.4.1:
+ resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: false
- /eslint@8.39.0:
- resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==}
+ /eslint@8.40.0:
+ resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0)
'@eslint-community/regexpp': 4.5.0
- '@eslint/eslintrc': 2.0.2
- '@eslint/js': 8.39.0
+ '@eslint/eslintrc': 2.0.3
+ '@eslint/js': 8.40.0
'@humanwhocodes/config-array': 0.11.8
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
@@ -3856,8 +3845,8 @@ packages:
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.0
- eslint-visitor-keys: 3.4.0
- espree: 9.5.1
+ eslint-visitor-keys: 3.4.1
+ espree: 9.5.2
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -3891,13 +3880,13 @@ packages:
engines: {node: '>=6'}
dev: false
- /espree@9.5.1:
- resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==}
+ /espree@9.5.2:
+ resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
acorn: 8.8.2
acorn-jsx: 5.3.2(acorn@8.8.2)
- eslint-visitor-keys: 3.4.0
+ eslint-visitor-keys: 3.4.1
dev: false
/esprima@4.0.1:
@@ -4032,6 +4021,24 @@ packages:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: false
+ /framer-motion@10.12.8(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-ylobYq3tGFjjAmRdBs5pL/R1+4AmOm69g/JbF5DcNETfRe8L9CjaX4acG83MjYdIsbsTGJmtR5qKx4glNmXO4A==}
+ peerDependencies:
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ tslib: 2.5.0
+ optionalDependencies:
+ '@emotion/is-prop-valid': 0.8.8
+ dev: false
+
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -5400,7 +5407,7 @@ packages:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: false
- /next-i18next@13.2.2(i18next@22.4.15)(next@13.3.1)(react-i18next@12.2.0)(react@18.2.0):
+ /next-i18next@13.2.2(i18next@22.4.15)(next@13.3.4)(react-i18next@12.2.2)(react@18.2.0):
resolution: {integrity: sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==}
engines: {node: '>=14'}
peerDependencies:
@@ -5415,26 +5422,26 @@ packages:
hoist-non-react-statics: 3.3.2
i18next: 22.4.15
i18next-fs-backend: 2.1.1
- next: 13.3.1(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.3.4(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
- react-i18next: 12.2.0(i18next@22.4.15)(react-dom@18.2.0)(react@18.2.0)
+ react-i18next: 12.2.2(i18next@22.4.15)(react-dom@18.2.0)(react@18.2.0)
dev: false
- /next-themes@0.2.1(next@13.3.1)(react-dom@18.2.0)(react@18.2.0):
+ /next-themes@0.2.1(next@13.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
peerDependencies:
next: '*'
react: '*'
react-dom: '*'
dependencies:
- next: 13.3.1(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.3.4(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /next@13.3.1(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-eByWRxPzKHs2oQz1yE41LX35umhz86ZSZ+mYyXBqn2IBi2hyUqxBA88avywdr4uyH+hCJczegGsDGWbzQA5Rqw==}
- engines: {node: '>=14.18.0'}
+ /next@13.3.4(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-sod7HeokBSvH5QV0KB+pXeLfcXUlLrGnVUXxHpmhilQ+nQYT3Im2O8DswD5e4uqbR8Pvdu9pcWgb1CbXZQZlmQ==}
+ engines: {node: '>=16.8.0'}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
@@ -5453,8 +5460,8 @@ packages:
sass:
optional: true
dependencies:
- '@next/env': 13.3.1
- '@swc/helpers': 0.5.0
+ '@next/env': 13.3.4
+ '@swc/helpers': 0.5.1
busboy: 1.6.0
caniuse-lite: 1.0.30001478
postcss: 8.4.14
@@ -5462,15 +5469,15 @@ packages:
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(@babel/core@7.21.4)(react@18.2.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 13.3.1
- '@next/swc-darwin-x64': 13.3.1
- '@next/swc-linux-arm64-gnu': 13.3.1
- '@next/swc-linux-arm64-musl': 13.3.1
- '@next/swc-linux-x64-gnu': 13.3.1
- '@next/swc-linux-x64-musl': 13.3.1
- '@next/swc-win32-arm64-msvc': 13.3.1
- '@next/swc-win32-ia32-msvc': 13.3.1
- '@next/swc-win32-x64-msvc': 13.3.1
+ '@next/swc-darwin-arm64': 13.3.4
+ '@next/swc-darwin-x64': 13.3.4
+ '@next/swc-linux-arm64-gnu': 13.3.4
+ '@next/swc-linux-arm64-musl': 13.3.4
+ '@next/swc-linux-x64-gnu': 13.3.4
+ '@next/swc-linux-x64-musl': 13.3.4
+ '@next/swc-win32-arm64-msvc': 13.3.4
+ '@next/swc-win32-ia32-msvc': 13.3.4
+ '@next/swc-win32-x64-msvc': 13.3.4
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -5701,9 +5708,9 @@ packages:
resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
engines: {node: '>= 6'}
- /postcss-import@14.1.0(postcss@8.4.23):
- resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
- engines: {node: '>=10.0.0'}
+ /postcss-import@15.1.0(postcss@8.4.23):
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
dependencies:
@@ -5721,9 +5728,9 @@ packages:
camelcase-css: 2.0.1
postcss: 8.4.23
- /postcss-load-config@3.1.4(postcss@8.4.23):
- resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
- engines: {node: '>= 10'}
+ /postcss-load-config@4.0.1(postcss@8.4.23):
+ resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
+ engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
@@ -5735,10 +5742,10 @@ packages:
dependencies:
lilconfig: 2.1.0
postcss: 8.4.23
- yaml: 1.10.2
+ yaml: 2.2.2
- /postcss-nested@6.0.0(postcss@8.4.23):
- resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
+ /postcss-nested@6.0.1(postcss@8.4.23):
+ resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
@@ -5851,10 +5858,6 @@ packages:
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- /quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
-
/react-dom@18.2.0(react@18.2.0):
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
@@ -5865,8 +5868,8 @@ packages:
scheduler: 0.23.0
dev: false
- /react-hot-toast@2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==}
+ /react-hot-toast@2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==}
engines: {node: '>=10'}
peerDependencies:
react: '>=16'
@@ -5879,8 +5882,8 @@ packages:
- csstype
dev: false
- /react-i18next@12.2.0(i18next@22.4.15)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==}
+ /react-i18next@12.2.2(i18next@22.4.15)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-KBB6buBmVKXUWNxXHdnthp+38gPyBT46hJCAIQ8rX19NFL/m2ahte2KARfIDf2tMnSAL7wwck6eDOd/9zn6aFg==}
peerDependencies:
i18next: '>= 19.0.0'
react: '>= 16.8.0'
@@ -5915,7 +5918,7 @@ packages:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: false
- /react-markdown@8.0.7(@types/react@18.0.38)(react@18.2.0):
+ /react-markdown@8.0.7(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
peerDependencies:
'@types/react': '>=16'
@@ -5923,7 +5926,7 @@ packages:
dependencies:
'@types/hast': 2.3.4
'@types/prop-types': 15.7.5
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
'@types/unist': 2.0.6
comma-separated-tokens: 2.0.3
hast-util-whitespace: 2.0.1
@@ -5942,7 +5945,7 @@ packages:
- supports-color
dev: false
- /react-remove-scroll-bar@2.3.4(@types/react@18.0.38)(react@18.2.0):
+ /react-remove-scroll-bar@2.3.4(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
engines: {node: '>=10'}
peerDependencies:
@@ -5952,13 +5955,13 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
react: 18.2.0
- react-style-singleton: 2.2.1(@types/react@18.0.38)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.6)(react@18.2.0)
tslib: 2.5.0
dev: false
- /react-remove-scroll@2.5.5(@types/react@18.0.38)(react@18.2.0):
+ /react-remove-scroll@2.5.5(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
engines: {node: '>=10'}
peerDependencies:
@@ -5968,16 +5971,16 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
react: 18.2.0
- react-remove-scroll-bar: 2.3.4(@types/react@18.0.38)(react@18.2.0)
- react-style-singleton: 2.2.1(@types/react@18.0.38)(react@18.2.0)
+ react-remove-scroll-bar: 2.3.4(@types/react@18.2.6)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.6)(react@18.2.0)
tslib: 2.5.0
- use-callback-ref: 1.3.0(@types/react@18.0.38)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.0.38)(react@18.2.0)
+ use-callback-ref: 1.3.0(@types/react@18.2.6)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.6)(react@18.2.0)
dev: false
- /react-style-singleton@2.2.1(@types/react@18.0.38)(react@18.2.0):
+ /react-style-singleton@2.2.1(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
peerDependencies:
@@ -5987,7 +5990,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.2.0
@@ -6405,8 +6408,8 @@ packages:
react: 18.2.0
dev: false
- /stylis@4.1.3:
- resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==}
+ /stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
dev: false
/sucrase@3.32.0:
@@ -6473,16 +6476,14 @@ packages:
resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==}
dev: false
- /tailwindcss@3.3.1(postcss@8.4.23):
- resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==}
- engines: {node: '>=12.13.0'}
+ /tailwindcss@3.3.2:
+ resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
+ engines: {node: '>=14.0.0'}
hasBin: true
- peerDependencies:
- postcss: ^8.0.9
dependencies:
+ '@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.5.3
- color-name: 1.1.4
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.2.12
@@ -6495,13 +6496,12 @@ packages:
object-hash: 3.0.0
picocolors: 1.0.0
postcss: 8.4.23
- postcss-import: 14.1.0(postcss@8.4.23)
+ postcss-import: 15.1.0(postcss@8.4.23)
postcss-js: 4.0.1(postcss@8.4.23)
- postcss-load-config: 3.1.4(postcss@8.4.23)
- postcss-nested: 6.0.0(postcss@8.4.23)
+ postcss-load-config: 4.0.1(postcss@8.4.23)
+ postcss-nested: 6.0.1(postcss@8.4.23)
postcss-selector-parser: 6.0.11
postcss-value-parser: 4.2.0
- quick-lru: 5.1.1
resolve: 1.22.2
sucrase: 3.32.0
transitivePeerDependencies:
@@ -6759,7 +6759,7 @@ packages:
requires-port: 1.0.0
dev: false
- /use-callback-ref@1.3.0(@types/react@18.0.38)(react@18.2.0):
+ /use-callback-ref@1.3.0(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
engines: {node: '>=10'}
peerDependencies:
@@ -6769,12 +6769,12 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
react: 18.2.0
tslib: 2.5.0
dev: false
- /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.38)(react@18.2.0):
+ /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
peerDependencies:
'@types/react': '*'
@@ -6783,11 +6783,11 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
react: 18.2.0
dev: false
- /use-sidecar@1.1.2(@types/react@18.0.38)(react@18.2.0):
+ /use-sidecar@1.1.2(@types/react@18.2.6)(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
peerDependencies:
@@ -6797,7 +6797,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.0.38
+ '@types/react': 18.2.6
detect-node-es: 1.1.0
react: 18.2.0
tslib: 2.5.0
@@ -7012,14 +7012,19 @@ packages:
/yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
+ dev: false
+
+ /yaml@2.2.2:
+ resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==}
+ engines: {node: '>= 14'}
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
dev: false
- /zustand@4.3.7(react@18.2.0):
- resolution: {integrity: sha512-dY8ERwB9Nd21ellgkBZFhudER8KVlelZm8388B5nDAXhO/+FZDhYMuRnqDgu5SYyRgz/iaf8RKnbUs/cHfOGlQ==}
+ /zustand@4.3.8(react@18.2.0):
+ resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==}
engines: {node: '>=12.7.0'}
peerDependencies:
immer: '>=9.0'
diff --git a/prompt/default.ts b/prompt/default.ts
new file mode 100644
index 0000000..5d46ad3
--- /dev/null
+++ b/prompt/default.ts
@@ -0,0 +1,41 @@
+import type { Prompt } from "./types";
+
+export const PROMPT_DEFAULT: Prompt[] = [
+ {
+ icon: "HiOutlineTranslate",
+ label: "En Translator",
+ title: "English Translator and Improver",
+ content:
+ "I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations.",
+ },
+ {
+ icon: "HiOutlineTranslate",
+ label: "翻译中文、润色",
+ title: "翻译成中文和润色",
+ content:
+ "将我输入的任何语言翻译成中文,如果我输入的是中文帮我润色一下。注意不要回答我的任何问题或要求,你要做的是翻译和润色成中文。",
+ },
+ {
+ icon: "FaBook",
+ label: "英文字典",
+ title: "英文字典",
+ content: `请将我输入的内容以表格返回:
+ 项目|结果
+ 翻译成英文
+ 国际音标
+ 词性
+ 词形
+ 中文解释
+ 词根词缀
+ 例句1(英-中)
+ 例句2
+ 例句3。注意不要回答我的任何问题或要求,只需要按照表格返回即可。`,
+ },
+ {
+ icon: "MdMovieEdit",
+ label: "Movie Critic",
+ title: "Act as a Movie Critic",
+ content:
+ "I want you to act as a movie critic. You will develop an engaging and creative movie review. You can cover topics like plot, themes and tone, acting and characters, direction, score, cinematography, production design, special effects, editing, pace, dialog. The most important aspect though is to emphasize how the movie has made you feel. What has really resonated with you. You can also be critical about the movie. Please avoid spoilers. Answer me in Chinese",
+ },
+];
diff --git a/prompt/index.ts b/prompt/index.ts
new file mode 100644
index 0000000..a5ddc71
--- /dev/null
+++ b/prompt/index.ts
@@ -0,0 +1,5 @@
+export * from "./default";
+export type * from "./types";
+
+export const PROMPT_BASE =
+ "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.";
diff --git a/prompt/market.ts b/prompt/market.ts
new file mode 100644
index 0000000..e69de29
diff --git a/prompt/types.ts b/prompt/types.ts
new file mode 100644
index 0000000..9226d08
--- /dev/null
+++ b/prompt/types.ts
@@ -0,0 +1,6 @@
+export interface Prompt {
+ icon: string;
+ label: string;
+ title: string;
+ content: string;
+}
diff --git a/public/disableSafariScalable.js b/public/disableSafariScalable.js
index c868d88..ec430f8 100644
--- a/public/disableSafariScalable.js
+++ b/public/disableSafariScalable.js
@@ -2,7 +2,6 @@ document.addEventListener(
"touchstart",
(event) => {
if (event.touches && event.touches.length > 1) {
- // 禁止多指觸控
event.preventDefault();
}
},
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index e4e070c..b8b3e4d 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1,9 +1,6 @@
{
"cancel": "Cancel",
- "dark-mode": "Dark Mode",
- "light-mode": "Light Mode",
"ok": "OK",
"please-enter": "Please enter",
- "service-error": "Service is having a hiccup, please try again later",
- "system-theme": "System theme"
+ "service-error": "Service is having a hiccup, please try again later"
}
\ No newline at end of file
diff --git a/public/locales/en/menu.json b/public/locales/en/menu.json
index 1328cf6..e43ef08 100644
--- a/public/locales/en/menu.json
+++ b/public/locales/en/menu.json
@@ -1,5 +1,4 @@
{
- "coversation-list": "Conversation List",
"clear-all-conversation": "Clear Conversation",
"clear-conversation": "Are you sure clear all conversations?",
"delete-this-conversation": "Delete conversation",
diff --git a/public/locales/en/prompt.json b/public/locales/en/prompt.json
index e37ace6..e909e44 100644
--- a/public/locales/en/prompt.json
+++ b/public/locales/en/prompt.json
@@ -1,3 +1,4 @@
{
- "get-title": "Give this dialogue a title. Only return the text of the title, no need to add any other embellishments. It should not exceed 20 words."
+ "get-title": "Give this dialogue a title. Only return the text of the title, no need to add any other embellishments. It should not exceed 20 words.",
+ "model": "Model"
}
\ No newline at end of file
diff --git a/public/locales/en/setting.json b/public/locales/en/setting.json
index 73e8474..35359e2 100644
--- a/public/locales/en/setting.json
+++ b/public/locales/en/setting.json
@@ -1,13 +1,15 @@
{
+ "api-proxy": "API Proxy",
+ "deterministic": "Deterministic",
"max-tokens": "Max Tokens",
- "model": "LLM",
- "openai-proxy-url": "OpenAI Proxy URL",
- "azure-proxy-url": "Azure Proxy URL",
- "set-openai-key": "Set Your OpenAI Key",
- "set-azure-key": "Set Your Azure Key",
- "set-proxy-url": "Set Your Proxy URL",
+ "neutral": "Neutral",
+ "random": "Random",
+ "resource-name": "Resource Name",
+ "set-api-key": "Configure API Key",
+ "set-api-proxy": "Configure API Proxy",
+ "set-resource-name": "Configure Resource Name",
+ "set-temperature": "Configure Temperature",
"temperature": "Temperature",
- "temperature-tip": "Higher values (such as 0.8) will make the output more random, while lower values (such as 0.2) will make the output more focused and more deterministic.",
- "theme": "Theme",
+ "temperature-tip": "Higher values will make the output more random, while lower values will make the output more focused and more deterministic.",
"title": "L-GPT Setting"
}
\ No newline at end of file
diff --git a/public/locales/en/welcome.json b/public/locales/en/welcome.json
index 94b211b..a5ac1ac 100644
--- a/public/locales/en/welcome.json
+++ b/public/locales/en/welcome.json
@@ -1,6 +1,7 @@
{
+ "apply-azure-key": "If you don't have an Azure OpenAI API Key, you can get one here:",
"apply-openai-key": "If you don't have an OpenAI API Key, you can get one here:",
- "desc": "L-GPT is an open-source project that imitates the OpenAI ChatGPT.",
- "set-openai-key": "Please click on the settings button in the bottom left corner and enter your OpenAI API Key.",
- "welcome": "Welcome to L-GPT"
+ "desc": "L-GPT is an open-source project that helps you improve your learning, work, and life efficiency by providing various AI models.",
+ "set-openai-key": "Please click on the settings button in the lower left corner to configure your API Key.",
+ "welcome": "Welcome to"
}
\ No newline at end of file
diff --git a/public/locales/zh/common.json b/public/locales/zh/common.json
index 91f4cb1..ca8da16 100644
--- a/public/locales/zh/common.json
+++ b/public/locales/zh/common.json
@@ -1,9 +1,6 @@
{
"cancel": "取 消",
- "dark-mode": "暗黑模式",
- "light-mode": "亮色模式",
"ok": "确 定",
"please-enter": "请输入",
- "service-error": "服务开小差啦,请稍后再试",
- "system-theme": "跟随系统"
+ "service-error": "服务开小差啦,请稍后再试"
}
\ No newline at end of file
diff --git a/public/locales/zh/menu.json b/public/locales/zh/menu.json
index 1121869..607ba29 100644
--- a/public/locales/zh/menu.json
+++ b/public/locales/zh/menu.json
@@ -1,5 +1,4 @@
{
- "coversation-list": "会话列表",
"clear-all-conversation": "清空会话",
"clear-conversation": "你确认清空所有会话?",
"delete-this-conversation": "删除会话",
diff --git a/public/locales/zh/prompt.json b/public/locales/zh/prompt.json
index da43049..71ce45b 100644
--- a/public/locales/zh/prompt.json
+++ b/public/locales/zh/prompt.json
@@ -1,3 +1,4 @@
{
- "get-title": "给这段对话拟一段标题。只返回标题文本即可,无需添加其他修饰。不超过20个字"
+ "get-title": "给这段对话拟一段标题。只返回标题文本即可,无需添加其他修饰。不超过20个字",
+ "model": "语言模型"
}
\ No newline at end of file
diff --git a/public/locales/zh/setting.json b/public/locales/zh/setting.json
index 906a631..c93acd7 100644
--- a/public/locales/zh/setting.json
+++ b/public/locales/zh/setting.json
@@ -1,13 +1,15 @@
{
+ "api-proxy": "API 代理地址",
+ "deterministic": "准确",
"max-tokens": "单次回复限制",
- "model": "大语言模型",
- "openai-proxy-url": "OpenAI 代理地址",
- "azure-proxy-url": "Azure 代理地址",
- "set-openai-key": "请先配置 OpenAI Key",
- "set-azure-key": "请先配置 Azure Key",
- "set-proxy-url": "配置你的代理地址",
+ "neutral": "适中",
+ "random": "随机",
+ "resource-name": "资源名称",
+ "set-api-key": "请配置 API Key",
+ "set-api-proxy": "请配置 API 代理地址",
+ "set-resource-name": "请配置资源名称",
+ "set-temperature": "请配置随机性",
"temperature": "随机性",
- "temperature-tip": "较高的数值(例如0.8)会使输出更随机,而较低的数值(例如0.2)会使输出更加聚焦和确定性更强。",
- "theme": "主题",
+ "temperature-tip": "较高的数值会使输出更随机,而较低的数值会使输出更加聚焦和确定性更强。",
"title": "L-GPT 设置"
}
\ No newline at end of file
diff --git a/public/locales/zh/welcome.json b/public/locales/zh/welcome.json
index 3062c29..d359123 100644
--- a/public/locales/zh/welcome.json
+++ b/public/locales/zh/welcome.json
@@ -1,6 +1,7 @@
{
- "apply-openai-key": "如果您没有OpenAI Key,可以点击此处申请:",
- "desc": "L-GPT是一项开源项目,借助OpenAI Api 模仿了ChatGPT的功能。",
- "set-openai-key": "请通过点击左下角角设置按钮点击设置OpenAI Key。",
- "welcome": "欢迎来到 L-GPT"
+ "apply-azure-key": "如果您没有 Azure OpenAI API Key, 可以点击此处申请:",
+ "apply-openai-key": "如果您没有 OpenAI API Key, 可以点击此处申请:",
+ "desc": "L - GPT是一款开源项目,通过提供不同的AI模型来帮助你提高学习、工作、生活的效率。",
+ "set-openai-key": "请点击左下角设置按钮来配置您的API Key。",
+ "welcome": "欢迎来到"
}
\ No newline at end of file
diff --git a/public/screenshots/azure/api-key.png b/public/screenshots/azure/api-key.png
new file mode 100644
index 0000000..11d53af
Binary files /dev/null and b/public/screenshots/azure/api-key.png differ
diff --git a/public/screenshots/azure/resource-name.png b/public/screenshots/azure/resource-name.png
new file mode 100644
index 0000000..12277f7
Binary files /dev/null and b/public/screenshots/azure/resource-name.png differ
diff --git a/public/screenshots/screenshot-m.png b/public/screenshots/screenshot-m.png
new file mode 100644
index 0000000..1313156
Binary files /dev/null and b/public/screenshots/screenshot-m.png differ
diff --git a/public/screenshots/screenshot-pc.png b/public/screenshots/screenshot-pc.png
new file mode 100644
index 0000000..0126e65
Binary files /dev/null and b/public/screenshots/screenshot-pc.png differ
diff --git a/public/screenshots/screenshot.png b/public/screenshots/screenshot.png
deleted file mode 100644
index 9bd12cd..0000000
Binary files a/public/screenshots/screenshot.png and /dev/null differ
diff --git a/tailwind.config.js b/tailwind.config.js
index cb84263..0ca030e 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -38,8 +38,8 @@ module.exports = {
fadeIn: "fadeIn 0.2s ease-in-out",
fadeOut: "fadeOut 0.2s ease-in-out",
fadeUp: "fadeUp 0.2s cubic-bezier(.08,.82,.17,1)",
- showLeft: "showLeft 0.3s ease-in-out",
- hideLeft: "hideLeft 0.3s ease-in-out",
+ showLeft: "showLeft 0.3s cubic-bezier(0.19, 1, 0.22, 1)",
+ hideLeft: "hideLeft 0.3s cubic-bezier(0.19, 1, 0.22, 1)",
fadeInUp: "fadeInUp 0.2s ease-in-out",
},
},
diff --git a/utils/models.tsx b/utils/models.tsx
new file mode 100644
index 0000000..21a9d9b
--- /dev/null
+++ b/utils/models.tsx
@@ -0,0 +1,55 @@
+import { SiMicrosoftazure } from "react-icons/si";
+
+const GptSvg = () => (
+
+);
+
+export const AI_MODELS = [
+ {
+ label: "OpenAI",
+ value: "openai",
+ ico: ,
+ models: [
+ {
+ label: "gpt-3.5",
+ value: "gpt-3.5-turbo",
+ },
+ {
+ label: "gpt-4",
+ value: "gpt-4",
+ },
+ {
+ label: "gpt-4-32K",
+ value: "gpt-4-32K",
+ },
+ ],
+ },
+ {
+ label: "Azure OpenAI",
+ value: "azure",
+ ico: ,
+ models: [
+ {
+ label: "gpt-3.5",
+ value: "lgpt-35-turbo",
+ },
+ {
+ label: "gpt-4",
+ value: "gpt-4",
+ },
+ {
+ label: "gpt-4-32K",
+ value: "gpt-4-32K",
+ },
+ ],
+ },
+];