├── api
├── sources
│ └── .gitkeep
├── .python-version
├── models
│ └── api.py
├── Pipfile
├── document_stores
│ └── faiss.py
├── .vscode
│ └── launch.json
├── Dockerfile
├── README.md
├── main.py
├── pipelines
│ ├── indexing.py
│ ├── openai.py
│ └── nodes
│ │ └── markdown.py
└── .gitignore
├── app
├── public
│ ├── lego.png
│ ├── favicon.ico
│ └── usericon.png
├── next.config.js
├── pages
│ ├── _app.js
│ ├── _document.js
│ ├── api
│ │ └── chat.js
│ └── index.js
├── package.json
├── styles
│ ├── globals.css
│ └── Home.module.css
├── Dockerfile
├── LICENSE
├── README.md
├── .gitignore
└── package-lock.json
├── res
├── screenshot.png
└── bricky-recording.gif
├── .gitmodules
├── compose.yaml
├── LICENSE.md
├── README.md
└── .gitignore
/api/sources/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/api/.python-version:
--------------------------------------------------------------------------------
1 | 3.10.9
2 |
--------------------------------------------------------------------------------
/app/public/lego.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/larsbaunwall/bricky/HEAD/app/public/lego.png
--------------------------------------------------------------------------------
/res/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/larsbaunwall/bricky/HEAD/res/screenshot.png
--------------------------------------------------------------------------------
/app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/larsbaunwall/bricky/HEAD/app/public/favicon.ico
--------------------------------------------------------------------------------
/app/public/usericon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/larsbaunwall/bricky/HEAD/app/public/usericon.png
--------------------------------------------------------------------------------
/res/bricky-recording.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/larsbaunwall/bricky/HEAD/res/bricky-recording.gif
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "api/haystack"]
2 | path = api/haystack
3 | url = git@github.com:deepset-ai/haystack.git
4 |
--------------------------------------------------------------------------------
/app/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: true,
4 | }
5 |
6 | module.exports = nextConfig
7 |
--------------------------------------------------------------------------------
/compose.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | api:
3 | build: api/.
4 | ports:
5 | - "8080:8080"
6 | app:
7 | build: app/.
8 | ports:
9 | - "3000:3000"
--------------------------------------------------------------------------------
/app/pages/_app.js:
--------------------------------------------------------------------------------
1 | import '../styles/globals.css'
2 |
3 | export default function App({ Component, pageProps }) {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/app/pages/_document.js:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from 'next/document'
2 |
3 | export default function Document() {
4 | return (
5 |
6 |
8 |
9 |
10 |
11 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/app/pages/api/chat.js:
--------------------------------------------------------------------------------
1 | export default async function (req, res) {
2 | const response = await fetch("http://api:8080/ask", {
3 | method: "POST",
4 | headers: {
5 | "Content-Type": "application/json",
6 | },
7 | body: JSON.stringify({
8 | question: req.body.question,
9 | history: req.body.history,
10 | }),
11 | });
12 |
13 | const data = await response.json();
14 |
15 | res.status(200).json({ result: data });
16 | }
17 |
--------------------------------------------------------------------------------
/api/models/api.py:
--------------------------------------------------------------------------------
1 | from typing import Optional, List, Any, Dict
2 |
3 | from pydantic import BaseModel
4 |
5 |
6 | class Document(BaseModel):
7 | name: Optional[str] = None
8 | content: str
9 | meta: Dict[str, Any]
10 |
11 |
12 | class QueryModel(BaseModel):
13 | question: str
14 | top_k = 5
15 | history: list = None
16 |
17 |
18 | class ResponseModel(BaseModel):
19 | success: str = None
20 | error: str = None
21 | documents: List[Document]
22 |
--------------------------------------------------------------------------------
/api/Pipfile:
--------------------------------------------------------------------------------
1 | [[source]]
2 | url = "https://pypi.org/simple"
3 | verify_ssl = true
4 | name = "pypi"
5 |
6 | [packages]
7 | python-dotenv = "*"
8 | fastapi = "*"
9 | pydantic = "*"
10 | uvicorn = "*"
11 | markdown = "*"
12 | python-frontmatter = "*"
13 | farm-haystack = {extras = ["docstores,crawler,preprocessing"], version = "*"}
14 | beautifulsoup4 = "*"
15 |
16 | [dev-packages]
17 | autopep8 = "*"
18 |
19 | [requires]
20 | python_version = "3.10"
21 | python_full_version = "3.10.9"
22 |
--------------------------------------------------------------------------------
/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bricky-chat",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@emotion/react": "^11.10.5",
13 | "@emotion/styled": "^11.10.5",
14 | "@mui/material": "^5.11.4",
15 | "@next/font": "13.1.1",
16 | "next": "13.1.1",
17 | "openai": "^3.1.0",
18 | "react": "18.2.0",
19 | "react-dom": "18.2.0",
20 | "react-markdown": "^8.0.4"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/api/document_stores/faiss.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from haystack.document_stores import FAISSDocumentStore
4 |
5 |
6 | def load_store(index_name: str, embedding_dim: int = 1536) -> FAISSDocumentStore:
7 | index_path = "indices/{0}".format(index_name)
8 | index_exists = os.path.exists(index_path)
9 |
10 | if index_exists:
11 | return FAISSDocumentStore.load(index_path)
12 | else:
13 | return FAISSDocumentStore(
14 | embedding_dim=embedding_dim,
15 | faiss_index_factory_str="Flat",
16 | sql_url="sqlite:///{0}_document_store.db".format(index_path))
--------------------------------------------------------------------------------
/api/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 |
8 | {
9 | "name": "Python: Flask",
10 | "type": "python",
11 | "request": "launch",
12 | "module": "flask",
13 | "env": {
14 | "FLASK_APP": "app.py",
15 | "FLASK_DEBUG": "1"
16 | },
17 | "args": ["run", "--no-debugger", "--no-reload"],
18 | "jinja": true,
19 | "justMyCode": true
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/app/styles/globals.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | padding: 0;
6 | margin: 0;
7 | font-family: 'Inter', sans-serif;
8 | }
9 |
10 | html,
11 | body {
12 | max-width: 100vw;
13 | overflow-x: hidden;
14 | }
15 |
16 | body {
17 | color: #92f2e8;
18 | background: #001233;
19 | }
20 |
21 | a {
22 | color: inherit;
23 | text-decoration: none;
24 | }
25 |
26 | a:hover {
27 | opacity: 0.8;
28 | }
29 |
30 | /* WebKit and Chromiums */
31 | ::-webkit-scrollbar {
32 | width: 8px;
33 | height: 8px;
34 | background-color: #001233;
35 | }
36 |
37 | ::-webkit-scrollbar-thumb {
38 | background: #001247;
39 | border-radius: 5px;
40 | }
--------------------------------------------------------------------------------
/app/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18-alpine AS deps
2 | RUN apk add --no-cache libc6-compat
3 | WORKDIR /app
4 |
5 | COPY package.json package-lock.json ./
6 | RUN npm install --production
7 |
8 | FROM node:18-alpine AS builder
9 | WORKDIR /app
10 | COPY --from=deps /app/node_modules ./node_modules
11 | COPY . .
12 |
13 | ENV NEXT_TELEMETRY_DISABLED 1
14 |
15 | RUN npm run build
16 |
17 | FROM node:18-alpine AS runner
18 | WORKDIR /app
19 |
20 | ENV NODE_ENV production
21 | ENV NEXT_TELEMETRY_DISABLED 1
22 |
23 | RUN addgroup --system --gid 1001 nodejs
24 | RUN adduser --system --uid 1001 nextjs
25 |
26 | COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
27 | COPY --from=builder /app/node_modules ./node_modules
28 | COPY --from=builder /app/package.json ./package.json
29 | COPY --from=builder /app/public ./public
30 |
31 | USER nextjs
32 |
33 | EXPOSE 3000
34 |
35 | ENV PORT 3000
36 |
37 | CMD ["npm", "start"]
38 |
--------------------------------------------------------------------------------
/api/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM deepset/haystack:base-cpu-v1.13.0 as base
2 |
3 | FROM base AS python-deps
4 |
5 | # Install pipenv and compilation dependencies
6 | RUN pip install pipenv
7 | RUN apt-get update && apt-get install -y --no-install-recommends gcc
8 |
9 | # Install python dependencies in /.venv
10 | COPY Pipfile .
11 | COPY Pipfile.lock .
12 | #RUN pipenv requirements > requirements.txt
13 | #RUN pip install -r requirements.txt
14 | RUN pipenv run pip install --upgrade setuptools
15 | RUN pipenv install --system --deploy
16 |
17 | FROM python-deps AS runtime
18 |
19 | # Copy virtual env from python-deps stage
20 | #COPY --from=python-deps /.venv /.venv
21 | #ENV PATH="/.venv/bin:$PATH"
22 |
23 | # Create and switch to a new user
24 | RUN useradd --create-home appuser
25 | WORKDIR /home/appuser
26 | USER appuser
27 |
28 | ENV TIKA_LOG_PATH=/home/appuser
29 |
30 | # Install application into container
31 | COPY . .
32 |
33 | EXPOSE 8080
34 | CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
--------------------------------------------------------------------------------
/api/README.md:
--------------------------------------------------------------------------------
1 | ## Meet Bricky - a conversational bot (Haystack chatbot backend)
2 |
3 | This API builds on the [haystack platform](https://github.com/deepset/haystack) for indexing and embedding markdown documents. It uses OpenAI ChatGPT for answer generation
4 |
5 | ## Getting started 🚀
6 |
7 | 1. Clone this repo!
8 | 2. Install dependencies: `pipenv install`
9 | 3. Run the development server: `python -m main.py`
10 |
11 | Open [http://localhost:8080/docs](http://localhost:8080/docs) with your browser to see the OpenAPI documentation.
12 |
13 | ## Learn more
14 |
15 | To learn more about Haystack and OpenAI, take a look at the following resources:
16 |
17 | - [Haystack Documentation](https://docs.haystack.deepset.ai/docs) - learn about the Haystack platform by deepset.ai.
18 | - [OpenAI docs](https://platform.openai.com/docs/introduction) - the OpenAI docs site.
19 |
20 | ## Powered by haystack and OpenAI ChatGPT
21 |
22 | - Frontend implementation can be found [here](../app).
23 |
24 | Questions or comments? Reach out to [@larsbaunwall](https://github.com/larsbaunwall)
25 |
26 | Don't forget to :star: this repo!
--------------------------------------------------------------------------------
/app/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Zahid Khawaja
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Lars Baunwall
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/README.md:
--------------------------------------------------------------------------------
1 | ## Meet Bricky - a Haystack conversational bot (Next.js chatbot frontend)
2 |
3 | I'm proudly adopted from the [Langchain chatbot sample](https://blog.langchain.dev/langchain-chat/), originally built by [Zahid](https://twitter.com/chillzaza_) - you should go check that repo out too!
4 |
5 | ## Getting started 🚀
6 |
7 | 1. Clone this repo!
8 | 2. Install dependencies: `npm install`
9 | 3. Run the development server: `npm run dev`
10 |
11 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
12 |
13 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
14 |
15 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/chat](http://localhost:3000/api/chat). This endpoint can be edited in `pages/api/chat.js`.
16 |
17 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
18 |
19 | ## Learn more
20 |
21 | To learn more about Next.js, take a look at the following resources:
22 |
23 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
24 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
25 |
26 | ## Powered by haystack and OpenAI ChatGPT
27 |
28 | - [Haystack](https://github.com/deepset/haystack) backend implementation can be found [here](../api).
29 |
30 | Questions or comments? Reach out to [@larsbaunwall](https://github.com/larsbaunwall)
31 |
32 | Don't forget to :star: this repo!
--------------------------------------------------------------------------------
/api/main.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import os
3 |
4 | import uvicorn
5 | from dotenv import load_dotenv
6 | from fastapi import FastAPI, APIRouter
7 | from haystack.telemetry import disable_telemetry
8 |
9 | from models.api import QueryModel, ResponseModel, Document
10 | from pipelines.openai import GenerativeOpenAIPipeline
11 | from pipelines.indexing import MarkdownIndexingPipeline
12 |
13 | logging.basicConfig(
14 | format="%(levelname)s - %(name)s - %(message)s", level=logging.DEBUG)
15 | logging.getLogger("haystack").setLevel(logging.DEBUG)
16 |
17 | openai_key: str
18 | answer_pipe: GenerativeOpenAIPipeline
19 |
20 | disable_telemetry()
21 | load_dotenv()
22 |
23 | openai_key = os.getenv("OPENAI_KEY")
24 | index_name = os.getenv("INDEX_NAME") or "faiss"
25 | doc_dir = os.getenv("DOC_DIR") or "./sources"
26 |
27 | index_pipe = MarkdownIndexingPipeline(index_name, openai_key, doc_dir)
28 | index_pipe.ensure_index()
29 |
30 | answer_pipe = GenerativeOpenAIPipeline(openai_key, index_name)
31 |
32 |
33 | class AskApi:
34 |
35 | pipeline: GenerativeOpenAIPipeline
36 |
37 | def __init__(self, pipeline: GenerativeOpenAIPipeline):
38 | self.pipeline = pipeline
39 | self.router = APIRouter()
40 | self.router.add_api_route("/ask", self.ask, methods=["POST"])
41 | self.router.add_api_route("/hello", self.hello, methods=["GET"])
42 |
43 | async def ask(self, item: QueryModel) -> ResponseModel:
44 | res = self.pipeline.run(query=item.question, params={"Generator": {"top_k": 1}, "Retriever": {"top_k": item.top_k}})
45 | try:
46 | answer = res["answers"][0].answer
47 | documents = [Document(content=doc.content, meta=doc.meta) for doc in res["documents"]]
48 | return ResponseModel(success=answer, documents=documents)
49 | except Exception as e:
50 | return ResponseModel(error=e.message)
51 |
52 | async def hello(self) -> ResponseModel:
53 | return ResponseModel(success="Hello there!")
54 |
55 |
56 | app = FastAPI(title="Bricky's chatbot API")
57 | api = AskApi(answer_pipe)
58 | app.include_router(api.router)
59 |
60 | if __name__ == "__main__":
61 | uvicorn.run(app, host="127.0.0.1", port=8080)
62 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Meet Bricky - a conversational bot using OpenAI 🤖
2 |
3 | Remember clippy? Meet bricky!
4 |
5 | Bricky is a conversational bot using [Retrieval-Augmented Generation](https://arxiv.org/abs/2005.11401) with some help from OpenAI's GPT-3 LLM.
6 |
7 | Bricky indexes content stored in markdown files and vectorizes it using OpenAI embeddings. It then uses few-shot learning using a ChatGPT prompt to generate an answer based on relevant content.
8 |
9 | Read more about my journey into this field and the background for creating Bricky in [my blog article](https://medium.com/@larslb/standing-on-the-shoulders-of-a-giant-embedding-intelligent-behavior-using-large-language-models-8c0f644b6d87)
10 |
11 | The project is inspired by the awesome [HoustonAI by Astro](https://github.com/withastro/houston.astro.build)
12 |
13 | 
14 |
15 |
16 | ## Getting started 🚀
17 |
18 | ### Prereqs
19 |
20 | Provide these `env` variables for the api container by creating a `dotenv` file in `api/.env`
21 |
22 | ```
23 | OPENAI_KEY=
24 | ```
25 |
26 | ### Steps
27 |
28 | 1. Clone this repo!
29 | 1. Copy over your documentation to `api/sources`
30 | 1. Run docker-compose: `docker-compose up`
31 |
32 | You should now have two endpoints running:
33 |
34 | - The [Nextjs-based frontend](./app): Open [http://localhost:3000](http://localhost:3000) to meet Bricky.
35 | - The [Haystack-based API](./api): Open [http://localhost:8080/docs](http://localhost:8080/docs) with your browser to see the OpenAPI documentation.
36 |
37 | Note: if you make changes to the any files, i.e. `api/.env` or the docs in `sources/docs`, you need to rebuild the images: `docker-compose rebuild --no-cache`.
38 |
39 | ## Learn more
40 |
41 | To learn more about Haystack and OpenAI, take a look at the following resources:
42 |
43 | - [Haystack Documentation](https://docs.haystack.deepset.ai/docs) - learn about the Haystack platform by deepset.ai.
44 | - [OpenAI docs](https://platform.openai.com/docs/introduction) - the OpenAI docs site.
45 |
46 | To learn more about Next.js, take a look at the following resources:
47 |
48 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
49 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
50 |
51 | ## Powered by haystack and OpenAI ChatGPT
52 |
53 | - Frontend implementation can be found [here](./app).
54 | - Backend implementation can be found [here](./api).
55 |
56 | Questions or comments? Reach out to [@larsbaunwall](https://github.com/larsbaunwall)
57 |
58 | Don't forget to :star: this repo!
59 |
--------------------------------------------------------------------------------
/api/pipelines/indexing.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import os
3 |
4 | from pipelines.nodes.markdown import MarkdownConverter
5 |
6 | from document_stores.faiss import load_store
7 | from haystack.document_stores import BaseDocumentStore
8 | from haystack.nodes import EmbeddingRetriever, PreProcessor, BaseRetriever
9 | from haystack.pipelines import Pipeline, BaseStandardPipeline
10 |
11 |
12 | class MarkdownIndexingPipeline(BaseStandardPipeline):
13 | openai_key = ""
14 | index_name = ""
15 | index_path = ""
16 | index_exists = False
17 | doc_dir = ""
18 |
19 | def __init__(self, index_name: str, openai_key: str, doc_dir: str):
20 | self.openai_key = openai_key
21 | self.index_name = index_name
22 | self.index_path = "indices/{0}".format(index_name)
23 | self.index_exists = os.path.exists(self.index_path)
24 | self.doc_dir = doc_dir
25 |
26 | if not os.path.exists("indices"):
27 | os.makedirs("indices")
28 |
29 | def ensure_index(self):
30 |
31 | if not self.index_exists:
32 | self.pipeline = Pipeline()
33 | markdown_converter = MarkdownConverter(
34 | extract_headlines=True
35 | )
36 | preprocessor = PreProcessor(
37 | clean_empty_lines=True,
38 | clean_whitespace=True,
39 | clean_header_footer=False,
40 | split_by="word",
41 | split_length=150,
42 | split_respect_sentence_boundary=True,
43 | )
44 | document_store = load_store(self.index_name)
45 |
46 | self.pipeline.add_node(
47 | component=markdown_converter, name="MarkdownConverter", inputs=["File"]
48 | )
49 | self.pipeline.add_node(
50 | component=preprocessor, name="PreProcessor", inputs=["MarkdownConverter"]
51 | )
52 | self.pipeline.add_node(
53 | component=document_store, name="FAISSDocStore", inputs=["PreProcessor"]
54 | )
55 |
56 | files_to_index = []
57 | for file in glob.glob(os.path.join(self.doc_dir, "**/*.md"), recursive=True):
58 | if file.endswith('.md'):
59 | files_to_index.append(file)
60 |
61 | if len(files_to_index) != 0:
62 | self.pipeline.run(file_paths=files_to_index)
63 | document_store.update_embeddings(create_retriever(document_store, self.openai_key), batch_size=256)
64 | document_store.save(self.index_path)
65 | else:
66 | print("No files found to index at path " + self.doc_dir)
67 | print("Source context will be empty")
68 |
69 |
70 | def create_retriever(document_store: BaseDocumentStore, openai_key: str) -> BaseRetriever:
71 | return EmbeddingRetriever(
72 | document_store=document_store,
73 | batch_size=8,
74 | embedding_model="text-embedding-ada-002",
75 | api_key=openai_key,
76 | max_seq_len=1024
77 | )
78 |
--------------------------------------------------------------------------------
/api/pipelines/openai.py:
--------------------------------------------------------------------------------
1 | from typing import Optional
2 |
3 | from haystack.document_stores import BaseDocumentStore
4 | from haystack.nodes import OpenAIAnswerGenerator, EmbeddingRetriever, BaseRetriever, BaseGenerator
5 | from haystack.pipelines import GenerativeQAPipeline, BaseStandardPipeline, Pipeline
6 | from document_stores.faiss import load_store
7 | from pipelines.indexing import create_retriever
8 |
9 |
10 | class GenerativeOpenAIPipeline(BaseStandardPipeline):
11 | openai_key: str
12 | index_name: str
13 | document_store: BaseDocumentStore
14 | retriever: BaseRetriever
15 | generator: BaseGenerator
16 |
17 |
18 | def __init__(self, openai_key: str, index_name: str):
19 | self.openai_key = openai_key
20 | self.index_name = index_name
21 |
22 | self.document_store = load_store(index_name)
23 | self.retriever = create_retriever(self.document_store, openai_key)
24 |
25 | self.generator = OpenAIAnswerGenerator(
26 | api_key=openai_key,
27 | model="text-davinci-003",
28 | max_tokens=1000,
29 | temperature=0.1,
30 | frequency_penalty=1.0,
31 | examples_context="""You are a cheerful AI assistant named Bricky.
32 | In your spare time you do aerobics and freediving.
33 | Work is mostly spent answering engineering questions from the engineering handbook.
34 |
35 | The handbook is located at https://handbook/engineering-matters.
36 | The handbook contains the collective knowledge and experience from all our communities and engineering teams.
37 |
38 | You are given the following extracted parts of a long article in the handbook and a question. Provide a conversational answer of minimum 2 sentences
39 | with a hyperlink to the article. Do NOT make up a hyperlink that is not listed and only use hyperlinks
40 | pointing to the handbook. If the question includes a request for code, provide a code block directly from the
41 | documentation.
42 |
43 | You do tell jokes. If you don't know any use one you found on the Internet.
44 |
45 | If you don't know the answer, just say "Hmm, I'm not sure." Don't try to make up an answer. If the question
46 | is not about the engineering handbook, politely inform them that you are tuned to only answer questions about
47 | the engineering handbook.
48 |
49 | Links must be formatted as markdown links.
50 |
51 | Answer in Markdown""",
52 | examples=[
53 | ("how should I format a date in my API?", "You should format a date in your API using the RFC 3339 "
54 | "internet profile, which is a subset of ISO 8601. This "
55 | "should be represented in UTC using the format without "
56 | "local offsets"),
57 | ("What accessibility standard should I use?", "You should use level AA of the [Web Content "
58 | "Accessibility Guidelines 2.1 (WCAG 2.1)](https://handbook/engineering-matters#a11y) as a minimum.")
59 | ]
60 | )
61 |
62 | self.pipeline = Pipeline()
63 | self.pipeline.add_node(component=self.retriever, name="Retriever", inputs=["Query"])
64 | self.pipeline.add_node(component=self.generator, name="Generator", inputs=["Retriever"])
65 |
66 | def run(self, query: str, params: Optional[dict] = None, debug: Optional[bool] = None):
67 | """
68 | :param query: the query string.
69 | :param params: params for the `retriever` and `generator`. For instance,
70 | params={"Retriever": {"top_k": 10}, "Generator": {"top_k": 5}}
71 | :param debug: Whether the pipeline should instruct nodes to collect debug information
72 | about their execution. By default these include the input parameters
73 | they received and the output they generated.
74 | All debug information can then be found in the dict returned
75 | by this method under the key "_debug"
76 | """
77 | output = self.pipeline.run(query=query, params=params, debug=debug)
78 | return output
79 |
--------------------------------------------------------------------------------
/api/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .env
3 | .DS_Store
4 |
5 | # Created by https://www.toptal.com/developers/gitignore/api/python,nextjs
6 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,nextjs
7 |
8 | ### NextJS ###
9 | # dependencies
10 | /node_modules
11 | /.pnp
12 | .pnp.js
13 |
14 | # testing
15 | /coverage
16 |
17 | # next.js
18 | /.next/
19 | /out/
20 |
21 | # production
22 | /build
23 |
24 | # misc
25 | .DS_Store
26 | *.pem
27 |
28 | # debug
29 | npm-debug.log*
30 | yarn-debug.log*
31 | yarn-error.log*
32 | .pnpm-debug.log*
33 |
34 | # local env files
35 | .env*.local
36 |
37 | # vercel
38 | .vercel
39 |
40 | # typescript
41 | *.tsbuildinfo
42 | next-env.d.ts
43 |
44 | ### Python ###
45 | # Byte-compiled / optimized / DLL files
46 | __pycache__/
47 | *.py[cod]
48 | *$py.class
49 |
50 | # C extensions
51 | *.so
52 |
53 | # Distribution / packaging
54 | .Python
55 | build/
56 | develop-eggs/
57 | dist/
58 | downloads/
59 | eggs/
60 | .eggs/
61 | lib/
62 | lib64/
63 | parts/
64 | sdist/
65 | var/
66 | wheels/
67 | share/python-wheels/
68 | *.egg-info/
69 | .installed.cfg
70 | *.egg
71 | MANIFEST
72 |
73 | # PyInstaller
74 | # Usually these files are written by a python script from a template
75 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
76 | *.manifest
77 | *.spec
78 |
79 | # Installer logs
80 | pip-log.txt
81 | pip-delete-this-directory.txt
82 |
83 | # Unit test / coverage reports
84 | htmlcov/
85 | .tox/
86 | .nox/
87 | .coverage
88 | .coverage.*
89 | .cache
90 | nosetests.xml
91 | coverage.xml
92 | *.cover
93 | *.py,cover
94 | .hypothesis/
95 | .pytest_cache/
96 | cover/
97 |
98 | # Translations
99 | *.mo
100 | *.pot
101 |
102 | # Django stuff:
103 | *.log
104 | local_settings.py
105 | db.sqlite3
106 | db.sqlite3-journal
107 |
108 | # Flask stuff:
109 | instance/
110 | .webassets-cache
111 |
112 | # Scrapy stuff:
113 | .scrapy
114 |
115 | # Sphinx documentation
116 | docs/_build/
117 |
118 | # PyBuilder
119 | .pybuilder/
120 | target/
121 |
122 | # Jupyter Notebook
123 | .ipynb_checkpoints
124 |
125 | # IPython
126 | profile_default/
127 | ipython_config.py
128 |
129 | # pyenv
130 | # For a library or package, you might want to ignore these files since the code is
131 | # intended to run in multiple environments; otherwise, check them in:
132 | # .python-version
133 |
134 | # pipenv
135 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
136 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
137 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
138 | # install all needed dependencies.
139 | #Pipfile.lock
140 |
141 | # poetry
142 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
143 | # This is especially recommended for binary packages to ensure reproducibility, and is more
144 | # commonly ignored for libraries.
145 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
146 | #poetry.lock
147 |
148 | # pdm
149 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
150 | #pdm.lock
151 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
152 | # in version control.
153 | # https://pdm.fming.dev/#use-with-ide
154 | .pdm.toml
155 |
156 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
157 | __pypackages__/
158 |
159 | # Celery stuff
160 | celerybeat-schedule
161 | celerybeat.pid
162 |
163 | # SageMath parsed files
164 | *.sage.py
165 |
166 | # Environments
167 | .env
168 | .venv
169 | env/
170 | venv/
171 | ENV/
172 | env.bak/
173 | venv.bak/
174 |
175 | # Spyder project settings
176 | .spyderproject
177 | .spyproject
178 |
179 | # Rope project settings
180 | .ropeproject
181 |
182 | # mkdocs documentation
183 | /site
184 |
185 | # mypy
186 | .mypy_cache/
187 | .dmypy.json
188 | dmypy.json
189 |
190 | # Pyre type checker
191 | .pyre/
192 |
193 | # pytype static type analyzer
194 | .pytype/
195 |
196 | # Cython debug symbols
197 | cython_debug/
198 |
199 | # PyCharm
200 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
201 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
202 | # and can be added to the global gitignore or merged into this file. For a more nuclear
203 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
204 | #.idea/
205 |
206 | ### Python Patch ###
207 | # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
208 | poetry.toml
209 |
210 | # ruff
211 | .ruff_cache/
212 |
213 | # End of https://www.toptal.com/developers/gitignore/api/python,nextjs
214 | api/indices/**
215 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .env
3 | .DS_Store
4 |
5 | # Created by https://www.toptal.com/developers/gitignore/api/python,nextjs
6 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,nextjs
7 |
8 | ### NextJS ###
9 | # dependencies
10 | /node_modules
11 | /.pnp
12 | .pnp.js
13 |
14 | # testing
15 | /coverage
16 |
17 | # next.js
18 | /.next/
19 | /out/
20 |
21 | # production
22 | /build
23 |
24 | # misc
25 | .DS_Store
26 | *.pem
27 |
28 | # debug
29 | npm-debug.log*
30 | yarn-debug.log*
31 | yarn-error.log*
32 | .pnpm-debug.log*
33 |
34 | # local env files
35 | .env*.local
36 |
37 | # vercel
38 | .vercel
39 |
40 | # typescript
41 | *.tsbuildinfo
42 | next-env.d.ts
43 |
44 | ### Python ###
45 | # Byte-compiled / optimized / DLL files
46 | __pycache__/
47 | *.py[cod]
48 | *$py.class
49 |
50 | # C extensions
51 | *.so
52 |
53 | # Distribution / packaging
54 | .Python
55 | build/
56 | develop-eggs/
57 | dist/
58 | downloads/
59 | eggs/
60 | .eggs/
61 | lib/
62 | lib64/
63 | parts/
64 | sdist/
65 | var/
66 | wheels/
67 | share/python-wheels/
68 | *.egg-info/
69 | .installed.cfg
70 | *.egg
71 | MANIFEST
72 |
73 | # PyInstaller
74 | # Usually these files are written by a python script from a template
75 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
76 | *.manifest
77 | *.spec
78 |
79 | # Installer logs
80 | pip-log.txt
81 | pip-delete-this-directory.txt
82 |
83 | # Unit test / coverage reports
84 | htmlcov/
85 | .tox/
86 | .nox/
87 | .coverage
88 | .coverage.*
89 | .cache
90 | nosetests.xml
91 | coverage.xml
92 | *.cover
93 | *.py,cover
94 | .hypothesis/
95 | .pytest_cache/
96 | cover/
97 |
98 | # Translations
99 | *.mo
100 | *.pot
101 |
102 | # Django stuff:
103 | *.log
104 | local_settings.py
105 | db.sqlite3
106 | db.sqlite3-journal
107 |
108 | # Flask stuff:
109 | instance/
110 | .webassets-cache
111 |
112 | # Scrapy stuff:
113 | .scrapy
114 |
115 | # Sphinx documentation
116 | docs/_build/
117 |
118 | # PyBuilder
119 | .pybuilder/
120 | target/
121 |
122 | # Jupyter Notebook
123 | .ipynb_checkpoints
124 |
125 | # IPython
126 | profile_default/
127 | ipython_config.py
128 |
129 | # pyenv
130 | # For a library or package, you might want to ignore these files since the code is
131 | # intended to run in multiple environments; otherwise, check them in:
132 | # .python-version
133 |
134 | # pipenv
135 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
136 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
137 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
138 | # install all needed dependencies.
139 | #Pipfile.lock
140 |
141 | # poetry
142 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
143 | # This is especially recommended for binary packages to ensure reproducibility, and is more
144 | # commonly ignored for libraries.
145 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
146 | #poetry.lock
147 |
148 | # pdm
149 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
150 | #pdm.lock
151 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
152 | # in version control.
153 | # https://pdm.fming.dev/#use-with-ide
154 | .pdm.toml
155 |
156 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
157 | __pypackages__/
158 |
159 | # Celery stuff
160 | celerybeat-schedule
161 | celerybeat.pid
162 |
163 | # SageMath parsed files
164 | *.sage.py
165 |
166 | # Environments
167 | .env
168 | .venv
169 | env/
170 | venv/
171 | ENV/
172 | env.bak/
173 | venv.bak/
174 |
175 | # Spyder project settings
176 | .spyderproject
177 | .spyproject
178 |
179 | # Rope project settings
180 | .ropeproject
181 |
182 | # mkdocs documentation
183 | /site
184 |
185 | # mypy
186 | .mypy_cache/
187 | .dmypy.json
188 | dmypy.json
189 |
190 | # Pyre type checker
191 | .pyre/
192 |
193 | # pytype static type analyzer
194 | .pytype/
195 |
196 | # Cython debug symbols
197 | cython_debug/
198 |
199 | # PyCharm
200 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
201 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
202 | # and can be added to the global gitignore or merged into this file. For a more nuclear
203 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
204 | #.idea/
205 |
206 | ### Python Patch ###
207 | # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
208 | poetry.toml
209 |
210 | # ruff
211 | .ruff_cache/
212 |
213 | # End of https://www.toptal.com/developers/gitignore/api/python,nextjs
214 | api/indices/**
215 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .env
3 | .DS_Store
4 |
5 | # Created by https://www.toptal.com/developers/gitignore/api/python,nextjs
6 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,nextjs
7 |
8 | ### NextJS ###
9 | # dependencies
10 | /node_modules
11 | /.pnp
12 | .pnp.js
13 |
14 | # testing
15 | /coverage
16 |
17 | # next.js
18 | /.next/
19 | /out/
20 |
21 | # production
22 | /build
23 |
24 | # misc
25 | .DS_Store
26 | *.pem
27 |
28 | # debug
29 | npm-debug.log*
30 | yarn-debug.log*
31 | yarn-error.log*
32 | .pnpm-debug.log*
33 |
34 | # local env files
35 | .env*.local
36 |
37 | # vercel
38 | .vercel
39 |
40 | # typescript
41 | *.tsbuildinfo
42 | next-env.d.ts
43 |
44 | ### Python ###
45 | # Byte-compiled / optimized / DLL files
46 | __pycache__/
47 | *.py[cod]
48 | *$py.class
49 |
50 | # C extensions
51 | *.so
52 |
53 | # Distribution / packaging
54 | .Python
55 | build/
56 | develop-eggs/
57 | dist/
58 | downloads/
59 | eggs/
60 | .eggs/
61 | lib/
62 | lib64/
63 | parts/
64 | sdist/
65 | var/
66 | wheels/
67 | share/python-wheels/
68 | *.egg-info/
69 | .installed.cfg
70 | *.egg
71 | MANIFEST
72 |
73 | # PyInstaller
74 | # Usually these files are written by a python script from a template
75 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
76 | *.manifest
77 | *.spec
78 |
79 | # Installer logs
80 | pip-log.txt
81 | pip-delete-this-directory.txt
82 |
83 | # Unit test / coverage reports
84 | htmlcov/
85 | .tox/
86 | .nox/
87 | .coverage
88 | .coverage.*
89 | .cache
90 | nosetests.xml
91 | coverage.xml
92 | *.cover
93 | *.py,cover
94 | .hypothesis/
95 | .pytest_cache/
96 | cover/
97 |
98 | # Translations
99 | *.mo
100 | *.pot
101 |
102 | # Django stuff:
103 | *.log
104 | local_settings.py
105 | db.sqlite3
106 | db.sqlite3-journal
107 |
108 | # Flask stuff:
109 | instance/
110 | .webassets-cache
111 |
112 | # Scrapy stuff:
113 | .scrapy
114 |
115 | # Sphinx documentation
116 | docs/_build/
117 |
118 | # PyBuilder
119 | .pybuilder/
120 | target/
121 |
122 | # Jupyter Notebook
123 | .ipynb_checkpoints
124 |
125 | # IPython
126 | profile_default/
127 | ipython_config.py
128 |
129 | # pyenv
130 | # For a library or package, you might want to ignore these files since the code is
131 | # intended to run in multiple environments; otherwise, check them in:
132 | # .python-version
133 |
134 | # pipenv
135 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
136 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
137 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
138 | # install all needed dependencies.
139 | #Pipfile.lock
140 |
141 | # poetry
142 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
143 | # This is especially recommended for binary packages to ensure reproducibility, and is more
144 | # commonly ignored for libraries.
145 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
146 | #poetry.lock
147 |
148 | # pdm
149 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
150 | #pdm.lock
151 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
152 | # in version control.
153 | # https://pdm.fming.dev/#use-with-ide
154 | .pdm.toml
155 |
156 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
157 | __pypackages__/
158 |
159 | # Celery stuff
160 | celerybeat-schedule
161 | celerybeat.pid
162 |
163 | # SageMath parsed files
164 | *.sage.py
165 |
166 | # Environments
167 | .env
168 | .venv
169 | env/
170 | venv/
171 | ENV/
172 | env.bak/
173 | venv.bak/
174 |
175 | # Spyder project settings
176 | .spyderproject
177 | .spyproject
178 |
179 | # Rope project settings
180 | .ropeproject
181 |
182 | # mkdocs documentation
183 | /site
184 |
185 | # mypy
186 | .mypy_cache/
187 | .dmypy.json
188 | dmypy.json
189 |
190 | # Pyre type checker
191 | .pyre/
192 |
193 | # pytype static type analyzer
194 | .pytype/
195 |
196 | # Cython debug symbols
197 | cython_debug/
198 |
199 | # PyCharm
200 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
201 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
202 | # and can be added to the global gitignore or merged into this file. For a more nuclear
203 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
204 | #.idea/
205 |
206 | ### Python Patch ###
207 | # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
208 | poetry.toml
209 |
210 | # ruff
211 | .ruff_cache/
212 |
213 | # End of https://www.toptal.com/developers/gitignore/api/python,nextjs
214 |
215 | api/indices/**
216 |
--------------------------------------------------------------------------------
/app/styles/Home.module.css:
--------------------------------------------------------------------------------
1 | .main {
2 | display: flex;
3 | flex-direction: column;
4 | justify-content: space-between;
5 | align-items: center;
6 | padding: 2rem;
7 | }
8 |
9 | .header {
10 | width: auto;
11 | }
12 |
13 | .header p {
14 | text-align: center;
15 | }
16 |
17 | .topnav {
18 | box-shadow: rgb(0 0 0 / 50%) 0px 0px 50px;
19 | display: flex;
20 | justify-content: space-between;
21 | padding: 1rem 0.75rem 1rem 0.75rem;
22 | align-items: center;
23 | vertical-align: middle;
24 | }
25 |
26 | .topnav .boticon {
27 | border-radius: 20px;;
28 | border: 2px solid #002466;
29 | }
30 |
31 | .navlogo * {
32 | vertical-align: middle;
33 | }
34 |
35 | .navlogo, .navlinks a {
36 | font-weight: 500;
37 | }
38 |
39 | .navlogo {
40 | font-size: 1.25rem;
41 | margin-left: 1rem;
42 | }
43 |
44 | .navlinks {
45 | width: 20rem;
46 | display: flex;
47 | justify-content: space-evenly;
48 | align-items: center;
49 | }
50 |
51 | .apptitle {
52 | font-size: 2.5rem;
53 | font-weight: 500;
54 | display: flex;
55 | justify-content: center;
56 | }
57 |
58 | .appdescription {
59 | font-size: 1.1rem;
60 | margin: 1rem;
61 | }
62 |
63 | .link {
64 | font-weight: 500;
65 | }
66 |
67 | .cloudform {
68 | position: relative;
69 | }
70 |
71 | .textarea {
72 | position: relative;
73 | resize: none;
74 | font-size: 1.1rem;
75 | padding: 1rem 2rem 1rem 2rem;
76 | width: 75vw;
77 | border-radius: 0.5rem;
78 | border: 1px solid #7B2CBF;
79 | background: #001247;
80 | color: #80ed99;
81 | outline: none;
82 | }
83 |
84 | .textarea:disabled {
85 | opacity: 0.5;
86 | }
87 |
88 | .textarea::placeholder {
89 | color: #5f6368;
90 | }
91 |
92 | .generatebutton {
93 | position: absolute;
94 | top: 0.87rem;
95 | right: 1rem;
96 | color: rgb(128 237 153);
97 | background: none;
98 | padding: 0.3rem;
99 | border: none;
100 | display: flex;
101 | }
102 |
103 | .loadingwheel {
104 | position: absolute;
105 | top: 0.2rem;
106 | right: 0.25rem;
107 | }
108 |
109 | .svgicon {
110 | transform: rotate(90deg);
111 | width: 1.2em;
112 | height: 1.2em;
113 | fill: currentColor;
114 | }
115 |
116 | .generatebutton:hover {
117 | background: #7B2CBF;
118 | border-radius: 0.3rem;
119 | }
120 |
121 | .generatebutton:disabled {
122 | opacity: 0.9;
123 | cursor: not-allowed;
124 | background: none;
125 | }
126 |
127 | .messagelist {
128 | width: 100%;
129 | height: 100%;
130 | overflow-y: scroll;
131 | border-radius: 0.5rem;
132 | }
133 |
134 | .messagelistloading {
135 | display: flex;
136 | width: 100%;
137 | justify-content: center;
138 | margin-top: 1rem;
139 | }
140 |
141 | .usermessage {
142 | background: #001247;
143 | padding: 1.5rem;
144 | color: #ECECF1;
145 | }
146 |
147 | .usermessagewaiting{
148 | padding: 1.5rem;
149 | color: #ECECF1;
150 | background: linear-gradient(to left, #2d1e80, #5a189a, #2d1e80);
151 | background-size: 200% 200%;
152 | background-position: -100% 0;
153 | animation: loading-gradient 2s ease-in-out infinite;
154 | animation-direction: alternate;
155 | animation-name: loading-gradient;
156 | }
157 |
158 | @keyframes loading-gradient {
159 | 0% {
160 | background-position: -100% 0;
161 | }
162 | 100% {
163 | background-position: 100% 0;
164 | }
165 | }
166 |
167 | .apimessage {
168 | background: #2D1E80;
169 | padding: 1.5rem;
170 | color: #80ed99;
171 | animation: fadein 0.5s;
172 | }
173 |
174 | @keyframes fadein {
175 | from { opacity: 0; }
176 | to { opacity: 1; }
177 | }
178 |
179 | .apimessage, .usermessage, .usermessagewaiting {
180 | display: flex;
181 | }
182 |
183 | .markdownanswer {
184 | line-height: 1.75;
185 | }
186 |
187 | .markdownanswer a:hover {
188 | opacity: 0.8;
189 | }
190 |
191 | .markdownanswer a {
192 | color: #16bed7;
193 | font-weight: 500;
194 | }
195 |
196 | .markdownanswer code {
197 | color: #15cb19;
198 | font-weight: 500;
199 | white-space: pre-wrap !important;
200 | }
201 |
202 | .markdownanswer ol, .markdownanswer ul {
203 | margin: 1rem;
204 | }
205 |
206 | .boticon, .usericon {
207 | margin-right: 1rem;
208 | border-radius: 0.1rem;
209 | }
210 |
211 | .markdownanswer h1, .markdownanswer h2, .markdownanswer h3 {
212 | font-size: inherit;
213 | }
214 |
215 |
216 | .center {
217 | display: flex;
218 | justify-content: center;
219 | align-items: center;
220 | position: relative;
221 | padding: 2rem 0;
222 | flex-direction: column;
223 | }
224 |
225 | .cloud {
226 | width: 75vw;
227 | height: 65vh;
228 | border-radius: 0.5rem;
229 | border: 1px solid #002466;
230 | display: flex;
231 | justify-content: center;
232 | align-items: center;
233 | scrollbar-color: #001247 #001233;
234 | }
235 |
236 | .pointsnormal {
237 | width: 90%;
238 | height: 90%;
239 | }
240 |
241 | .pointsdim {
242 | width: 90%;
243 | height: 90%;
244 | opacity: 0.25;
245 | }
246 |
247 | .footer {
248 | color: #5f6368;
249 | font-size: 0.8rem;
250 | margin: 1.5rem;
251 | }
252 |
253 | .footer a {
254 | font-weight: 500;
255 | color: #7a7d81;
256 | }
257 |
258 | .footer a:hover {
259 | opacity: 0.8;
260 | }
261 |
262 | /* Mobile optimization */
263 | @media (max-width: 600px) {
264 |
265 | .main {
266 | padding: 1rem;
267 | max-height: 90vh;
268 | }
269 |
270 | .cloud {
271 | width: 22rem;
272 | height: 28rem;
273 | }
274 | .textarea {
275 | width: 22rem;
276 | }
277 | .topnav {
278 | border: 1px solid black;
279 | align-items: center;
280 | padding: 0.85rem 0.75rem 0.85rem 0.75rem;
281 | }
282 |
283 | .navlogo {
284 | font-size: 1.25rem;
285 | width: 20rem;
286 | }
287 |
288 | .markdownanswer code {
289 | white-space : pre-wrap !important;
290 | }
291 |
292 | .footer {
293 | font-size: 0.7rem;
294 | width: 100%;
295 | text-align: center;
296 | }
297 | }
--------------------------------------------------------------------------------
/api/pipelines/nodes/markdown.py:
--------------------------------------------------------------------------------
1 | # Copy of haystack.nodes.MarkdownConverter
2 | # Added file_path to meta
3 |
4 | import logging
5 | import re
6 | from pathlib import Path
7 | from typing import Dict, List, Optional, Tuple, Any
8 |
9 | import frontmatter
10 | from bs4 import BeautifulSoup, NavigableString
11 | from markdown import markdown
12 |
13 | from haystack.nodes.file_converter.base import BaseConverter
14 | from haystack.schema import Document
15 |
16 |
17 | logger = logging.getLogger(__name__)
18 |
19 |
20 | class MarkdownConverter(BaseConverter):
21 | def __init__(
22 | self,
23 | remove_numeric_tables: bool = False,
24 | valid_languages: Optional[List[str]] = None,
25 | id_hash_keys: Optional[List[str]] = None,
26 | progress_bar: bool = True,
27 | remove_code_snippets: bool = True,
28 | extract_headlines: bool = False,
29 | add_frontmatter_to_meta: bool = False,
30 | ):
31 | """
32 | :param remove_numeric_tables: Not applicable.
33 | :param valid_languages: Not applicable.
34 | :param id_hash_keys: Generate the document ID from a custom list of strings that refer to the document's
35 | attributes. To make sure you don't have duplicate documents in your DocumentStore if texts are
36 | not unique, you can modify the metadata and pass for example, `"meta"` to this field ([`"content"`, `"meta"`]).
37 | In this case, the ID is generated by using the content and the defined metadata.
38 | :param progress_bar: Show a progress bar for the conversion.
39 | :param remove_code_snippets: Whether to remove snippets from the markdown file.
40 | :param extract_headlines: Whether to extract headings from the markdown file.
41 | :param add_frontmatter_to_meta: Whether to add the contents of the frontmatter to `meta`.
42 | """
43 | super().__init__(
44 | remove_numeric_tables=remove_numeric_tables,
45 | valid_languages=valid_languages,
46 | id_hash_keys=id_hash_keys,
47 | progress_bar=progress_bar,
48 | )
49 |
50 | self.remove_code_snippets = remove_code_snippets
51 | self.extract_headlines = extract_headlines
52 | self.add_frontmatter_to_meta = add_frontmatter_to_meta
53 |
54 | def convert(
55 | self,
56 | file_path: Path,
57 | meta: Optional[Dict[str, Any]] = None,
58 | remove_numeric_tables: Optional[bool] = None,
59 | valid_languages: Optional[List[str]] = None,
60 | encoding: Optional[str] = "utf-8",
61 | id_hash_keys: Optional[List[str]] = None,
62 | remove_code_snippets: Optional[bool] = None,
63 | extract_headlines: Optional[bool] = None,
64 | add_frontmatter_to_meta: Optional[bool] = None,
65 | ) -> List[Document]:
66 | """
67 | Reads text from a markdown file and executes optional preprocessing steps.
68 |
69 | :param file_path: path of the file to convert
70 | :param meta: dictionary of meta data key-value pairs to append in the returned document.
71 | :param encoding: Select the file encoding (default is `utf-8`)
72 | :param remove_numeric_tables: Not applicable
73 | :param valid_languages: Not applicable
74 | :param id_hash_keys: Generate the document id from a custom list of strings that refer to the document's
75 | attributes. If you want to ensure you don't have duplicate documents in your DocumentStore but texts are
76 | not unique, you can modify the metadata and pass e.g. `"meta"` to this field (e.g. [`"content"`, `"meta"`]).
77 | In this case the id will be generated by using the content and the defined metadata.
78 | :param remove_code_snippets: Whether to remove snippets from the markdown file.
79 | :param extract_headlines: Whether to extract headings from the markdown file.
80 | :param add_frontmatter_to_meta: Whether to add the contents of the frontmatter to `meta`.
81 | """
82 |
83 | id_hash_keys = id_hash_keys if id_hash_keys is not None else self.id_hash_keys
84 | remove_code_snippets = remove_code_snippets if remove_code_snippets is not None else self.remove_code_snippets
85 | extract_headlines = extract_headlines if extract_headlines is not None else self.extract_headlines
86 | add_frontmatter_to_meta = (
87 | add_frontmatter_to_meta if add_frontmatter_to_meta is not None else self.add_frontmatter_to_meta
88 | )
89 |
90 | with open(file_path, encoding=encoding, errors="ignore") as f:
91 | metadata, markdown_text = frontmatter.parse(f.read())
92 |
93 | # md -> html -> text since BeautifulSoup can extract text cleanly
94 | html = markdown(markdown_text, extensions=["fenced_code"])
95 |
96 | # remove code snippets
97 | if remove_code_snippets:
98 | html = re.sub(r"(.*?) ", " ", html, flags=re.DOTALL)
99 | html = re.sub(r"(.*?)", " ", html, flags=re.DOTALL)
100 | soup = BeautifulSoup(html, "html.parser")
101 |
102 | if add_frontmatter_to_meta:
103 | if meta is None:
104 | meta = metadata
105 | else:
106 | meta.update(metadata)
107 |
108 | if extract_headlines:
109 | text, headlines = self._extract_text_and_headlines(soup)
110 | if meta is None:
111 | meta = {}
112 | meta["headlines"] = headlines
113 | else:
114 | text = soup.get_text()
115 |
116 | if meta is None:
117 | meta = {}
118 | meta["file_path"] = file_path
119 |
120 | document = Document(content=text, meta=meta, id_hash_keys=id_hash_keys)
121 | return [document]
122 |
123 | @staticmethod
124 | def _extract_text_and_headlines(soup: BeautifulSoup) -> Tuple[str, List[Dict]]:
125 | """
126 | Extracts text and headings from a soup object.
127 | """
128 | headline_tags = {"h1", "h2", "h3", "h4", "h5", "h6"}
129 | headlines = []
130 | text = ""
131 | for desc in soup.descendants:
132 | if desc.name in headline_tags:
133 | current_headline = desc.get_text()
134 | current_start_idx = len(text)
135 | current_level = int(desc.name[-1]) - 1
136 | headlines.append({"headline": current_headline, "start_idx": current_start_idx, "level": current_level})
137 |
138 | if isinstance(desc, NavigableString):
139 | text += desc.get_text()
140 |
141 | return text, headlines
142 |
--------------------------------------------------------------------------------
/app/pages/index.js:
--------------------------------------------------------------------------------
1 | import { useState, useRef, useEffect } from "react";
2 | import Head from "next/head";
3 | import styles from "../styles/Home.module.css";
4 | import Image from "next/image";
5 | import ReactMarkdown from "react-markdown";
6 | import CircularProgress from "@mui/material/CircularProgress";
7 |
8 | export default function Home() {
9 | const [userInput, setUserInput] = useState("");
10 | const [history, setHistory] = useState([]);
11 | const [loading, setLoading] = useState(false);
12 | const [messages, setMessages] = useState([
13 | {
14 | message: "Hi there! How can I help?",
15 | type: "apiMessage",
16 | },
17 | ]);
18 |
19 | const messageListRef = useRef(null);
20 | const textAreaRef = useRef(null);
21 |
22 | // Auto scroll chat to bottom
23 | useEffect(() => {
24 | const messageList = messageListRef.current;
25 | messageList.scrollTop = messageList.scrollHeight;
26 | }, [messages]);
27 |
28 | // Focus on text field on load
29 | useEffect(() => {
30 | textAreaRef.current.focus();
31 | }, []);
32 |
33 | // Handle errors
34 | const handleError = () => {
35 | setMessages((prevMessages) => [
36 | ...prevMessages,
37 | {
38 | message:
39 | "Oops! I couldn't hear you? Maybe it's just me, but can you please repeat?",
40 | type: "apiMessage",
41 | },
42 | ]);
43 | setLoading(false);
44 | setUserInput("");
45 | };
46 |
47 | // Handle form submission
48 | const handleSubmit = async (e) => {
49 | e.preventDefault();
50 |
51 | if (userInput.trim() === "") {
52 | return;
53 | }
54 |
55 | setLoading(true);
56 | setMessages((prevMessages) => [
57 | ...prevMessages,
58 | { message: userInput, type: "userMessage" },
59 | ]);
60 |
61 | // Send user question and history to API
62 | const response = await fetch("/api/chat", {
63 | method: "POST",
64 | headers: {
65 | "Content-Type": "application/json",
66 | },
67 | body: JSON.stringify({ question: userInput, history: history }),
68 | });
69 |
70 | if (!response.ok) {
71 | handleError();
72 | return;
73 | }
74 |
75 | // Reset user input
76 | setUserInput("");
77 | const data = await response.json();
78 |
79 | if (data.result.error === "Unauthorized") {
80 | handleError();
81 | return;
82 | }
83 |
84 | setMessages((prevMessages) => [
85 | ...prevMessages,
86 | { message: data.result.success, type: "apiMessage" },
87 | ]);
88 | setLoading(false);
89 | };
90 |
91 | // Prevent blank submissions and allow for multiline input
92 | const handleEnter = (e) => {
93 | if (e.key === "Enter" && userInput) {
94 | if (!e.shiftKey && userInput) {
95 | handleSubmit(e);
96 | }
97 | } else if (e.key === "Enter") {
98 | e.preventDefault();
99 | }
100 | };
101 |
102 | // Keep history in sync with messages
103 | useEffect(() => {
104 | if (messages.length >= 3) {
105 | setHistory([
106 | [
107 | messages[messages.length - 2].message,
108 | messages[messages.length - 1].message,
109 | ],
110 | ]);
111 | }
112 | }, [messages]);
113 |
114 | return (
115 | <>
116 |
117 | Meet bricky
118 |
119 |
120 |
121 |
122 |
136 |
137 |
138 |
139 | {messages.map((message, index) => {
140 | return (
141 | // The latest message sent by the user will be animated while waiting for a response
142 |
154 | {/* Display the correct icon depending on the message type */}
155 | {message.type === "apiMessage" ? (
156 |
164 | ) : (
165 |
173 | )}
174 |
175 | {/* Messages are being rendered in Markdown format */}
176 |
177 | {message.message}
178 |
179 |
180 |
181 | );
182 | })}
183 |
184 |
185 |
244 |
245 | >
246 | );
247 | }
248 |
--------------------------------------------------------------------------------
/app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "langchain-chat",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "langchain-chat",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "@emotion/react": "^11.10.5",
12 | "@emotion/styled": "^11.10.5",
13 | "@mui/material": "^5.11.4",
14 | "@next/font": "13.1.1",
15 | "next": "13.1.1",
16 | "openai": "^3.1.0",
17 | "react": "18.2.0",
18 | "react-dom": "18.2.0",
19 | "react-markdown": "^8.0.4"
20 | }
21 | },
22 | "node_modules/@ampproject/remapping": {
23 | "version": "2.2.0",
24 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
25 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
26 | "peer": true,
27 | "dependencies": {
28 | "@jridgewell/gen-mapping": "^0.1.0",
29 | "@jridgewell/trace-mapping": "^0.3.9"
30 | },
31 | "engines": {
32 | "node": ">=6.0.0"
33 | }
34 | },
35 | "node_modules/@babel/code-frame": {
36 | "version": "7.18.6",
37 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
38 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
39 | "dependencies": {
40 | "@babel/highlight": "^7.18.6"
41 | },
42 | "engines": {
43 | "node": ">=6.9.0"
44 | }
45 | },
46 | "node_modules/@babel/compat-data": {
47 | "version": "7.20.14",
48 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz",
49 | "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==",
50 | "peer": true,
51 | "engines": {
52 | "node": ">=6.9.0"
53 | }
54 | },
55 | "node_modules/@babel/core": {
56 | "version": "7.20.12",
57 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
58 | "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
59 | "peer": true,
60 | "dependencies": {
61 | "@ampproject/remapping": "^2.1.0",
62 | "@babel/code-frame": "^7.18.6",
63 | "@babel/generator": "^7.20.7",
64 | "@babel/helper-compilation-targets": "^7.20.7",
65 | "@babel/helper-module-transforms": "^7.20.11",
66 | "@babel/helpers": "^7.20.7",
67 | "@babel/parser": "^7.20.7",
68 | "@babel/template": "^7.20.7",
69 | "@babel/traverse": "^7.20.12",
70 | "@babel/types": "^7.20.7",
71 | "convert-source-map": "^1.7.0",
72 | "debug": "^4.1.0",
73 | "gensync": "^1.0.0-beta.2",
74 | "json5": "^2.2.2",
75 | "semver": "^6.3.0"
76 | },
77 | "engines": {
78 | "node": ">=6.9.0"
79 | },
80 | "funding": {
81 | "type": "opencollective",
82 | "url": "https://opencollective.com/babel"
83 | }
84 | },
85 | "node_modules/@babel/generator": {
86 | "version": "7.20.14",
87 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz",
88 | "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==",
89 | "peer": true,
90 | "dependencies": {
91 | "@babel/types": "^7.20.7",
92 | "@jridgewell/gen-mapping": "^0.3.2",
93 | "jsesc": "^2.5.1"
94 | },
95 | "engines": {
96 | "node": ">=6.9.0"
97 | }
98 | },
99 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
100 | "version": "0.3.2",
101 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
102 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
103 | "peer": true,
104 | "dependencies": {
105 | "@jridgewell/set-array": "^1.0.1",
106 | "@jridgewell/sourcemap-codec": "^1.4.10",
107 | "@jridgewell/trace-mapping": "^0.3.9"
108 | },
109 | "engines": {
110 | "node": ">=6.0.0"
111 | }
112 | },
113 | "node_modules/@babel/helper-compilation-targets": {
114 | "version": "7.20.7",
115 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
116 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
117 | "peer": true,
118 | "dependencies": {
119 | "@babel/compat-data": "^7.20.5",
120 | "@babel/helper-validator-option": "^7.18.6",
121 | "browserslist": "^4.21.3",
122 | "lru-cache": "^5.1.1",
123 | "semver": "^6.3.0"
124 | },
125 | "engines": {
126 | "node": ">=6.9.0"
127 | },
128 | "peerDependencies": {
129 | "@babel/core": "^7.0.0"
130 | }
131 | },
132 | "node_modules/@babel/helper-environment-visitor": {
133 | "version": "7.18.9",
134 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
135 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
136 | "peer": true,
137 | "engines": {
138 | "node": ">=6.9.0"
139 | }
140 | },
141 | "node_modules/@babel/helper-function-name": {
142 | "version": "7.19.0",
143 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
144 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
145 | "peer": true,
146 | "dependencies": {
147 | "@babel/template": "^7.18.10",
148 | "@babel/types": "^7.19.0"
149 | },
150 | "engines": {
151 | "node": ">=6.9.0"
152 | }
153 | },
154 | "node_modules/@babel/helper-hoist-variables": {
155 | "version": "7.18.6",
156 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
157 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
158 | "peer": true,
159 | "dependencies": {
160 | "@babel/types": "^7.18.6"
161 | },
162 | "engines": {
163 | "node": ">=6.9.0"
164 | }
165 | },
166 | "node_modules/@babel/helper-module-imports": {
167 | "version": "7.18.6",
168 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
169 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
170 | "dependencies": {
171 | "@babel/types": "^7.18.6"
172 | },
173 | "engines": {
174 | "node": ">=6.9.0"
175 | }
176 | },
177 | "node_modules/@babel/helper-module-transforms": {
178 | "version": "7.20.11",
179 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
180 | "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
181 | "peer": true,
182 | "dependencies": {
183 | "@babel/helper-environment-visitor": "^7.18.9",
184 | "@babel/helper-module-imports": "^7.18.6",
185 | "@babel/helper-simple-access": "^7.20.2",
186 | "@babel/helper-split-export-declaration": "^7.18.6",
187 | "@babel/helper-validator-identifier": "^7.19.1",
188 | "@babel/template": "^7.20.7",
189 | "@babel/traverse": "^7.20.10",
190 | "@babel/types": "^7.20.7"
191 | },
192 | "engines": {
193 | "node": ">=6.9.0"
194 | }
195 | },
196 | "node_modules/@babel/helper-plugin-utils": {
197 | "version": "7.20.2",
198 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
199 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
200 | "engines": {
201 | "node": ">=6.9.0"
202 | }
203 | },
204 | "node_modules/@babel/helper-simple-access": {
205 | "version": "7.20.2",
206 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
207 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
208 | "peer": true,
209 | "dependencies": {
210 | "@babel/types": "^7.20.2"
211 | },
212 | "engines": {
213 | "node": ">=6.9.0"
214 | }
215 | },
216 | "node_modules/@babel/helper-split-export-declaration": {
217 | "version": "7.18.6",
218 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
219 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
220 | "peer": true,
221 | "dependencies": {
222 | "@babel/types": "^7.18.6"
223 | },
224 | "engines": {
225 | "node": ">=6.9.0"
226 | }
227 | },
228 | "node_modules/@babel/helper-string-parser": {
229 | "version": "7.19.4",
230 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
231 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
232 | "engines": {
233 | "node": ">=6.9.0"
234 | }
235 | },
236 | "node_modules/@babel/helper-validator-identifier": {
237 | "version": "7.19.1",
238 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
239 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
240 | "engines": {
241 | "node": ">=6.9.0"
242 | }
243 | },
244 | "node_modules/@babel/helper-validator-option": {
245 | "version": "7.18.6",
246 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
247 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
248 | "peer": true,
249 | "engines": {
250 | "node": ">=6.9.0"
251 | }
252 | },
253 | "node_modules/@babel/helpers": {
254 | "version": "7.20.13",
255 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz",
256 | "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==",
257 | "peer": true,
258 | "dependencies": {
259 | "@babel/template": "^7.20.7",
260 | "@babel/traverse": "^7.20.13",
261 | "@babel/types": "^7.20.7"
262 | },
263 | "engines": {
264 | "node": ">=6.9.0"
265 | }
266 | },
267 | "node_modules/@babel/highlight": {
268 | "version": "7.18.6",
269 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
270 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
271 | "dependencies": {
272 | "@babel/helper-validator-identifier": "^7.18.6",
273 | "chalk": "^2.0.0",
274 | "js-tokens": "^4.0.0"
275 | },
276 | "engines": {
277 | "node": ">=6.9.0"
278 | }
279 | },
280 | "node_modules/@babel/parser": {
281 | "version": "7.20.13",
282 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
283 | "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==",
284 | "peer": true,
285 | "bin": {
286 | "parser": "bin/babel-parser.js"
287 | },
288 | "engines": {
289 | "node": ">=6.0.0"
290 | }
291 | },
292 | "node_modules/@babel/plugin-syntax-jsx": {
293 | "version": "7.18.6",
294 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
295 | "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
296 | "dependencies": {
297 | "@babel/helper-plugin-utils": "^7.18.6"
298 | },
299 | "engines": {
300 | "node": ">=6.9.0"
301 | },
302 | "peerDependencies": {
303 | "@babel/core": "^7.0.0-0"
304 | }
305 | },
306 | "node_modules/@babel/runtime": {
307 | "version": "7.20.7",
308 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
309 | "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==",
310 | "dependencies": {
311 | "regenerator-runtime": "^0.13.11"
312 | },
313 | "engines": {
314 | "node": ">=6.9.0"
315 | }
316 | },
317 | "node_modules/@babel/template": {
318 | "version": "7.20.7",
319 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
320 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
321 | "peer": true,
322 | "dependencies": {
323 | "@babel/code-frame": "^7.18.6",
324 | "@babel/parser": "^7.20.7",
325 | "@babel/types": "^7.20.7"
326 | },
327 | "engines": {
328 | "node": ">=6.9.0"
329 | }
330 | },
331 | "node_modules/@babel/traverse": {
332 | "version": "7.20.13",
333 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz",
334 | "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==",
335 | "peer": true,
336 | "dependencies": {
337 | "@babel/code-frame": "^7.18.6",
338 | "@babel/generator": "^7.20.7",
339 | "@babel/helper-environment-visitor": "^7.18.9",
340 | "@babel/helper-function-name": "^7.19.0",
341 | "@babel/helper-hoist-variables": "^7.18.6",
342 | "@babel/helper-split-export-declaration": "^7.18.6",
343 | "@babel/parser": "^7.20.13",
344 | "@babel/types": "^7.20.7",
345 | "debug": "^4.1.0",
346 | "globals": "^11.1.0"
347 | },
348 | "engines": {
349 | "node": ">=6.9.0"
350 | }
351 | },
352 | "node_modules/@babel/types": {
353 | "version": "7.20.7",
354 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
355 | "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
356 | "dependencies": {
357 | "@babel/helper-string-parser": "^7.19.4",
358 | "@babel/helper-validator-identifier": "^7.19.1",
359 | "to-fast-properties": "^2.0.0"
360 | },
361 | "engines": {
362 | "node": ">=6.9.0"
363 | }
364 | },
365 | "node_modules/@emotion/babel-plugin": {
366 | "version": "11.10.5",
367 | "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz",
368 | "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==",
369 | "dependencies": {
370 | "@babel/helper-module-imports": "^7.16.7",
371 | "@babel/plugin-syntax-jsx": "^7.17.12",
372 | "@babel/runtime": "^7.18.3",
373 | "@emotion/hash": "^0.9.0",
374 | "@emotion/memoize": "^0.8.0",
375 | "@emotion/serialize": "^1.1.1",
376 | "babel-plugin-macros": "^3.1.0",
377 | "convert-source-map": "^1.5.0",
378 | "escape-string-regexp": "^4.0.0",
379 | "find-root": "^1.1.0",
380 | "source-map": "^0.5.7",
381 | "stylis": "4.1.3"
382 | },
383 | "peerDependencies": {
384 | "@babel/core": "^7.0.0"
385 | }
386 | },
387 | "node_modules/@emotion/cache": {
388 | "version": "11.10.5",
389 | "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz",
390 | "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==",
391 | "dependencies": {
392 | "@emotion/memoize": "^0.8.0",
393 | "@emotion/sheet": "^1.2.1",
394 | "@emotion/utils": "^1.2.0",
395 | "@emotion/weak-memoize": "^0.3.0",
396 | "stylis": "4.1.3"
397 | }
398 | },
399 | "node_modules/@emotion/hash": {
400 | "version": "0.9.0",
401 | "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz",
402 | "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ=="
403 | },
404 | "node_modules/@emotion/is-prop-valid": {
405 | "version": "1.2.0",
406 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz",
407 | "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==",
408 | "dependencies": {
409 | "@emotion/memoize": "^0.8.0"
410 | }
411 | },
412 | "node_modules/@emotion/memoize": {
413 | "version": "0.8.0",
414 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz",
415 | "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
416 | },
417 | "node_modules/@emotion/react": {
418 | "version": "11.10.5",
419 | "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz",
420 | "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==",
421 | "dependencies": {
422 | "@babel/runtime": "^7.18.3",
423 | "@emotion/babel-plugin": "^11.10.5",
424 | "@emotion/cache": "^11.10.5",
425 | "@emotion/serialize": "^1.1.1",
426 | "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
427 | "@emotion/utils": "^1.2.0",
428 | "@emotion/weak-memoize": "^0.3.0",
429 | "hoist-non-react-statics": "^3.3.1"
430 | },
431 | "peerDependencies": {
432 | "@babel/core": "^7.0.0",
433 | "react": ">=16.8.0"
434 | },
435 | "peerDependenciesMeta": {
436 | "@babel/core": {
437 | "optional": true
438 | },
439 | "@types/react": {
440 | "optional": true
441 | }
442 | }
443 | },
444 | "node_modules/@emotion/serialize": {
445 | "version": "1.1.1",
446 | "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz",
447 | "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==",
448 | "dependencies": {
449 | "@emotion/hash": "^0.9.0",
450 | "@emotion/memoize": "^0.8.0",
451 | "@emotion/unitless": "^0.8.0",
452 | "@emotion/utils": "^1.2.0",
453 | "csstype": "^3.0.2"
454 | }
455 | },
456 | "node_modules/@emotion/sheet": {
457 | "version": "1.2.1",
458 | "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz",
459 | "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA=="
460 | },
461 | "node_modules/@emotion/styled": {
462 | "version": "11.10.5",
463 | "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz",
464 | "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==",
465 | "dependencies": {
466 | "@babel/runtime": "^7.18.3",
467 | "@emotion/babel-plugin": "^11.10.5",
468 | "@emotion/is-prop-valid": "^1.2.0",
469 | "@emotion/serialize": "^1.1.1",
470 | "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
471 | "@emotion/utils": "^1.2.0"
472 | },
473 | "peerDependencies": {
474 | "@babel/core": "^7.0.0",
475 | "@emotion/react": "^11.0.0-rc.0",
476 | "react": ">=16.8.0"
477 | },
478 | "peerDependenciesMeta": {
479 | "@babel/core": {
480 | "optional": true
481 | },
482 | "@types/react": {
483 | "optional": true
484 | }
485 | }
486 | },
487 | "node_modules/@emotion/unitless": {
488 | "version": "0.8.0",
489 | "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
490 | "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw=="
491 | },
492 | "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
493 | "version": "1.0.0",
494 | "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz",
495 | "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==",
496 | "peerDependencies": {
497 | "react": ">=16.8.0"
498 | }
499 | },
500 | "node_modules/@emotion/utils": {
501 | "version": "1.2.0",
502 | "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz",
503 | "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw=="
504 | },
505 | "node_modules/@emotion/weak-memoize": {
506 | "version": "0.3.0",
507 | "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz",
508 | "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg=="
509 | },
510 | "node_modules/@jridgewell/gen-mapping": {
511 | "version": "0.1.1",
512 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
513 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
514 | "peer": true,
515 | "dependencies": {
516 | "@jridgewell/set-array": "^1.0.0",
517 | "@jridgewell/sourcemap-codec": "^1.4.10"
518 | },
519 | "engines": {
520 | "node": ">=6.0.0"
521 | }
522 | },
523 | "node_modules/@jridgewell/resolve-uri": {
524 | "version": "3.1.0",
525 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
526 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
527 | "peer": true,
528 | "engines": {
529 | "node": ">=6.0.0"
530 | }
531 | },
532 | "node_modules/@jridgewell/set-array": {
533 | "version": "1.1.2",
534 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
535 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
536 | "peer": true,
537 | "engines": {
538 | "node": ">=6.0.0"
539 | }
540 | },
541 | "node_modules/@jridgewell/sourcemap-codec": {
542 | "version": "1.4.14",
543 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
544 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
545 | "peer": true
546 | },
547 | "node_modules/@jridgewell/trace-mapping": {
548 | "version": "0.3.17",
549 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
550 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
551 | "peer": true,
552 | "dependencies": {
553 | "@jridgewell/resolve-uri": "3.1.0",
554 | "@jridgewell/sourcemap-codec": "1.4.14"
555 | }
556 | },
557 | "node_modules/@mui/base": {
558 | "version": "5.0.0-alpha.113",
559 | "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.113.tgz",
560 | "integrity": "sha512-XSjvyQWATM8uk+EJZvYna8D21kOXC42lwb3q4K70btuGieKlCIQLaHTTDV2OfD4+JfT4o3NJy3I4Td2co31RZA==",
561 | "dependencies": {
562 | "@babel/runtime": "^7.20.7",
563 | "@emotion/is-prop-valid": "^1.2.0",
564 | "@mui/types": "^7.2.3",
565 | "@mui/utils": "^5.11.2",
566 | "@popperjs/core": "^2.11.6",
567 | "clsx": "^1.2.1",
568 | "prop-types": "^15.8.1",
569 | "react-is": "^18.2.0"
570 | },
571 | "engines": {
572 | "node": ">=12.0.0"
573 | },
574 | "funding": {
575 | "type": "opencollective",
576 | "url": "https://opencollective.com/mui"
577 | },
578 | "peerDependencies": {
579 | "@types/react": "^17.0.0 || ^18.0.0",
580 | "react": "^17.0.0 || ^18.0.0",
581 | "react-dom": "^17.0.0 || ^18.0.0"
582 | },
583 | "peerDependenciesMeta": {
584 | "@types/react": {
585 | "optional": true
586 | }
587 | }
588 | },
589 | "node_modules/@mui/base/node_modules/react-is": {
590 | "version": "18.2.0",
591 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
592 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
593 | },
594 | "node_modules/@mui/core-downloads-tracker": {
595 | "version": "5.11.4",
596 | "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.4.tgz",
597 | "integrity": "sha512-jWVwGM3vG4O0sXcW0VcIl+njCWbGCBF5vvjRpuKJajrz51AD7D6+fP1SkInZXVk5pRHf6Bnk/Yj9Of9gXxb/hA==",
598 | "funding": {
599 | "type": "opencollective",
600 | "url": "https://opencollective.com/mui"
601 | }
602 | },
603 | "node_modules/@mui/material": {
604 | "version": "5.11.4",
605 | "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.4.tgz",
606 | "integrity": "sha512-ZL/czK9ynrQJ6uyDwQgK+j7m1iKA1XKPON+rEPupwAu/bJ1XJxD+H/H2bkMM8UpOkzaucx/WuMbJJGQ60l7gBg==",
607 | "dependencies": {
608 | "@babel/runtime": "^7.20.7",
609 | "@mui/base": "5.0.0-alpha.113",
610 | "@mui/core-downloads-tracker": "^5.11.4",
611 | "@mui/system": "^5.11.4",
612 | "@mui/types": "^7.2.3",
613 | "@mui/utils": "^5.11.2",
614 | "@types/react-transition-group": "^4.4.5",
615 | "clsx": "^1.2.1",
616 | "csstype": "^3.1.1",
617 | "prop-types": "^15.8.1",
618 | "react-is": "^18.2.0",
619 | "react-transition-group": "^4.4.5"
620 | },
621 | "engines": {
622 | "node": ">=12.0.0"
623 | },
624 | "funding": {
625 | "type": "opencollective",
626 | "url": "https://opencollective.com/mui"
627 | },
628 | "peerDependencies": {
629 | "@emotion/react": "^11.5.0",
630 | "@emotion/styled": "^11.3.0",
631 | "@types/react": "^17.0.0 || ^18.0.0",
632 | "react": "^17.0.0 || ^18.0.0",
633 | "react-dom": "^17.0.0 || ^18.0.0"
634 | },
635 | "peerDependenciesMeta": {
636 | "@emotion/react": {
637 | "optional": true
638 | },
639 | "@emotion/styled": {
640 | "optional": true
641 | },
642 | "@types/react": {
643 | "optional": true
644 | }
645 | }
646 | },
647 | "node_modules/@mui/material/node_modules/react-is": {
648 | "version": "18.2.0",
649 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
650 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
651 | },
652 | "node_modules/@mui/private-theming": {
653 | "version": "5.11.2",
654 | "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.2.tgz",
655 | "integrity": "sha512-qZwMaqRFPwlYmqwVKblKBGKtIjJRAj3nsvX93pOmatsXyorW7N/0IPE/swPgz1VwChXhHO75DwBEx8tB+aRMNg==",
656 | "dependencies": {
657 | "@babel/runtime": "^7.20.7",
658 | "@mui/utils": "^5.11.2",
659 | "prop-types": "^15.8.1"
660 | },
661 | "engines": {
662 | "node": ">=12.0.0"
663 | },
664 | "funding": {
665 | "type": "opencollective",
666 | "url": "https://opencollective.com/mui"
667 | },
668 | "peerDependencies": {
669 | "@types/react": "^17.0.0 || ^18.0.0",
670 | "react": "^17.0.0 || ^18.0.0"
671 | },
672 | "peerDependenciesMeta": {
673 | "@types/react": {
674 | "optional": true
675 | }
676 | }
677 | },
678 | "node_modules/@mui/styled-engine": {
679 | "version": "5.11.0",
680 | "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz",
681 | "integrity": "sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==",
682 | "dependencies": {
683 | "@babel/runtime": "^7.20.6",
684 | "@emotion/cache": "^11.10.5",
685 | "csstype": "^3.1.1",
686 | "prop-types": "^15.8.1"
687 | },
688 | "engines": {
689 | "node": ">=12.0.0"
690 | },
691 | "funding": {
692 | "type": "opencollective",
693 | "url": "https://opencollective.com/mui"
694 | },
695 | "peerDependencies": {
696 | "@emotion/react": "^11.4.1",
697 | "@emotion/styled": "^11.3.0",
698 | "react": "^17.0.0 || ^18.0.0"
699 | },
700 | "peerDependenciesMeta": {
701 | "@emotion/react": {
702 | "optional": true
703 | },
704 | "@emotion/styled": {
705 | "optional": true
706 | }
707 | }
708 | },
709 | "node_modules/@mui/system": {
710 | "version": "5.11.4",
711 | "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.4.tgz",
712 | "integrity": "sha512-fE2Ts33V5zh7ouciwXgMm/a6sLvjIj9OMeojuHNYY7BStTxparC/Fp9CNUZNJwt76U6ZJC59aYScFSRQKbW08g==",
713 | "dependencies": {
714 | "@babel/runtime": "^7.20.7",
715 | "@mui/private-theming": "^5.11.2",
716 | "@mui/styled-engine": "^5.11.0",
717 | "@mui/types": "^7.2.3",
718 | "@mui/utils": "^5.11.2",
719 | "clsx": "^1.2.1",
720 | "csstype": "^3.1.1",
721 | "prop-types": "^15.8.1"
722 | },
723 | "engines": {
724 | "node": ">=12.0.0"
725 | },
726 | "funding": {
727 | "type": "opencollective",
728 | "url": "https://opencollective.com/mui"
729 | },
730 | "peerDependencies": {
731 | "@emotion/react": "^11.5.0",
732 | "@emotion/styled": "^11.3.0",
733 | "@types/react": "^17.0.0 || ^18.0.0",
734 | "react": "^17.0.0 || ^18.0.0"
735 | },
736 | "peerDependenciesMeta": {
737 | "@emotion/react": {
738 | "optional": true
739 | },
740 | "@emotion/styled": {
741 | "optional": true
742 | },
743 | "@types/react": {
744 | "optional": true
745 | }
746 | }
747 | },
748 | "node_modules/@mui/types": {
749 | "version": "7.2.3",
750 | "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz",
751 | "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==",
752 | "peerDependencies": {
753 | "@types/react": "*"
754 | },
755 | "peerDependenciesMeta": {
756 | "@types/react": {
757 | "optional": true
758 | }
759 | }
760 | },
761 | "node_modules/@mui/utils": {
762 | "version": "5.11.2",
763 | "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.2.tgz",
764 | "integrity": "sha512-AyizuHHlGdAtH5hOOXBW3kriuIwUIKUIgg0P7LzMvzf6jPhoQbENYqY6zJqfoZ7fAWMNNYT8mgN5EftNGzwE2w==",
765 | "dependencies": {
766 | "@babel/runtime": "^7.20.7",
767 | "@types/prop-types": "^15.7.5",
768 | "@types/react-is": "^16.7.1 || ^17.0.0",
769 | "prop-types": "^15.8.1",
770 | "react-is": "^18.2.0"
771 | },
772 | "engines": {
773 | "node": ">=12.0.0"
774 | },
775 | "funding": {
776 | "type": "opencollective",
777 | "url": "https://opencollective.com/mui"
778 | },
779 | "peerDependencies": {
780 | "react": "^17.0.0 || ^18.0.0"
781 | }
782 | },
783 | "node_modules/@mui/utils/node_modules/react-is": {
784 | "version": "18.2.0",
785 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
786 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
787 | },
788 | "node_modules/@next/env": {
789 | "version": "13.1.1",
790 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz",
791 | "integrity": "sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw=="
792 | },
793 | "node_modules/@next/font": {
794 | "version": "13.1.1",
795 | "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.1.tgz",
796 | "integrity": "sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ=="
797 | },
798 | "node_modules/@next/swc-android-arm-eabi": {
799 | "version": "13.1.1",
800 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz",
801 | "integrity": "sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==",
802 | "cpu": [
803 | "arm"
804 | ],
805 | "optional": true,
806 | "os": [
807 | "android"
808 | ],
809 | "engines": {
810 | "node": ">= 10"
811 | }
812 | },
813 | "node_modules/@next/swc-android-arm64": {
814 | "version": "13.1.1",
815 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz",
816 | "integrity": "sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==",
817 | "cpu": [
818 | "arm64"
819 | ],
820 | "optional": true,
821 | "os": [
822 | "android"
823 | ],
824 | "engines": {
825 | "node": ">= 10"
826 | }
827 | },
828 | "node_modules/@next/swc-darwin-arm64": {
829 | "version": "13.1.1",
830 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz",
831 | "integrity": "sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==",
832 | "cpu": [
833 | "arm64"
834 | ],
835 | "optional": true,
836 | "os": [
837 | "darwin"
838 | ],
839 | "engines": {
840 | "node": ">= 10"
841 | }
842 | },
843 | "node_modules/@next/swc-darwin-x64": {
844 | "version": "13.1.1",
845 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz",
846 | "integrity": "sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==",
847 | "cpu": [
848 | "x64"
849 | ],
850 | "optional": true,
851 | "os": [
852 | "darwin"
853 | ],
854 | "engines": {
855 | "node": ">= 10"
856 | }
857 | },
858 | "node_modules/@next/swc-freebsd-x64": {
859 | "version": "13.1.1",
860 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz",
861 | "integrity": "sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==",
862 | "cpu": [
863 | "x64"
864 | ],
865 | "optional": true,
866 | "os": [
867 | "freebsd"
868 | ],
869 | "engines": {
870 | "node": ">= 10"
871 | }
872 | },
873 | "node_modules/@next/swc-linux-arm-gnueabihf": {
874 | "version": "13.1.1",
875 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz",
876 | "integrity": "sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==",
877 | "cpu": [
878 | "arm"
879 | ],
880 | "optional": true,
881 | "os": [
882 | "linux"
883 | ],
884 | "engines": {
885 | "node": ">= 10"
886 | }
887 | },
888 | "node_modules/@next/swc-linux-arm64-gnu": {
889 | "version": "13.1.1",
890 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz",
891 | "integrity": "sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==",
892 | "cpu": [
893 | "arm64"
894 | ],
895 | "optional": true,
896 | "os": [
897 | "linux"
898 | ],
899 | "engines": {
900 | "node": ">= 10"
901 | }
902 | },
903 | "node_modules/@next/swc-linux-arm64-musl": {
904 | "version": "13.1.1",
905 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz",
906 | "integrity": "sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==",
907 | "cpu": [
908 | "arm64"
909 | ],
910 | "optional": true,
911 | "os": [
912 | "linux"
913 | ],
914 | "engines": {
915 | "node": ">= 10"
916 | }
917 | },
918 | "node_modules/@next/swc-linux-x64-gnu": {
919 | "version": "13.1.1",
920 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz",
921 | "integrity": "sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==",
922 | "cpu": [
923 | "x64"
924 | ],
925 | "optional": true,
926 | "os": [
927 | "linux"
928 | ],
929 | "engines": {
930 | "node": ">= 10"
931 | }
932 | },
933 | "node_modules/@next/swc-linux-x64-musl": {
934 | "version": "13.1.1",
935 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz",
936 | "integrity": "sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==",
937 | "cpu": [
938 | "x64"
939 | ],
940 | "optional": true,
941 | "os": [
942 | "linux"
943 | ],
944 | "engines": {
945 | "node": ">= 10"
946 | }
947 | },
948 | "node_modules/@next/swc-win32-arm64-msvc": {
949 | "version": "13.1.1",
950 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz",
951 | "integrity": "sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==",
952 | "cpu": [
953 | "arm64"
954 | ],
955 | "optional": true,
956 | "os": [
957 | "win32"
958 | ],
959 | "engines": {
960 | "node": ">= 10"
961 | }
962 | },
963 | "node_modules/@next/swc-win32-ia32-msvc": {
964 | "version": "13.1.1",
965 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz",
966 | "integrity": "sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==",
967 | "cpu": [
968 | "ia32"
969 | ],
970 | "optional": true,
971 | "os": [
972 | "win32"
973 | ],
974 | "engines": {
975 | "node": ">= 10"
976 | }
977 | },
978 | "node_modules/@next/swc-win32-x64-msvc": {
979 | "version": "13.1.1",
980 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz",
981 | "integrity": "sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==",
982 | "cpu": [
983 | "x64"
984 | ],
985 | "optional": true,
986 | "os": [
987 | "win32"
988 | ],
989 | "engines": {
990 | "node": ">= 10"
991 | }
992 | },
993 | "node_modules/@popperjs/core": {
994 | "version": "2.11.6",
995 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
996 | "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
997 | "funding": {
998 | "type": "opencollective",
999 | "url": "https://opencollective.com/popperjs"
1000 | }
1001 | },
1002 | "node_modules/@swc/helpers": {
1003 | "version": "0.4.14",
1004 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
1005 | "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
1006 | "dependencies": {
1007 | "tslib": "^2.4.0"
1008 | }
1009 | },
1010 | "node_modules/@types/debug": {
1011 | "version": "4.1.7",
1012 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
1013 | "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
1014 | "dependencies": {
1015 | "@types/ms": "*"
1016 | }
1017 | },
1018 | "node_modules/@types/hast": {
1019 | "version": "2.3.4",
1020 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
1021 | "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
1022 | "dependencies": {
1023 | "@types/unist": "*"
1024 | }
1025 | },
1026 | "node_modules/@types/mdast": {
1027 | "version": "3.0.10",
1028 | "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
1029 | "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
1030 | "dependencies": {
1031 | "@types/unist": "*"
1032 | }
1033 | },
1034 | "node_modules/@types/ms": {
1035 | "version": "0.7.31",
1036 | "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
1037 | "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
1038 | },
1039 | "node_modules/@types/parse-json": {
1040 | "version": "4.0.0",
1041 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
1042 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
1043 | },
1044 | "node_modules/@types/prop-types": {
1045 | "version": "15.7.5",
1046 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
1047 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
1048 | },
1049 | "node_modules/@types/react": {
1050 | "version": "18.0.26",
1051 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz",
1052 | "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==",
1053 | "dependencies": {
1054 | "@types/prop-types": "*",
1055 | "@types/scheduler": "*",
1056 | "csstype": "^3.0.2"
1057 | }
1058 | },
1059 | "node_modules/@types/react-is": {
1060 | "version": "17.0.3",
1061 | "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz",
1062 | "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==",
1063 | "dependencies": {
1064 | "@types/react": "*"
1065 | }
1066 | },
1067 | "node_modules/@types/react-transition-group": {
1068 | "version": "4.4.5",
1069 | "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz",
1070 | "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==",
1071 | "dependencies": {
1072 | "@types/react": "*"
1073 | }
1074 | },
1075 | "node_modules/@types/scheduler": {
1076 | "version": "0.16.2",
1077 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
1078 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
1079 | },
1080 | "node_modules/@types/unist": {
1081 | "version": "2.0.6",
1082 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
1083 | "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
1084 | },
1085 | "node_modules/ansi-styles": {
1086 | "version": "3.2.1",
1087 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1088 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1089 | "dependencies": {
1090 | "color-convert": "^1.9.0"
1091 | },
1092 | "engines": {
1093 | "node": ">=4"
1094 | }
1095 | },
1096 | "node_modules/asynckit": {
1097 | "version": "0.4.0",
1098 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1099 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
1100 | },
1101 | "node_modules/axios": {
1102 | "version": "0.26.1",
1103 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
1104 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
1105 | "dependencies": {
1106 | "follow-redirects": "^1.14.8"
1107 | }
1108 | },
1109 | "node_modules/babel-plugin-macros": {
1110 | "version": "3.1.0",
1111 | "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
1112 | "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
1113 | "dependencies": {
1114 | "@babel/runtime": "^7.12.5",
1115 | "cosmiconfig": "^7.0.0",
1116 | "resolve": "^1.19.0"
1117 | },
1118 | "engines": {
1119 | "node": ">=10",
1120 | "npm": ">=6"
1121 | }
1122 | },
1123 | "node_modules/bail": {
1124 | "version": "2.0.2",
1125 | "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
1126 | "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
1127 | "funding": {
1128 | "type": "github",
1129 | "url": "https://github.com/sponsors/wooorm"
1130 | }
1131 | },
1132 | "node_modules/browserslist": {
1133 | "version": "4.21.5",
1134 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
1135 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
1136 | "funding": [
1137 | {
1138 | "type": "opencollective",
1139 | "url": "https://opencollective.com/browserslist"
1140 | },
1141 | {
1142 | "type": "tidelift",
1143 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1144 | }
1145 | ],
1146 | "peer": true,
1147 | "dependencies": {
1148 | "caniuse-lite": "^1.0.30001449",
1149 | "electron-to-chromium": "^1.4.284",
1150 | "node-releases": "^2.0.8",
1151 | "update-browserslist-db": "^1.0.10"
1152 | },
1153 | "bin": {
1154 | "browserslist": "cli.js"
1155 | },
1156 | "engines": {
1157 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1158 | }
1159 | },
1160 | "node_modules/callsites": {
1161 | "version": "3.1.0",
1162 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1163 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1164 | "engines": {
1165 | "node": ">=6"
1166 | }
1167 | },
1168 | "node_modules/caniuse-lite": {
1169 | "version": "1.0.30001449",
1170 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz",
1171 | "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==",
1172 | "funding": [
1173 | {
1174 | "type": "opencollective",
1175 | "url": "https://opencollective.com/browserslist"
1176 | },
1177 | {
1178 | "type": "tidelift",
1179 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1180 | }
1181 | ]
1182 | },
1183 | "node_modules/chalk": {
1184 | "version": "2.4.2",
1185 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1186 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1187 | "dependencies": {
1188 | "ansi-styles": "^3.2.1",
1189 | "escape-string-regexp": "^1.0.5",
1190 | "supports-color": "^5.3.0"
1191 | },
1192 | "engines": {
1193 | "node": ">=4"
1194 | }
1195 | },
1196 | "node_modules/chalk/node_modules/escape-string-regexp": {
1197 | "version": "1.0.5",
1198 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1199 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1200 | "engines": {
1201 | "node": ">=0.8.0"
1202 | }
1203 | },
1204 | "node_modules/character-entities": {
1205 | "version": "2.0.2",
1206 | "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
1207 | "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
1208 | "funding": {
1209 | "type": "github",
1210 | "url": "https://github.com/sponsors/wooorm"
1211 | }
1212 | },
1213 | "node_modules/client-only": {
1214 | "version": "0.0.1",
1215 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1216 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1217 | },
1218 | "node_modules/clsx": {
1219 | "version": "1.2.1",
1220 | "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
1221 | "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
1222 | "engines": {
1223 | "node": ">=6"
1224 | }
1225 | },
1226 | "node_modules/color-convert": {
1227 | "version": "1.9.3",
1228 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1229 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1230 | "dependencies": {
1231 | "color-name": "1.1.3"
1232 | }
1233 | },
1234 | "node_modules/color-name": {
1235 | "version": "1.1.3",
1236 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1237 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
1238 | },
1239 | "node_modules/combined-stream": {
1240 | "version": "1.0.8",
1241 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1242 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1243 | "dependencies": {
1244 | "delayed-stream": "~1.0.0"
1245 | },
1246 | "engines": {
1247 | "node": ">= 0.8"
1248 | }
1249 | },
1250 | "node_modules/comma-separated-tokens": {
1251 | "version": "2.0.3",
1252 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
1253 | "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
1254 | "funding": {
1255 | "type": "github",
1256 | "url": "https://github.com/sponsors/wooorm"
1257 | }
1258 | },
1259 | "node_modules/convert-source-map": {
1260 | "version": "1.9.0",
1261 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
1262 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
1263 | },
1264 | "node_modules/cosmiconfig": {
1265 | "version": "7.1.0",
1266 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
1267 | "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
1268 | "dependencies": {
1269 | "@types/parse-json": "^4.0.0",
1270 | "import-fresh": "^3.2.1",
1271 | "parse-json": "^5.0.0",
1272 | "path-type": "^4.0.0",
1273 | "yaml": "^1.10.0"
1274 | },
1275 | "engines": {
1276 | "node": ">=10"
1277 | }
1278 | },
1279 | "node_modules/csstype": {
1280 | "version": "3.1.1",
1281 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
1282 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
1283 | },
1284 | "node_modules/debug": {
1285 | "version": "4.3.4",
1286 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1287 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1288 | "dependencies": {
1289 | "ms": "2.1.2"
1290 | },
1291 | "engines": {
1292 | "node": ">=6.0"
1293 | },
1294 | "peerDependenciesMeta": {
1295 | "supports-color": {
1296 | "optional": true
1297 | }
1298 | }
1299 | },
1300 | "node_modules/decode-named-character-reference": {
1301 | "version": "1.0.2",
1302 | "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
1303 | "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
1304 | "dependencies": {
1305 | "character-entities": "^2.0.0"
1306 | },
1307 | "funding": {
1308 | "type": "github",
1309 | "url": "https://github.com/sponsors/wooorm"
1310 | }
1311 | },
1312 | "node_modules/delayed-stream": {
1313 | "version": "1.0.0",
1314 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1315 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1316 | "engines": {
1317 | "node": ">=0.4.0"
1318 | }
1319 | },
1320 | "node_modules/dequal": {
1321 | "version": "2.0.3",
1322 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
1323 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
1324 | "engines": {
1325 | "node": ">=6"
1326 | }
1327 | },
1328 | "node_modules/diff": {
1329 | "version": "5.1.0",
1330 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
1331 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
1332 | "engines": {
1333 | "node": ">=0.3.1"
1334 | }
1335 | },
1336 | "node_modules/dom-helpers": {
1337 | "version": "5.2.1",
1338 | "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
1339 | "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
1340 | "dependencies": {
1341 | "@babel/runtime": "^7.8.7",
1342 | "csstype": "^3.0.2"
1343 | }
1344 | },
1345 | "node_modules/electron-to-chromium": {
1346 | "version": "1.4.284",
1347 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
1348 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
1349 | "peer": true
1350 | },
1351 | "node_modules/error-ex": {
1352 | "version": "1.3.2",
1353 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
1354 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
1355 | "dependencies": {
1356 | "is-arrayish": "^0.2.1"
1357 | }
1358 | },
1359 | "node_modules/escalade": {
1360 | "version": "3.1.1",
1361 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1362 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1363 | "peer": true,
1364 | "engines": {
1365 | "node": ">=6"
1366 | }
1367 | },
1368 | "node_modules/escape-string-regexp": {
1369 | "version": "4.0.0",
1370 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1371 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1372 | "engines": {
1373 | "node": ">=10"
1374 | },
1375 | "funding": {
1376 | "url": "https://github.com/sponsors/sindresorhus"
1377 | }
1378 | },
1379 | "node_modules/extend": {
1380 | "version": "3.0.2",
1381 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1382 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1383 | },
1384 | "node_modules/find-root": {
1385 | "version": "1.1.0",
1386 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
1387 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
1388 | },
1389 | "node_modules/follow-redirects": {
1390 | "version": "1.15.2",
1391 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
1392 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
1393 | "funding": [
1394 | {
1395 | "type": "individual",
1396 | "url": "https://github.com/sponsors/RubenVerborgh"
1397 | }
1398 | ],
1399 | "engines": {
1400 | "node": ">=4.0"
1401 | },
1402 | "peerDependenciesMeta": {
1403 | "debug": {
1404 | "optional": true
1405 | }
1406 | }
1407 | },
1408 | "node_modules/form-data": {
1409 | "version": "4.0.0",
1410 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1411 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1412 | "dependencies": {
1413 | "asynckit": "^0.4.0",
1414 | "combined-stream": "^1.0.8",
1415 | "mime-types": "^2.1.12"
1416 | },
1417 | "engines": {
1418 | "node": ">= 6"
1419 | }
1420 | },
1421 | "node_modules/function-bind": {
1422 | "version": "1.1.1",
1423 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1424 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1425 | },
1426 | "node_modules/gensync": {
1427 | "version": "1.0.0-beta.2",
1428 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1429 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1430 | "peer": true,
1431 | "engines": {
1432 | "node": ">=6.9.0"
1433 | }
1434 | },
1435 | "node_modules/globals": {
1436 | "version": "11.12.0",
1437 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1438 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1439 | "peer": true,
1440 | "engines": {
1441 | "node": ">=4"
1442 | }
1443 | },
1444 | "node_modules/has": {
1445 | "version": "1.0.3",
1446 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1447 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1448 | "dependencies": {
1449 | "function-bind": "^1.1.1"
1450 | },
1451 | "engines": {
1452 | "node": ">= 0.4.0"
1453 | }
1454 | },
1455 | "node_modules/has-flag": {
1456 | "version": "3.0.0",
1457 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1458 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1459 | "engines": {
1460 | "node": ">=4"
1461 | }
1462 | },
1463 | "node_modules/hast-util-whitespace": {
1464 | "version": "2.0.1",
1465 | "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
1466 | "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
1467 | "funding": {
1468 | "type": "opencollective",
1469 | "url": "https://opencollective.com/unified"
1470 | }
1471 | },
1472 | "node_modules/hoist-non-react-statics": {
1473 | "version": "3.3.2",
1474 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
1475 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
1476 | "dependencies": {
1477 | "react-is": "^16.7.0"
1478 | }
1479 | },
1480 | "node_modules/import-fresh": {
1481 | "version": "3.3.0",
1482 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1483 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1484 | "dependencies": {
1485 | "parent-module": "^1.0.0",
1486 | "resolve-from": "^4.0.0"
1487 | },
1488 | "engines": {
1489 | "node": ">=6"
1490 | },
1491 | "funding": {
1492 | "url": "https://github.com/sponsors/sindresorhus"
1493 | }
1494 | },
1495 | "node_modules/inline-style-parser": {
1496 | "version": "0.1.1",
1497 | "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
1498 | "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
1499 | },
1500 | "node_modules/is-arrayish": {
1501 | "version": "0.2.1",
1502 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1503 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
1504 | },
1505 | "node_modules/is-buffer": {
1506 | "version": "2.0.5",
1507 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
1508 | "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
1509 | "funding": [
1510 | {
1511 | "type": "github",
1512 | "url": "https://github.com/sponsors/feross"
1513 | },
1514 | {
1515 | "type": "patreon",
1516 | "url": "https://www.patreon.com/feross"
1517 | },
1518 | {
1519 | "type": "consulting",
1520 | "url": "https://feross.org/support"
1521 | }
1522 | ],
1523 | "engines": {
1524 | "node": ">=4"
1525 | }
1526 | },
1527 | "node_modules/is-core-module": {
1528 | "version": "2.11.0",
1529 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
1530 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
1531 | "dependencies": {
1532 | "has": "^1.0.3"
1533 | },
1534 | "funding": {
1535 | "url": "https://github.com/sponsors/ljharb"
1536 | }
1537 | },
1538 | "node_modules/is-plain-obj": {
1539 | "version": "4.1.0",
1540 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
1541 | "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
1542 | "engines": {
1543 | "node": ">=12"
1544 | },
1545 | "funding": {
1546 | "url": "https://github.com/sponsors/sindresorhus"
1547 | }
1548 | },
1549 | "node_modules/js-tokens": {
1550 | "version": "4.0.0",
1551 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1552 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1553 | },
1554 | "node_modules/jsesc": {
1555 | "version": "2.5.2",
1556 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1557 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1558 | "peer": true,
1559 | "bin": {
1560 | "jsesc": "bin/jsesc"
1561 | },
1562 | "engines": {
1563 | "node": ">=4"
1564 | }
1565 | },
1566 | "node_modules/json-parse-even-better-errors": {
1567 | "version": "2.3.1",
1568 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
1569 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
1570 | },
1571 | "node_modules/json5": {
1572 | "version": "2.2.3",
1573 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1574 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1575 | "peer": true,
1576 | "bin": {
1577 | "json5": "lib/cli.js"
1578 | },
1579 | "engines": {
1580 | "node": ">=6"
1581 | }
1582 | },
1583 | "node_modules/kleur": {
1584 | "version": "4.1.5",
1585 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
1586 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
1587 | "engines": {
1588 | "node": ">=6"
1589 | }
1590 | },
1591 | "node_modules/lines-and-columns": {
1592 | "version": "1.2.4",
1593 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1594 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
1595 | },
1596 | "node_modules/loose-envify": {
1597 | "version": "1.4.0",
1598 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1599 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1600 | "dependencies": {
1601 | "js-tokens": "^3.0.0 || ^4.0.0"
1602 | },
1603 | "bin": {
1604 | "loose-envify": "cli.js"
1605 | }
1606 | },
1607 | "node_modules/lru-cache": {
1608 | "version": "5.1.1",
1609 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1610 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1611 | "peer": true,
1612 | "dependencies": {
1613 | "yallist": "^3.0.2"
1614 | }
1615 | },
1616 | "node_modules/mdast-util-definitions": {
1617 | "version": "5.1.1",
1618 | "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz",
1619 | "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==",
1620 | "dependencies": {
1621 | "@types/mdast": "^3.0.0",
1622 | "@types/unist": "^2.0.0",
1623 | "unist-util-visit": "^4.0.0"
1624 | },
1625 | "funding": {
1626 | "type": "opencollective",
1627 | "url": "https://opencollective.com/unified"
1628 | }
1629 | },
1630 | "node_modules/mdast-util-from-markdown": {
1631 | "version": "1.2.0",
1632 | "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz",
1633 | "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==",
1634 | "dependencies": {
1635 | "@types/mdast": "^3.0.0",
1636 | "@types/unist": "^2.0.0",
1637 | "decode-named-character-reference": "^1.0.0",
1638 | "mdast-util-to-string": "^3.1.0",
1639 | "micromark": "^3.0.0",
1640 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
1641 | "micromark-util-decode-string": "^1.0.0",
1642 | "micromark-util-normalize-identifier": "^1.0.0",
1643 | "micromark-util-symbol": "^1.0.0",
1644 | "micromark-util-types": "^1.0.0",
1645 | "unist-util-stringify-position": "^3.0.0",
1646 | "uvu": "^0.5.0"
1647 | },
1648 | "funding": {
1649 | "type": "opencollective",
1650 | "url": "https://opencollective.com/unified"
1651 | }
1652 | },
1653 | "node_modules/mdast-util-to-hast": {
1654 | "version": "12.2.5",
1655 | "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.5.tgz",
1656 | "integrity": "sha512-EFNhT35ZR/VZ85/EedDdCNTq0oFM+NM/+qBomVGQ0+Lcg0nhI8xIwmdCzNMlVlCJNXRprpobtKP/IUh8cfz6zQ==",
1657 | "dependencies": {
1658 | "@types/hast": "^2.0.0",
1659 | "@types/mdast": "^3.0.0",
1660 | "mdast-util-definitions": "^5.0.0",
1661 | "micromark-util-sanitize-uri": "^1.1.0",
1662 | "trim-lines": "^3.0.0",
1663 | "unist-builder": "^3.0.0",
1664 | "unist-util-generated": "^2.0.0",
1665 | "unist-util-position": "^4.0.0",
1666 | "unist-util-visit": "^4.0.0"
1667 | },
1668 | "funding": {
1669 | "type": "opencollective",
1670 | "url": "https://opencollective.com/unified"
1671 | }
1672 | },
1673 | "node_modules/mdast-util-to-string": {
1674 | "version": "3.1.0",
1675 | "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
1676 | "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==",
1677 | "funding": {
1678 | "type": "opencollective",
1679 | "url": "https://opencollective.com/unified"
1680 | }
1681 | },
1682 | "node_modules/micromark": {
1683 | "version": "3.1.0",
1684 | "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
1685 | "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
1686 | "funding": [
1687 | {
1688 | "type": "GitHub Sponsors",
1689 | "url": "https://github.com/sponsors/unifiedjs"
1690 | },
1691 | {
1692 | "type": "OpenCollective",
1693 | "url": "https://opencollective.com/unified"
1694 | }
1695 | ],
1696 | "dependencies": {
1697 | "@types/debug": "^4.0.0",
1698 | "debug": "^4.0.0",
1699 | "decode-named-character-reference": "^1.0.0",
1700 | "micromark-core-commonmark": "^1.0.1",
1701 | "micromark-factory-space": "^1.0.0",
1702 | "micromark-util-character": "^1.0.0",
1703 | "micromark-util-chunked": "^1.0.0",
1704 | "micromark-util-combine-extensions": "^1.0.0",
1705 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
1706 | "micromark-util-encode": "^1.0.0",
1707 | "micromark-util-normalize-identifier": "^1.0.0",
1708 | "micromark-util-resolve-all": "^1.0.0",
1709 | "micromark-util-sanitize-uri": "^1.0.0",
1710 | "micromark-util-subtokenize": "^1.0.0",
1711 | "micromark-util-symbol": "^1.0.0",
1712 | "micromark-util-types": "^1.0.1",
1713 | "uvu": "^0.5.0"
1714 | }
1715 | },
1716 | "node_modules/micromark-core-commonmark": {
1717 | "version": "1.0.6",
1718 | "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
1719 | "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
1720 | "funding": [
1721 | {
1722 | "type": "GitHub Sponsors",
1723 | "url": "https://github.com/sponsors/unifiedjs"
1724 | },
1725 | {
1726 | "type": "OpenCollective",
1727 | "url": "https://opencollective.com/unified"
1728 | }
1729 | ],
1730 | "dependencies": {
1731 | "decode-named-character-reference": "^1.0.0",
1732 | "micromark-factory-destination": "^1.0.0",
1733 | "micromark-factory-label": "^1.0.0",
1734 | "micromark-factory-space": "^1.0.0",
1735 | "micromark-factory-title": "^1.0.0",
1736 | "micromark-factory-whitespace": "^1.0.0",
1737 | "micromark-util-character": "^1.0.0",
1738 | "micromark-util-chunked": "^1.0.0",
1739 | "micromark-util-classify-character": "^1.0.0",
1740 | "micromark-util-html-tag-name": "^1.0.0",
1741 | "micromark-util-normalize-identifier": "^1.0.0",
1742 | "micromark-util-resolve-all": "^1.0.0",
1743 | "micromark-util-subtokenize": "^1.0.0",
1744 | "micromark-util-symbol": "^1.0.0",
1745 | "micromark-util-types": "^1.0.1",
1746 | "uvu": "^0.5.0"
1747 | }
1748 | },
1749 | "node_modules/micromark-factory-destination": {
1750 | "version": "1.0.0",
1751 | "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
1752 | "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
1753 | "funding": [
1754 | {
1755 | "type": "GitHub Sponsors",
1756 | "url": "https://github.com/sponsors/unifiedjs"
1757 | },
1758 | {
1759 | "type": "OpenCollective",
1760 | "url": "https://opencollective.com/unified"
1761 | }
1762 | ],
1763 | "dependencies": {
1764 | "micromark-util-character": "^1.0.0",
1765 | "micromark-util-symbol": "^1.0.0",
1766 | "micromark-util-types": "^1.0.0"
1767 | }
1768 | },
1769 | "node_modules/micromark-factory-label": {
1770 | "version": "1.0.2",
1771 | "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
1772 | "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
1773 | "funding": [
1774 | {
1775 | "type": "GitHub Sponsors",
1776 | "url": "https://github.com/sponsors/unifiedjs"
1777 | },
1778 | {
1779 | "type": "OpenCollective",
1780 | "url": "https://opencollective.com/unified"
1781 | }
1782 | ],
1783 | "dependencies": {
1784 | "micromark-util-character": "^1.0.0",
1785 | "micromark-util-symbol": "^1.0.0",
1786 | "micromark-util-types": "^1.0.0",
1787 | "uvu": "^0.5.0"
1788 | }
1789 | },
1790 | "node_modules/micromark-factory-space": {
1791 | "version": "1.0.0",
1792 | "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
1793 | "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
1794 | "funding": [
1795 | {
1796 | "type": "GitHub Sponsors",
1797 | "url": "https://github.com/sponsors/unifiedjs"
1798 | },
1799 | {
1800 | "type": "OpenCollective",
1801 | "url": "https://opencollective.com/unified"
1802 | }
1803 | ],
1804 | "dependencies": {
1805 | "micromark-util-character": "^1.0.0",
1806 | "micromark-util-types": "^1.0.0"
1807 | }
1808 | },
1809 | "node_modules/micromark-factory-title": {
1810 | "version": "1.0.2",
1811 | "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
1812 | "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
1813 | "funding": [
1814 | {
1815 | "type": "GitHub Sponsors",
1816 | "url": "https://github.com/sponsors/unifiedjs"
1817 | },
1818 | {
1819 | "type": "OpenCollective",
1820 | "url": "https://opencollective.com/unified"
1821 | }
1822 | ],
1823 | "dependencies": {
1824 | "micromark-factory-space": "^1.0.0",
1825 | "micromark-util-character": "^1.0.0",
1826 | "micromark-util-symbol": "^1.0.0",
1827 | "micromark-util-types": "^1.0.0",
1828 | "uvu": "^0.5.0"
1829 | }
1830 | },
1831 | "node_modules/micromark-factory-whitespace": {
1832 | "version": "1.0.0",
1833 | "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
1834 | "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
1835 | "funding": [
1836 | {
1837 | "type": "GitHub Sponsors",
1838 | "url": "https://github.com/sponsors/unifiedjs"
1839 | },
1840 | {
1841 | "type": "OpenCollective",
1842 | "url": "https://opencollective.com/unified"
1843 | }
1844 | ],
1845 | "dependencies": {
1846 | "micromark-factory-space": "^1.0.0",
1847 | "micromark-util-character": "^1.0.0",
1848 | "micromark-util-symbol": "^1.0.0",
1849 | "micromark-util-types": "^1.0.0"
1850 | }
1851 | },
1852 | "node_modules/micromark-util-character": {
1853 | "version": "1.1.0",
1854 | "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
1855 | "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
1856 | "funding": [
1857 | {
1858 | "type": "GitHub Sponsors",
1859 | "url": "https://github.com/sponsors/unifiedjs"
1860 | },
1861 | {
1862 | "type": "OpenCollective",
1863 | "url": "https://opencollective.com/unified"
1864 | }
1865 | ],
1866 | "dependencies": {
1867 | "micromark-util-symbol": "^1.0.0",
1868 | "micromark-util-types": "^1.0.0"
1869 | }
1870 | },
1871 | "node_modules/micromark-util-chunked": {
1872 | "version": "1.0.0",
1873 | "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
1874 | "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
1875 | "funding": [
1876 | {
1877 | "type": "GitHub Sponsors",
1878 | "url": "https://github.com/sponsors/unifiedjs"
1879 | },
1880 | {
1881 | "type": "OpenCollective",
1882 | "url": "https://opencollective.com/unified"
1883 | }
1884 | ],
1885 | "dependencies": {
1886 | "micromark-util-symbol": "^1.0.0"
1887 | }
1888 | },
1889 | "node_modules/micromark-util-classify-character": {
1890 | "version": "1.0.0",
1891 | "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
1892 | "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
1893 | "funding": [
1894 | {
1895 | "type": "GitHub Sponsors",
1896 | "url": "https://github.com/sponsors/unifiedjs"
1897 | },
1898 | {
1899 | "type": "OpenCollective",
1900 | "url": "https://opencollective.com/unified"
1901 | }
1902 | ],
1903 | "dependencies": {
1904 | "micromark-util-character": "^1.0.0",
1905 | "micromark-util-symbol": "^1.0.0",
1906 | "micromark-util-types": "^1.0.0"
1907 | }
1908 | },
1909 | "node_modules/micromark-util-combine-extensions": {
1910 | "version": "1.0.0",
1911 | "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
1912 | "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
1913 | "funding": [
1914 | {
1915 | "type": "GitHub Sponsors",
1916 | "url": "https://github.com/sponsors/unifiedjs"
1917 | },
1918 | {
1919 | "type": "OpenCollective",
1920 | "url": "https://opencollective.com/unified"
1921 | }
1922 | ],
1923 | "dependencies": {
1924 | "micromark-util-chunked": "^1.0.0",
1925 | "micromark-util-types": "^1.0.0"
1926 | }
1927 | },
1928 | "node_modules/micromark-util-decode-numeric-character-reference": {
1929 | "version": "1.0.0",
1930 | "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
1931 | "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
1932 | "funding": [
1933 | {
1934 | "type": "GitHub Sponsors",
1935 | "url": "https://github.com/sponsors/unifiedjs"
1936 | },
1937 | {
1938 | "type": "OpenCollective",
1939 | "url": "https://opencollective.com/unified"
1940 | }
1941 | ],
1942 | "dependencies": {
1943 | "micromark-util-symbol": "^1.0.0"
1944 | }
1945 | },
1946 | "node_modules/micromark-util-decode-string": {
1947 | "version": "1.0.2",
1948 | "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
1949 | "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
1950 | "funding": [
1951 | {
1952 | "type": "GitHub Sponsors",
1953 | "url": "https://github.com/sponsors/unifiedjs"
1954 | },
1955 | {
1956 | "type": "OpenCollective",
1957 | "url": "https://opencollective.com/unified"
1958 | }
1959 | ],
1960 | "dependencies": {
1961 | "decode-named-character-reference": "^1.0.0",
1962 | "micromark-util-character": "^1.0.0",
1963 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
1964 | "micromark-util-symbol": "^1.0.0"
1965 | }
1966 | },
1967 | "node_modules/micromark-util-encode": {
1968 | "version": "1.0.1",
1969 | "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
1970 | "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
1971 | "funding": [
1972 | {
1973 | "type": "GitHub Sponsors",
1974 | "url": "https://github.com/sponsors/unifiedjs"
1975 | },
1976 | {
1977 | "type": "OpenCollective",
1978 | "url": "https://opencollective.com/unified"
1979 | }
1980 | ]
1981 | },
1982 | "node_modules/micromark-util-html-tag-name": {
1983 | "version": "1.1.0",
1984 | "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
1985 | "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==",
1986 | "funding": [
1987 | {
1988 | "type": "GitHub Sponsors",
1989 | "url": "https://github.com/sponsors/unifiedjs"
1990 | },
1991 | {
1992 | "type": "OpenCollective",
1993 | "url": "https://opencollective.com/unified"
1994 | }
1995 | ]
1996 | },
1997 | "node_modules/micromark-util-normalize-identifier": {
1998 | "version": "1.0.0",
1999 | "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
2000 | "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
2001 | "funding": [
2002 | {
2003 | "type": "GitHub Sponsors",
2004 | "url": "https://github.com/sponsors/unifiedjs"
2005 | },
2006 | {
2007 | "type": "OpenCollective",
2008 | "url": "https://opencollective.com/unified"
2009 | }
2010 | ],
2011 | "dependencies": {
2012 | "micromark-util-symbol": "^1.0.0"
2013 | }
2014 | },
2015 | "node_modules/micromark-util-resolve-all": {
2016 | "version": "1.0.0",
2017 | "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
2018 | "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
2019 | "funding": [
2020 | {
2021 | "type": "GitHub Sponsors",
2022 | "url": "https://github.com/sponsors/unifiedjs"
2023 | },
2024 | {
2025 | "type": "OpenCollective",
2026 | "url": "https://opencollective.com/unified"
2027 | }
2028 | ],
2029 | "dependencies": {
2030 | "micromark-util-types": "^1.0.0"
2031 | }
2032 | },
2033 | "node_modules/micromark-util-sanitize-uri": {
2034 | "version": "1.1.0",
2035 | "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
2036 | "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
2037 | "funding": [
2038 | {
2039 | "type": "GitHub Sponsors",
2040 | "url": "https://github.com/sponsors/unifiedjs"
2041 | },
2042 | {
2043 | "type": "OpenCollective",
2044 | "url": "https://opencollective.com/unified"
2045 | }
2046 | ],
2047 | "dependencies": {
2048 | "micromark-util-character": "^1.0.0",
2049 | "micromark-util-encode": "^1.0.0",
2050 | "micromark-util-symbol": "^1.0.0"
2051 | }
2052 | },
2053 | "node_modules/micromark-util-subtokenize": {
2054 | "version": "1.0.2",
2055 | "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
2056 | "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
2057 | "funding": [
2058 | {
2059 | "type": "GitHub Sponsors",
2060 | "url": "https://github.com/sponsors/unifiedjs"
2061 | },
2062 | {
2063 | "type": "OpenCollective",
2064 | "url": "https://opencollective.com/unified"
2065 | }
2066 | ],
2067 | "dependencies": {
2068 | "micromark-util-chunked": "^1.0.0",
2069 | "micromark-util-symbol": "^1.0.0",
2070 | "micromark-util-types": "^1.0.0",
2071 | "uvu": "^0.5.0"
2072 | }
2073 | },
2074 | "node_modules/micromark-util-symbol": {
2075 | "version": "1.0.1",
2076 | "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
2077 | "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
2078 | "funding": [
2079 | {
2080 | "type": "GitHub Sponsors",
2081 | "url": "https://github.com/sponsors/unifiedjs"
2082 | },
2083 | {
2084 | "type": "OpenCollective",
2085 | "url": "https://opencollective.com/unified"
2086 | }
2087 | ]
2088 | },
2089 | "node_modules/micromark-util-types": {
2090 | "version": "1.0.2",
2091 | "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
2092 | "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
2093 | "funding": [
2094 | {
2095 | "type": "GitHub Sponsors",
2096 | "url": "https://github.com/sponsors/unifiedjs"
2097 | },
2098 | {
2099 | "type": "OpenCollective",
2100 | "url": "https://opencollective.com/unified"
2101 | }
2102 | ]
2103 | },
2104 | "node_modules/mime-db": {
2105 | "version": "1.52.0",
2106 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2107 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2108 | "engines": {
2109 | "node": ">= 0.6"
2110 | }
2111 | },
2112 | "node_modules/mime-types": {
2113 | "version": "2.1.35",
2114 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2115 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2116 | "dependencies": {
2117 | "mime-db": "1.52.0"
2118 | },
2119 | "engines": {
2120 | "node": ">= 0.6"
2121 | }
2122 | },
2123 | "node_modules/mri": {
2124 | "version": "1.2.0",
2125 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
2126 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
2127 | "engines": {
2128 | "node": ">=4"
2129 | }
2130 | },
2131 | "node_modules/ms": {
2132 | "version": "2.1.2",
2133 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2134 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2135 | },
2136 | "node_modules/nanoid": {
2137 | "version": "3.3.4",
2138 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
2139 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
2140 | "bin": {
2141 | "nanoid": "bin/nanoid.cjs"
2142 | },
2143 | "engines": {
2144 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2145 | }
2146 | },
2147 | "node_modules/next": {
2148 | "version": "13.1.1",
2149 | "resolved": "https://registry.npmjs.org/next/-/next-13.1.1.tgz",
2150 | "integrity": "sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==",
2151 | "dependencies": {
2152 | "@next/env": "13.1.1",
2153 | "@swc/helpers": "0.4.14",
2154 | "caniuse-lite": "^1.0.30001406",
2155 | "postcss": "8.4.14",
2156 | "styled-jsx": "5.1.1"
2157 | },
2158 | "bin": {
2159 | "next": "dist/bin/next"
2160 | },
2161 | "engines": {
2162 | "node": ">=14.6.0"
2163 | },
2164 | "optionalDependencies": {
2165 | "@next/swc-android-arm-eabi": "13.1.1",
2166 | "@next/swc-android-arm64": "13.1.1",
2167 | "@next/swc-darwin-arm64": "13.1.1",
2168 | "@next/swc-darwin-x64": "13.1.1",
2169 | "@next/swc-freebsd-x64": "13.1.1",
2170 | "@next/swc-linux-arm-gnueabihf": "13.1.1",
2171 | "@next/swc-linux-arm64-gnu": "13.1.1",
2172 | "@next/swc-linux-arm64-musl": "13.1.1",
2173 | "@next/swc-linux-x64-gnu": "13.1.1",
2174 | "@next/swc-linux-x64-musl": "13.1.1",
2175 | "@next/swc-win32-arm64-msvc": "13.1.1",
2176 | "@next/swc-win32-ia32-msvc": "13.1.1",
2177 | "@next/swc-win32-x64-msvc": "13.1.1"
2178 | },
2179 | "peerDependencies": {
2180 | "fibers": ">= 3.1.0",
2181 | "node-sass": "^6.0.0 || ^7.0.0",
2182 | "react": "^18.2.0",
2183 | "react-dom": "^18.2.0",
2184 | "sass": "^1.3.0"
2185 | },
2186 | "peerDependenciesMeta": {
2187 | "fibers": {
2188 | "optional": true
2189 | },
2190 | "node-sass": {
2191 | "optional": true
2192 | },
2193 | "sass": {
2194 | "optional": true
2195 | }
2196 | }
2197 | },
2198 | "node_modules/node-releases": {
2199 | "version": "2.0.9",
2200 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
2201 | "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==",
2202 | "peer": true
2203 | },
2204 | "node_modules/object-assign": {
2205 | "version": "4.1.1",
2206 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2207 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
2208 | "engines": {
2209 | "node": ">=0.10.0"
2210 | }
2211 | },
2212 | "node_modules/openai": {
2213 | "version": "3.1.0",
2214 | "resolved": "https://registry.npmjs.org/openai/-/openai-3.1.0.tgz",
2215 | "integrity": "sha512-v5kKFH5o+8ld+t0arudj833Mgm3GcgBnbyN9946bj6u7bvel4Yg6YFz2A4HLIYDzmMjIo0s6vSG9x73kOwvdCg==",
2216 | "dependencies": {
2217 | "axios": "^0.26.0",
2218 | "form-data": "^4.0.0"
2219 | }
2220 | },
2221 | "node_modules/parent-module": {
2222 | "version": "1.0.1",
2223 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2224 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2225 | "dependencies": {
2226 | "callsites": "^3.0.0"
2227 | },
2228 | "engines": {
2229 | "node": ">=6"
2230 | }
2231 | },
2232 | "node_modules/parse-json": {
2233 | "version": "5.2.0",
2234 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
2235 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
2236 | "dependencies": {
2237 | "@babel/code-frame": "^7.0.0",
2238 | "error-ex": "^1.3.1",
2239 | "json-parse-even-better-errors": "^2.3.0",
2240 | "lines-and-columns": "^1.1.6"
2241 | },
2242 | "engines": {
2243 | "node": ">=8"
2244 | },
2245 | "funding": {
2246 | "url": "https://github.com/sponsors/sindresorhus"
2247 | }
2248 | },
2249 | "node_modules/path-parse": {
2250 | "version": "1.0.7",
2251 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2252 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
2253 | },
2254 | "node_modules/path-type": {
2255 | "version": "4.0.0",
2256 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2257 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2258 | "engines": {
2259 | "node": ">=8"
2260 | }
2261 | },
2262 | "node_modules/picocolors": {
2263 | "version": "1.0.0",
2264 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2265 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
2266 | },
2267 | "node_modules/postcss": {
2268 | "version": "8.4.14",
2269 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
2270 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
2271 | "funding": [
2272 | {
2273 | "type": "opencollective",
2274 | "url": "https://opencollective.com/postcss/"
2275 | },
2276 | {
2277 | "type": "tidelift",
2278 | "url": "https://tidelift.com/funding/github/npm/postcss"
2279 | }
2280 | ],
2281 | "dependencies": {
2282 | "nanoid": "^3.3.4",
2283 | "picocolors": "^1.0.0",
2284 | "source-map-js": "^1.0.2"
2285 | },
2286 | "engines": {
2287 | "node": "^10 || ^12 || >=14"
2288 | }
2289 | },
2290 | "node_modules/prop-types": {
2291 | "version": "15.8.1",
2292 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
2293 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
2294 | "dependencies": {
2295 | "loose-envify": "^1.4.0",
2296 | "object-assign": "^4.1.1",
2297 | "react-is": "^16.13.1"
2298 | }
2299 | },
2300 | "node_modules/property-information": {
2301 | "version": "6.2.0",
2302 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz",
2303 | "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==",
2304 | "funding": {
2305 | "type": "github",
2306 | "url": "https://github.com/sponsors/wooorm"
2307 | }
2308 | },
2309 | "node_modules/react": {
2310 | "version": "18.2.0",
2311 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
2312 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
2313 | "dependencies": {
2314 | "loose-envify": "^1.1.0"
2315 | },
2316 | "engines": {
2317 | "node": ">=0.10.0"
2318 | }
2319 | },
2320 | "node_modules/react-dom": {
2321 | "version": "18.2.0",
2322 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
2323 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
2324 | "dependencies": {
2325 | "loose-envify": "^1.1.0",
2326 | "scheduler": "^0.23.0"
2327 | },
2328 | "peerDependencies": {
2329 | "react": "^18.2.0"
2330 | }
2331 | },
2332 | "node_modules/react-is": {
2333 | "version": "16.13.1",
2334 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
2335 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
2336 | },
2337 | "node_modules/react-markdown": {
2338 | "version": "8.0.4",
2339 | "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.4.tgz",
2340 | "integrity": "sha512-2oxHa6oDxc1apg/Gnc1Goh06t3B617xeywqI/92wmDV9FELI6ayRkwge7w7DoEqM0gRpZGTNU6xQG+YpJISnVg==",
2341 | "dependencies": {
2342 | "@types/hast": "^2.0.0",
2343 | "@types/prop-types": "^15.0.0",
2344 | "@types/unist": "^2.0.0",
2345 | "comma-separated-tokens": "^2.0.0",
2346 | "hast-util-whitespace": "^2.0.0",
2347 | "prop-types": "^15.0.0",
2348 | "property-information": "^6.0.0",
2349 | "react-is": "^18.0.0",
2350 | "remark-parse": "^10.0.0",
2351 | "remark-rehype": "^10.0.0",
2352 | "space-separated-tokens": "^2.0.0",
2353 | "style-to-object": "^0.3.0",
2354 | "unified": "^10.0.0",
2355 | "unist-util-visit": "^4.0.0",
2356 | "vfile": "^5.0.0"
2357 | },
2358 | "funding": {
2359 | "type": "opencollective",
2360 | "url": "https://opencollective.com/unified"
2361 | },
2362 | "peerDependencies": {
2363 | "@types/react": ">=16",
2364 | "react": ">=16"
2365 | }
2366 | },
2367 | "node_modules/react-markdown/node_modules/react-is": {
2368 | "version": "18.2.0",
2369 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
2370 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
2371 | },
2372 | "node_modules/react-transition-group": {
2373 | "version": "4.4.5",
2374 | "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
2375 | "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
2376 | "dependencies": {
2377 | "@babel/runtime": "^7.5.5",
2378 | "dom-helpers": "^5.0.1",
2379 | "loose-envify": "^1.4.0",
2380 | "prop-types": "^15.6.2"
2381 | },
2382 | "peerDependencies": {
2383 | "react": ">=16.6.0",
2384 | "react-dom": ">=16.6.0"
2385 | }
2386 | },
2387 | "node_modules/regenerator-runtime": {
2388 | "version": "0.13.11",
2389 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
2390 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
2391 | },
2392 | "node_modules/remark-parse": {
2393 | "version": "10.0.1",
2394 | "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
2395 | "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
2396 | "dependencies": {
2397 | "@types/mdast": "^3.0.0",
2398 | "mdast-util-from-markdown": "^1.0.0",
2399 | "unified": "^10.0.0"
2400 | },
2401 | "funding": {
2402 | "type": "opencollective",
2403 | "url": "https://opencollective.com/unified"
2404 | }
2405 | },
2406 | "node_modules/remark-rehype": {
2407 | "version": "10.1.0",
2408 | "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
2409 | "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
2410 | "dependencies": {
2411 | "@types/hast": "^2.0.0",
2412 | "@types/mdast": "^3.0.0",
2413 | "mdast-util-to-hast": "^12.1.0",
2414 | "unified": "^10.0.0"
2415 | },
2416 | "funding": {
2417 | "type": "opencollective",
2418 | "url": "https://opencollective.com/unified"
2419 | }
2420 | },
2421 | "node_modules/resolve": {
2422 | "version": "1.22.1",
2423 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
2424 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
2425 | "dependencies": {
2426 | "is-core-module": "^2.9.0",
2427 | "path-parse": "^1.0.7",
2428 | "supports-preserve-symlinks-flag": "^1.0.0"
2429 | },
2430 | "bin": {
2431 | "resolve": "bin/resolve"
2432 | },
2433 | "funding": {
2434 | "url": "https://github.com/sponsors/ljharb"
2435 | }
2436 | },
2437 | "node_modules/resolve-from": {
2438 | "version": "4.0.0",
2439 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2440 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2441 | "engines": {
2442 | "node": ">=4"
2443 | }
2444 | },
2445 | "node_modules/sade": {
2446 | "version": "1.8.1",
2447 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
2448 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
2449 | "dependencies": {
2450 | "mri": "^1.1.0"
2451 | },
2452 | "engines": {
2453 | "node": ">=6"
2454 | }
2455 | },
2456 | "node_modules/scheduler": {
2457 | "version": "0.23.0",
2458 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
2459 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
2460 | "dependencies": {
2461 | "loose-envify": "^1.1.0"
2462 | }
2463 | },
2464 | "node_modules/semver": {
2465 | "version": "6.3.0",
2466 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2467 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2468 | "peer": true,
2469 | "bin": {
2470 | "semver": "bin/semver.js"
2471 | }
2472 | },
2473 | "node_modules/source-map": {
2474 | "version": "0.5.7",
2475 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2476 | "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
2477 | "engines": {
2478 | "node": ">=0.10.0"
2479 | }
2480 | },
2481 | "node_modules/source-map-js": {
2482 | "version": "1.0.2",
2483 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2484 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
2485 | "engines": {
2486 | "node": ">=0.10.0"
2487 | }
2488 | },
2489 | "node_modules/space-separated-tokens": {
2490 | "version": "2.0.2",
2491 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
2492 | "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
2493 | "funding": {
2494 | "type": "github",
2495 | "url": "https://github.com/sponsors/wooorm"
2496 | }
2497 | },
2498 | "node_modules/style-to-object": {
2499 | "version": "0.3.0",
2500 | "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
2501 | "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
2502 | "dependencies": {
2503 | "inline-style-parser": "0.1.1"
2504 | }
2505 | },
2506 | "node_modules/styled-jsx": {
2507 | "version": "5.1.1",
2508 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
2509 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
2510 | "dependencies": {
2511 | "client-only": "0.0.1"
2512 | },
2513 | "engines": {
2514 | "node": ">= 12.0.0"
2515 | },
2516 | "peerDependencies": {
2517 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
2518 | },
2519 | "peerDependenciesMeta": {
2520 | "@babel/core": {
2521 | "optional": true
2522 | },
2523 | "babel-plugin-macros": {
2524 | "optional": true
2525 | }
2526 | }
2527 | },
2528 | "node_modules/stylis": {
2529 | "version": "4.1.3",
2530 | "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz",
2531 | "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA=="
2532 | },
2533 | "node_modules/supports-color": {
2534 | "version": "5.5.0",
2535 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2536 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2537 | "dependencies": {
2538 | "has-flag": "^3.0.0"
2539 | },
2540 | "engines": {
2541 | "node": ">=4"
2542 | }
2543 | },
2544 | "node_modules/supports-preserve-symlinks-flag": {
2545 | "version": "1.0.0",
2546 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2547 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2548 | "engines": {
2549 | "node": ">= 0.4"
2550 | },
2551 | "funding": {
2552 | "url": "https://github.com/sponsors/ljharb"
2553 | }
2554 | },
2555 | "node_modules/to-fast-properties": {
2556 | "version": "2.0.0",
2557 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
2558 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
2559 | "engines": {
2560 | "node": ">=4"
2561 | }
2562 | },
2563 | "node_modules/trim-lines": {
2564 | "version": "3.0.1",
2565 | "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
2566 | "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
2567 | "funding": {
2568 | "type": "github",
2569 | "url": "https://github.com/sponsors/wooorm"
2570 | }
2571 | },
2572 | "node_modules/trough": {
2573 | "version": "2.1.0",
2574 | "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
2575 | "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
2576 | "funding": {
2577 | "type": "github",
2578 | "url": "https://github.com/sponsors/wooorm"
2579 | }
2580 | },
2581 | "node_modules/tslib": {
2582 | "version": "2.4.1",
2583 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
2584 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
2585 | },
2586 | "node_modules/unified": {
2587 | "version": "10.1.2",
2588 | "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
2589 | "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
2590 | "dependencies": {
2591 | "@types/unist": "^2.0.0",
2592 | "bail": "^2.0.0",
2593 | "extend": "^3.0.0",
2594 | "is-buffer": "^2.0.0",
2595 | "is-plain-obj": "^4.0.0",
2596 | "trough": "^2.0.0",
2597 | "vfile": "^5.0.0"
2598 | },
2599 | "funding": {
2600 | "type": "opencollective",
2601 | "url": "https://opencollective.com/unified"
2602 | }
2603 | },
2604 | "node_modules/unist-builder": {
2605 | "version": "3.0.0",
2606 | "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
2607 | "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
2608 | "dependencies": {
2609 | "@types/unist": "^2.0.0"
2610 | },
2611 | "funding": {
2612 | "type": "opencollective",
2613 | "url": "https://opencollective.com/unified"
2614 | }
2615 | },
2616 | "node_modules/unist-util-generated": {
2617 | "version": "2.0.0",
2618 | "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
2619 | "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==",
2620 | "funding": {
2621 | "type": "opencollective",
2622 | "url": "https://opencollective.com/unified"
2623 | }
2624 | },
2625 | "node_modules/unist-util-is": {
2626 | "version": "5.1.1",
2627 | "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
2628 | "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
2629 | "funding": {
2630 | "type": "opencollective",
2631 | "url": "https://opencollective.com/unified"
2632 | }
2633 | },
2634 | "node_modules/unist-util-position": {
2635 | "version": "4.0.3",
2636 | "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz",
2637 | "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==",
2638 | "dependencies": {
2639 | "@types/unist": "^2.0.0"
2640 | },
2641 | "funding": {
2642 | "type": "opencollective",
2643 | "url": "https://opencollective.com/unified"
2644 | }
2645 | },
2646 | "node_modules/unist-util-stringify-position": {
2647 | "version": "3.0.2",
2648 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
2649 | "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
2650 | "dependencies": {
2651 | "@types/unist": "^2.0.0"
2652 | },
2653 | "funding": {
2654 | "type": "opencollective",
2655 | "url": "https://opencollective.com/unified"
2656 | }
2657 | },
2658 | "node_modules/unist-util-visit": {
2659 | "version": "4.1.1",
2660 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz",
2661 | "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==",
2662 | "dependencies": {
2663 | "@types/unist": "^2.0.0",
2664 | "unist-util-is": "^5.0.0",
2665 | "unist-util-visit-parents": "^5.1.1"
2666 | },
2667 | "funding": {
2668 | "type": "opencollective",
2669 | "url": "https://opencollective.com/unified"
2670 | }
2671 | },
2672 | "node_modules/unist-util-visit-parents": {
2673 | "version": "5.1.1",
2674 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz",
2675 | "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==",
2676 | "dependencies": {
2677 | "@types/unist": "^2.0.0",
2678 | "unist-util-is": "^5.0.0"
2679 | },
2680 | "funding": {
2681 | "type": "opencollective",
2682 | "url": "https://opencollective.com/unified"
2683 | }
2684 | },
2685 | "node_modules/update-browserslist-db": {
2686 | "version": "1.0.10",
2687 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
2688 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
2689 | "funding": [
2690 | {
2691 | "type": "opencollective",
2692 | "url": "https://opencollective.com/browserslist"
2693 | },
2694 | {
2695 | "type": "tidelift",
2696 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2697 | }
2698 | ],
2699 | "peer": true,
2700 | "dependencies": {
2701 | "escalade": "^3.1.1",
2702 | "picocolors": "^1.0.0"
2703 | },
2704 | "bin": {
2705 | "browserslist-lint": "cli.js"
2706 | },
2707 | "peerDependencies": {
2708 | "browserslist": ">= 4.21.0"
2709 | }
2710 | },
2711 | "node_modules/uvu": {
2712 | "version": "0.5.6",
2713 | "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
2714 | "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
2715 | "dependencies": {
2716 | "dequal": "^2.0.0",
2717 | "diff": "^5.0.0",
2718 | "kleur": "^4.0.3",
2719 | "sade": "^1.7.3"
2720 | },
2721 | "bin": {
2722 | "uvu": "bin.js"
2723 | },
2724 | "engines": {
2725 | "node": ">=8"
2726 | }
2727 | },
2728 | "node_modules/vfile": {
2729 | "version": "5.3.6",
2730 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
2731 | "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
2732 | "dependencies": {
2733 | "@types/unist": "^2.0.0",
2734 | "is-buffer": "^2.0.0",
2735 | "unist-util-stringify-position": "^3.0.0",
2736 | "vfile-message": "^3.0.0"
2737 | },
2738 | "funding": {
2739 | "type": "opencollective",
2740 | "url": "https://opencollective.com/unified"
2741 | }
2742 | },
2743 | "node_modules/vfile-message": {
2744 | "version": "3.1.3",
2745 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.3.tgz",
2746 | "integrity": "sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==",
2747 | "dependencies": {
2748 | "@types/unist": "^2.0.0",
2749 | "unist-util-stringify-position": "^3.0.0"
2750 | },
2751 | "funding": {
2752 | "type": "opencollective",
2753 | "url": "https://opencollective.com/unified"
2754 | }
2755 | },
2756 | "node_modules/yallist": {
2757 | "version": "3.1.1",
2758 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2759 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2760 | "peer": true
2761 | },
2762 | "node_modules/yaml": {
2763 | "version": "1.10.2",
2764 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2765 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2766 | "engines": {
2767 | "node": ">= 6"
2768 | }
2769 | }
2770 | }
2771 | }
2772 |
--------------------------------------------------------------------------------