From e86ac176d12cb9108a7bf20b96678c35adde348f Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Tue, 14 Mar 2023 21:00:07 +0800 Subject: [PATCH] init --- .gitignore | 24 + README.md | 43 ++ index.html | 12 + package.json | 23 + postcss.config.cjs | 6 + screenshot.webp | Bin 0 -> 53134 bytes src/app.tsx | 311 ++++++++++++ src/chatgpt.ts | 148 ++++++ src/global.css | 3 + src/main.tsx | 4 + src/vite-env.d.ts | 1 + tailwind.config.cjs | 8 + tsconfig.json | 22 + tsconfig.node.json | 9 + vite.config.ts | 8 + yarn.lock | 1096 +++++++++++++++++++++++++++++++++++++++++++ 16 files changed, 1718 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 screenshot.webp create mode 100644 src/app.tsx create mode 100644 src/chatgpt.ts create mode 100644 src/global.css create mode 100644 src/main.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tailwind.config.cjs create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..16a6c2c --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# ChatGPT API WEB + +一个简单的网页,调用 OPENAI ChatGPT 进行对话。 + +与官方 ChatGPT 相比: + +- 对话记录使用浏览器的 localStorage 保存在本地 +- 可删除对话消息 +- 可以设置 system message (如:"你是一个喵娘",参见官方 [API 文档](https://platform.openai.com/docs/guides/chat)) +- 可以为不同对话设置不同 APIKEY +- 小(整个网页 30k 左右) +- 可以设置不同的 API Endpoint(方便墙内人士使用反向代理转发 API 请求) + +## 屏幕截图 + +![screenshot](./screenshot.webp) + +~~发病.webp~~ + +## 使用 + +以下任意方式都可: + +- 访问 github pages 部署 +- 从 release 下载网页文件然后双击打开 +- 自行编译构建网页 + +### 更改默认参数 + +- `key`: OPENAI API KEY 默认为空 +- `sys`: system message 默认为 "你是一个猫娘,你要模仿猫娘的语气说话" +- `api`: API Endpoint 默认为 `https://api.openai.com/v1/chat/completions` + +例如 `http://localhost:1234/?key=xxxx` 那么新创建的会话将会使用该默认 API + +以上三个参数应用于单个对话,随时可在顶部更改 + +## 自行编译构建网页 + +```bash +yarn install +yarn build +``` \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..ed4eb0b --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + ChatGPT API Web + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..186f161 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "chatgpt-api-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "autoprefixer": "^10.4.14", + "postcss": "^8.4.21", + "preact": "^10.11.3", + "sakura.css": "^1.4.1", + "tailwindcss": "^3.2.7" + }, + "devDependencies": { + "@preact/preset-vite": "^2.5.0", + "typescript": "^4.9.3", + "vite": "^4.1.0" + } +} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/screenshot.webp b/screenshot.webp new file mode 100644 index 0000000000000000000000000000000000000000..628510fe7fe39173e620f1195baaf3b67c2c8444 GIT binary patch literal 53134 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
  • h_Jf#4fB<3AJj+?G64>+OSI{ zAwA(j+%d|Yq5%t7M+{?H(|~B2RBx7)LVX^2UKId+F! z{6zzL=E}ftW0M>b`UaWTie&Kht9NGoRy%%>Ur_~0Y00A8E45zlAHm?iyzA-a<-hj; z+ZDPMLRnsEI(v2|;a$)BN3(q}U7pR?L)F;MIklvM`$J2`y0lKNio@P(X4~*+j}IRg zsGHrhk@)l!nBs-fvV>ld{5B!(oN1xpvG7pwzVYav=ci4D{$_016c&pkzQV{aWfN_+ zo&6Y&Iep_e$Oa|l?J=&-w%lu^ILJLVT&+n7d=S<=oT6U$8CvdkPTA?a-X}5<+ zu{WFqOA5r$pC6kNL+I*H2uvD|5%w2m^`MO=yB+mY_WPh=iPT&-q%ANL0P0n&%r0y& zKSQV(>WDMULC$B->a9!dZZh+eS<-zLwV@muN;X&iwnBNE*Ye3oped^PTVHtVLjBhI zBYEH9g{v;sEo-AXVBKZiib50anvn6}^XX5_?CdgC6V&g;0vEJ2kCYgL_ngv+5?xHA zKLdz7tjk>P^M<5qL11Fx5d6Taws5!(k#C1G8W<>hes4g08Vji@GLw1=^SJul-WJc# z!FdS|CS|HbKnF<-z%eB}s;Ynu%YNVh00qKpBI$sMwXZ=5$*+b9M{T|C)A2P}W19=B zh7OSA#RN53$}HHoSLFYIVFy#pF@`NJoF4~^C7u1JK{=I#J->7kL@~guj6x_-g2%5P zz9dJn!~~$ySagju330hz>aP^3h<(9rOY8c}I5F4#W?ILh6U<3X8&y0b$ca+o81+`q zyEQ$G$d0-}BfKJykh2_F_nWDCB#>FH;2EF^GTim_eZg}n5$zDs)PKY}Ua~GjQO=t) z?Gg*gF~#()6}m5-54c8xYSygzqU~lP7Iqrqqbi`f)x3WG1O@_F75HX*M66zkn?K_C zAfSSNG5+|Y%&0UKP!<&sV{b*-U;SpA3c0KjXhr3=k59zo<8q{a8=3ZgPl%VtQ2uf? zG0MDmDos4j5Iuqm{EPqqDgR2-IP}Kk!H5u7^1KZs`DDl7_ z#{eoRSRG7TByg#8BXTCJab2UD8WIR|XdArr7M>Hca-bi%pb=xuQa4b#?ONg*WSA^s z%#1jP8ZXq7E%M?;ln7D9nN35qOXRn_1v(Bt-e80XYmvc+-7TB6rz8= zLTS3iE0f_Zx(Fr(KG95P0ZrzY620=sQDI|!qy0I@E7{J{XfxUp;mpx8iSYW@G%nDz zY##YzbM-B|g9L#73{h<0b2}Xt&IdEG(QM#zI~^?e&iFacl~=kYEjA$`_@trG$@io_ z9&-*X!xjb2pyITydCw?D+hIaLWXIjpn3{y!B!f7z2^=GVtyBUhnj09$kNZ)%AZrKu zjN)UAbDzb@nJ(V)427*>p62Sqn7H2rfy58i1>rImy%d46#&&({GZ0- { + const queryParameters = new URLSearchParams(window.location.search); + const key = queryParameters.get("key"); + return key; +}; + +const defaultSysMessage = () => { + const queryParameters = new URLSearchParams(window.location.search); + const sys = queryParameters.get("sys"); + return sys; +}; + +const defaultAPIEndpoint = () => { + const queryParameters = new URLSearchParams(window.location.search); + const sys = queryParameters.get("api"); + return sys; +}; + +const _defaultAPIEndpoint = "https://api.openai.com/v1/chat/completions"; +export const newChatStore = ( + apiKey = "", + systemMessageContent = "你是一个猫娘,你要模仿猫娘的语气说话", + apiEndpoint = _defaultAPIEndpoint +): ChatStore => { + return { + systemMessageContent: defaultSysMessage() || systemMessageContent, + history: [], + postBeginIndex: 0, + tokenMargin: 1024, + totalTokens: 0, + maxTokens: 4096, + apiKey: defaultAPIKEY() || apiKey, + apiEndpoint: defaultAPIEndpoint() || apiEndpoint, + }; +}; + +const STORAGE_NAME = "chatgpt-api-web"; + +export function App() { + const initAllChatStore: ChatStore[] = JSON.parse( + localStorage.getItem(STORAGE_NAME) || "[]" + ); + if (initAllChatStore.length === 0) { + initAllChatStore.push(newChatStore()); + localStorage.setItem(STORAGE_NAME, JSON.stringify(initAllChatStore)); + } + const [allChatStore, setAllChatStore] = useState(initAllChatStore); + const [selectedChatIndex, setSelectedChatIndex] = useState(0); + const chatStore = allChatStore[selectedChatIndex]; + const setChatStore = (cs: ChatStore) => { + allChatStore[selectedChatIndex] = cs; + setAllChatStore([...allChatStore]); + }; + useEffect(() => { + console.log("saved", allChatStore); + localStorage.setItem(STORAGE_NAME, JSON.stringify(allChatStore)); + }, [allChatStore]); + + const [inputMsg, setInputMsg] = useState(""); + const [showGenerating, setShowGenerating] = useState(false); + + const client = new ChatGPT(chatStore.apiKey); + + const _complete = async () => { + client.apiEndpoint = chatStore.apiEndpoint; + client.sysMessageContent = chatStore.systemMessageContent; + client.messages = chatStore.history.slice(chatStore.postBeginIndex); + const response = await client.complete(); + chatStore.history.push({ role: "assistant", content: response }); + chatStore.maxTokens = client.max_tokens; + chatStore.tokenMargin = client.tokens_margin; + chatStore.totalTokens = client.total_tokens; + chatStore.postBeginIndex = + chatStore.history.length - client.messages.length; + console.log("postBeginIndex", chatStore.postBeginIndex); + setChatStore({ ...chatStore }); + }; + + const complete = async () => { + try { + setShowGenerating(true); + await _complete(); + } catch (error) { + alert(error); + } finally { + setShowGenerating(false); + } + }; + + const send = async () => { + if (!inputMsg) { + console.log("empty message"); + return; + } + chatStore.history.push({ role: "user", content: inputMsg.trim() }); + setChatStore({ ...chatStore }); + setInputMsg(""); + await complete(); + setChatStore({ ...chatStore }); + }; + + const changAPIKEY = () => { + const newAPIKEY = prompt(`Current API KEY: ${chatStore.apiKey}`); + if (!newAPIKEY) return; + chatStore.apiKey = newAPIKEY; + setChatStore({ ...chatStore }); + }; + + return ( +
    +
    +
    + +
      + {allChatStore.map((cs, i) => ( +
    • + +
    • + ))} +
    +
    + +
    +
    +

    +

    + {" "} + {" "} + +
    +
    + Total: {chatStore.totalTokens}{" "} + Max: {chatStore.maxTokens}{" "} + Margin: {chatStore.tokenMargin}{" "} + + Message: {chatStore.history.length - chatStore.postBeginIndex} + {" "} + Cut: {chatStore.postBeginIndex} +
    +

    +
    + {chatStore.history.length === 0 && ( +

    + 喵喵,请先在上方设置 (OPENAI) API KEY +

    + )} + {chatStore.history.map((chat, i) => { + const pClassName = + chat.role === "assistant" + ? "p-2 rounded relative bg-white my-2 text-left" + : "p-2 rounded relative bg-green-400 my-2 text-right"; + const iconClassName = + chat.role === "user" + ? "absolute bottom-0 left-0" + : "absolute bottom-0 right-0"; + const DeleteIcon = () => ( + + ); + return ( +

    + {chat.content + .split("\n") + .filter((line) => line) + .map((line) => ( +

    {line}

    + ))} + +

    + ); + })} + {showGenerating && ( +

    Generating... please wait...

    + )} +
    +
    + + +
    +
    +
    + ); +} diff --git a/src/chatgpt.ts b/src/chatgpt.ts new file mode 100644 index 0000000..788711d --- /dev/null +++ b/src/chatgpt.ts @@ -0,0 +1,148 @@ +export interface Message { + role: "system" | "user" | "assistant"; + content: string; +} + +class Chat { + OPENAI_API_KEY: string; + messages: Message[]; + sysMessageContent: string; + total_tokens: number; + max_tokens: number; + tokens_margin: number; + apiEndpoint: string; + + constructor( + OPENAI_API_KEY: string | undefined, + { + systemMessage = "你是一个有用的人工智能助理", + max_tokens = 4096, + tokens_margin = 1024, + apiEndPoint = "https://api.openai.com/v1/chat/completions", + } = {} + ) { + if (OPENAI_API_KEY === undefined) { + throw "OPENAI_API_KEY is undefined"; + } + this.OPENAI_API_KEY = OPENAI_API_KEY; + this.messages = []; + this.total_tokens = 0; + this.max_tokens = max_tokens; + this.tokens_margin = tokens_margin; + this.sysMessageContent = systemMessage; + this.apiEndpoint = apiEndPoint; + } + + async fetch(): Promise<{ + id: string; + object: string; + created: number; + model: string; + usage: { + prompt_tokens: number | undefined; + completion_tokens: number | undefined; + total_tokens: number | undefined; + }; + choices: { + message: Message | undefined; + finish_reason: "stop" | "length"; + index: number | undefined; + }[]; + }> { + const resp = await fetch(this.apiEndpoint, { + method: "POST", + headers: { + Authorization: `Bearer ${this.OPENAI_API_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: "gpt-3.5-turbo", + messages: [ + { role: "system", content: this.sysMessageContent }, + ...this.messages, + ], + }), + }).then((resp) => resp.json()); + return resp; + } + + async say(content: string): Promise { + this.messages.push({ role: "user", content }); + await this.complete(); + return this.messages.slice(-1)[0].content; + } + + async complete(): Promise { + const resp = await this.fetch(); + this.total_tokens = resp?.usage?.total_tokens ?? 0; + if (resp?.choices[0]?.message) { + this.messages.push(resp?.choices[0]?.message); + } + + if (resp.choices[0]?.finish_reason === "length") { + this.forceForgetSomeMessages(); + } else { + this.forgetSomeMessages(); + } + + return ( + resp?.choices[0]?.message?.content ?? `Error: ${JSON.stringify(resp)}` + ); + } + + // https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them + calculate_token_length(content: string): number { + const totalCount = content.length; + const chineseCount = content.match(/[\u00ff-\uffff]|\S+/g)?.length ?? 0; + const englishCount = totalCount - chineseCount; + const tokenLength = englishCount / 4 + (chineseCount * 4) / 3; + return ~~tokenLength; + } + + user(...messages: string[]) { + for (const msg of messages) { + this.messages.push({ role: "user", content: msg }); + this.total_tokens += this.calculate_token_length(msg); + this.forgetSomeMessages(); + } + } + + assistant(...messages: string[]) { + for (const msg of messages) { + this.messages.push({ role: "assistant", content: msg }); + this.total_tokens += this.calculate_token_length(msg); + this.forgetSomeMessages(); + } + } + + forgetSomeMessages() { + // forget occur condition + if (this.total_tokens + this.tokens_margin >= this.max_tokens) { + this.forceForgetSomeMessages(); + } + } + + forceForgetSomeMessages() { + this.messages = [ + ...this.messages.slice(Math.max(~~(this.messages.length / 4), 2)), + ]; + } + + forgetAllMessage() { + this.messages = []; + } + + stats(): string { + return ( + `total_tokens: ${this.total_tokens}` + + "\n" + + `max_tokens: ${this.max_tokens}` + + "\n" + + `tokens_margin: ${this.tokens_margin}` + + "\n" + + `messages.length: ${this.messages.length}` + ); + } +} + +export default Chat; diff --git a/src/global.css b/src/global.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/global.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..2af1859 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,4 @@ +import { render } from 'preact' +import { App } from './app' + +render(, document.getElementById('app') as HTMLElement) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..ecf62b5 --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9c1b1e0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "jsxImportSource": "preact" + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..9d31e2a --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..619d4cf --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import preact from '@preact/preset-vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [preact()], + base: './', +}) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..9289215 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1096 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.20.5": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" + integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== + +"@babel/core@^7.9.6": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" + integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.0" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.21.0" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.21.0", "@babel/generator@^7.21.1": + version "7.21.1" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" + integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== + dependencies: + "@babel/types" "^7.21.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.21.0": + version "7.21.2" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2": + version "7.20.2" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": + version "7.21.2" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" + integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== + +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" + integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.21.0" + +"@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": + version "7.21.2" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" + integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.1" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.2" + "@babel/types" "^7.21.2" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2": + version "7.21.2" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" + integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@esbuild/android-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" + integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== + +"@esbuild/android-arm@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" + integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== + +"@esbuild/android-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" + integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== + +"@esbuild/darwin-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" + integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== + +"@esbuild/darwin-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" + integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== + +"@esbuild/freebsd-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" + integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== + +"@esbuild/freebsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" + integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== + +"@esbuild/linux-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" + integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== + +"@esbuild/linux-arm@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" + integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== + +"@esbuild/linux-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" + integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== + +"@esbuild/linux-loong64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" + integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== + +"@esbuild/linux-mips64el@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" + integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== + +"@esbuild/linux-ppc64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" + integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== + +"@esbuild/linux-riscv64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" + integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== + +"@esbuild/linux-s390x@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" + integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== + +"@esbuild/linux-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" + integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== + +"@esbuild/netbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" + integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== + +"@esbuild/openbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" + integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== + +"@esbuild/sunos-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" + integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== + +"@esbuild/win32-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" + integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== + +"@esbuild/win32-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" + integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== + +"@esbuild/win32-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" + integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@preact/preset-vite@^2.5.0": + version "2.5.0" + resolved "https://registry.npmmirror.com/@preact/preset-vite/-/preset-vite-2.5.0.tgz#6ff815558c16062a36e2d5da4b1225d7b216478d" + integrity sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.14.9" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@prefresh/vite" "^2.2.8" + "@rollup/pluginutils" "^4.1.1" + babel-plugin-transform-hook-names "^1.0.2" + debug "^4.3.1" + kolorist "^1.2.10" + resolve "^1.20.0" + +"@prefresh/babel-plugin@0.4.4": + version "0.4.4" + resolved "https://registry.npmmirror.com/@prefresh/babel-plugin/-/babel-plugin-0.4.4.tgz#54872f9f938d3adff587037ab987c5e6449bdfee" + integrity sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw== + +"@prefresh/core@^1.3.3": + version "1.4.1" + resolved "https://registry.npmmirror.com/@prefresh/core/-/core-1.4.1.tgz#b75a917b500e5373aeb9c485f18ca91e1d4433a8" + integrity sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g== + +"@prefresh/utils@^1.1.2": + version "1.1.3" + resolved "https://registry.npmmirror.com/@prefresh/utils/-/utils-1.1.3.tgz#c764c6c8f0917f0a72ae14ec57ed8befde3f9bac" + integrity sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A== + +"@prefresh/vite@^2.2.8": + version "2.2.9" + resolved "https://registry.npmmirror.com/@prefresh/vite/-/vite-2.2.9.tgz#e719126fbba3f0de93f1f95d494ab44d064243c1" + integrity sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA== + dependencies: + "@babel/core" "^7.9.6" + "@prefresh/babel-plugin" "0.4.4" + "@prefresh/core" "^1.3.3" + "@prefresh/utils" "^1.1.2" + "@rollup/pluginutils" "^4.1.0" + +"@rollup/pluginutils@^4.1.0", "@rollup/pluginutils@^4.1.1": + version "4.2.1" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.npmmirror.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +autoprefixer@^10.4.14: + version "10.4.14" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +babel-plugin-transform-hook-names@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz#0d75c2d78e8bbcdb258241131562b9cf07f010f3" + integrity sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.3, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001466" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz#c1e6197c540392e09709ecaa9e3e403428c53375" + integrity sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +debug@^4.1.0, debug@^4.3.1: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +defined@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +electron-to-chromium@^1.4.284: + version "1.4.328" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz#b4565ffa502542b561cea16086d6d9b916c7095a" + integrity sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw== + +esbuild@^0.16.14: + version "0.16.17" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" + integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== + optionalDependencies: + "@esbuild/android-arm" "0.16.17" + "@esbuild/android-arm64" "0.16.17" + "@esbuild/android-x64" "0.16.17" + "@esbuild/darwin-arm64" "0.16.17" + "@esbuild/darwin-x64" "0.16.17" + "@esbuild/freebsd-arm64" "0.16.17" + "@esbuild/freebsd-x64" "0.16.17" + "@esbuild/linux-arm" "0.16.17" + "@esbuild/linux-arm64" "0.16.17" + "@esbuild/linux-ia32" "0.16.17" + "@esbuild/linux-loong64" "0.16.17" + "@esbuild/linux-mips64el" "0.16.17" + "@esbuild/linux-ppc64" "0.16.17" + "@esbuild/linux-riscv64" "0.16.17" + "@esbuild/linux-s390x" "0.16.17" + "@esbuild/linux-x64" "0.16.17" + "@esbuild/netbsd-x64" "0.16.17" + "@esbuild/openbsd-x64" "0.16.17" + "@esbuild/sunos-x64" "0.16.17" + "@esbuild/win32-arm64" "0.16.17" + "@esbuild/win32-ia32" "0.16.17" + "@esbuild/win32-x64" "0.16.17" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kolorist@^1.2.10: + version "1.7.0" + resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.7.0.tgz#8e22bc470ea2d2743dbd461808f8b5246b19f5f4" + integrity sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g== + +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.1.0" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: + version "6.0.11" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.0.9, postcss@^8.4.21: + version "8.4.21" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +preact@^10.11.3: + version "10.13.1" + resolved "https://registry.npmmirror.com/preact/-/preact-10.13.1.tgz#d220bd8771b8fa197680d4917f3cefc5eed88720" + integrity sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@^3.10.0: + version "3.19.1" + resolved "https://registry.npmmirror.com/rollup/-/rollup-3.19.1.tgz#2b3a31ac1ff9f3afab2e523fa687fef5b0ee20fc" + integrity sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sakura.css@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/sakura.css/-/sakura.css-1.4.1.tgz#c343910b7999d169ae787fa4dc18a47f0c7561e8" + integrity sha512-n3PvLntuNPurS0S8Id/HPDwr/OJixjmCJpjyfzIYwJz7neQOJMAe7Lf/CB+zgYCZtw61RZFzUjj0c5eygVXSfw== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwindcss@^3.2.7: + version "3.2.7" + resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" + integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.0.9" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +typescript@^4.9.3: + version "4.9.5" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vite@^4.1.0: + version "4.1.4" + resolved "https://registry.npmmirror.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0" + integrity sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg== + dependencies: + esbuild "^0.16.14" + postcss "^8.4.21" + resolve "^1.22.1" + rollup "^3.10.0" + optionalDependencies: + fsevents "~2.3.2" + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==