diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml
new file mode 100644
index 000000000..1b46e48b8
--- /dev/null
+++ b/.github/workflows/pre-release.yml
@@ -0,0 +1,49 @@
+name: pre-release
+
+on:
+ pull_request:
+ types:
+ - closed
+ branches:
+ - dev
+ paths:
+ - "pyproject.toml"
+
+env:
+ POETRY_VERSION: "1.5.1"
+
+jobs:
+ if_release:
+ if: |
+ ${{ github.event.pull_request.merged == true }}
+ && ${{ contains(github.event.pull_request.labels.*.name, 'pre-release') }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install poetry
+ run: pipx install poetry==$POETRY_VERSION
+ - name: Set up Python 3.10
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.10"
+ cache: "poetry"
+ - name: Build project for distribution
+ run: make build
+ - name: Check Version
+ id: check-version
+ run: |
+ echo version=$(poetry version --short) >> $GITHUB_OUTPUT
+ - name: Create Release
+ uses: ncipollo/release-action@v1
+ with:
+ artifacts: "dist/*"
+ token: ${{ secrets.GITHUB_TOKEN }}
+ draft: false
+ generateReleaseNotes: true
+ tag: v${{ steps.check-version.outputs.version }}
+ commit: main
+ - name: Publish to PyPI
+ env:
+ POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_API_TOKEN }}
+ run: |
+ poetry publish
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 2d5284ad3..12f72f5f8 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -10,7 +10,7 @@ on:
- "pyproject.toml"
env:
- POETRY_VERSION: "1.4.0"
+ POETRY_VERSION: "1.5.1"
jobs:
if_release:
diff --git a/.gitignore b/.gitignore
index 9d71e19b2..3b6cfebbf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -251,3 +251,5 @@ langflow.db
# docusaurus
.docusaurus/
+
+/tmp/*
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 3b458aa81..e09e76cc8 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -6,7 +6,8 @@
"request": "launch",
"module": "uvicorn",
"args": [
- "langflow.main:app",
+ "--factory",
+ "langflow.main:create_app",
"--port",
"7860",
"--reload",
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f2c471b1a..da7ec1977 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -9,7 +9,7 @@ Please do not try to push directly to this repo unless you are a maintainer.
## ๐บ๏ธContributing Guidelines
-### ๐ฉGitHub Issues
+## ๐ฉGitHub Issues
Our [issues](https://github.com/logspace-ai/langflow/issues) page is kept up to date
with bugs, improvements, and feature requests. There is a taxonomy of labels to help
@@ -33,18 +33,19 @@ so that more people can benefit from it.
[collapses the content](https://developer.mozilla.org/en/docs/Web/HTML/Element/details)
so it only becomes visible on click, making the issue easier to read and follow.
-### Issue labels
+## Issue labels
[See this page](https://github.com/logspace-ai/langflow/labels) for an overview of
the system we use to tag our issues and pull requests.
+## Local development
-### Local development
You can develop Langflow using docker compose, or locally.
We provide a .vscode/launch.json file for debugging the backend in VSCode, which is a lot faster than using docker compose.
Setting up hooks:
+
```bash
make init
```
@@ -53,30 +54,46 @@ This will install the pre-commit hooks, which will run `make format` on every co
It is advised to run `make lint` before pushing to the repository.
-#### **Locally**
-Run locally by cloning the repository and installing the dependencies. We recommend using a virtual environment to isolate the dependencies from your system.
+## Run locally
+
+Langflow can run locally by cloning the repository and installing the dependencies. We recommend using a virtual environment to isolate the dependencies from your system.
Before you start, make sure you have the following installed:
- - Poetry (>=1.4)
- - Node.js
-For the backend, you will need to install the dependencies and start the development server.
+- Poetry (>=1.4)
+- Node.js
+
+Then, in the root folder, install the dependencies and start the development server for the backend:
+
```bash
-make install_backend
make backend
```
-For the frontend, you will need to install the dependencies and start the development server.
+
+And the frontend:
+
```bash
make frontend
```
+## Docker compose
+
+The following snippet will run the backend and frontend in separate containers. The frontend will be available at `localhost:3000` and the backend at `localhost:7860`.
-#### **Docker compose**
-This will run the backend and frontend in separate containers. The frontend will be available at `localhost:3000` and the backend at `localhost:7860`.
```bash
docker compose up --build
# or
make dev build=1
```
+## Documentation
+The documentation is built using [Docusaurus](https://docusaurus.io/). To run the documentation locally, run the following commands:
+
+```bash
+cd docs
+npm install
+npm run start
+```
+
+The documentation will be available at `localhost:3000` and all the files are located in the `docs/docs` folder.
+Once you are done with your changes, you can create a Pull Request to the `main` branch.
diff --git a/Makefile b/Makefile
index 79e27833e..ff540da0d 100644
--- a/Makefile
+++ b/Makefile
@@ -46,7 +46,7 @@ install_backend:
backend:
make install_backend
- poetry run uvicorn src.backend.langflow.main:app --port 7860 --reload --log-level debug
+ poetry run uvicorn --factory src.backend.langflow.main:create_app --port 7860 --reload --log-level debug
build_and_run:
echo 'Removing dist folder'
diff --git a/README.md b/README.md
index b07ec482d..dcd91e075 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,6 @@
-
@@ -261,7 +283,6 @@ Join our [Discord](https://discord.com/invite/EqksyE2EX9) server to ask question
[](https://star-history.com/#logspace-ai/langflow&Date)
-
# ๐ License
Langflow is released under the MIT License. See the LICENSE file for details.
diff --git a/docs/docs/components/chains.mdx b/docs/docs/components/chains.mdx
index 59caba30d..a79c4a97a 100644
--- a/docs/docs/components/chains.mdx
+++ b/docs/docs/components/chains.mdx
@@ -1,14 +1,16 @@
import ThemedImage from "@theme/ThemedImage";
import useBaseUrl from "@docusaurus/useBaseUrl";
import ZoomableImage from "/src/theme/ZoomableImage.js";
-import Admonition from '@theme/Admonition';
+import Admonition from "@theme/Admonition";
# Chains
-
- We appreciate your understanding as we polish our documentation โ it may contain some rough edges. Share your feedback or report issues to help us improve! ๐ ๏ธ๐
-
+
+ We appreciate your understanding as we polish our documentation โ it may
+ contain some rough edges. Share your feedback or report issues to help us
+ improve! ๐ ๏ธ๐
+
Chains, in the context of language models, refer to a series of calls made to a language model. It allows for the output of one call to be used as the input for another call. Different types of chains allow for different levels of complexity. Chains are useful for creating pipelines and executing specific scenarios.
@@ -19,22 +21,23 @@ Chains, in the context of language models, refer to a series of calls made to a
The `CombineDocsChain` incorporates methods to combine or aggregate loaded documents for question-answering functionality.
-:::info
+
Works as a proxy of LangChainโs [documents](https://python.langchain.com/docs/modules/chains/document/) chains generated by the `load_qa_chain` function.
-:::
+
**Params**
- **LLM:** Language Model to use in the chain.
- **chain_type:** The chain type to be used. Each one of them applies a different โcombination strategyโ.
- - **stuff**: The stuff [documents](https://python.langchain.com/docs/modules/chains/document/stuff) chain (โstuff" as in "to stuff" or "to fill") is the most straightforward of *the* document chains. It takes a list of documents, inserts them all into a prompt, and passes that prompt to an LLM. This chain is well-suited for applications where documents are small and only a few are passed in for most calls.
- - **map_reduce**: The map-reduce [documents](https://python.langchain.com/docs/modules/chains/document/map_reduce) chain first applies an LLM chain to each document individually (the Map step), treating the chain output as a new document. It then passes all the new documents to a separate combined documents chain to get a single output (the Reduce step). It can optionally first compress or collapse the mapped documents to make sure that they fit in the combined documents chain (which will often pass them to an LLM). This compression step is performed recursively if necessary.
- - **map_rerank**: The map re-rank [documents](https://python.langchain.com/docs/modules/chains/document/map_rerank) chain runs an initial prompt on each document that not only tries to complete a task but also gives a score for how certain it is in its answer. The highest-scoring response is returned.
- - **refine**: The refine [documents](https://python.langchain.com/docs/modules/chains/document/refine) chain constructs a response by looping over the input documents and iteratively updating its answer. For each document, it passes all non-document inputs, the current document, and the latest intermediate answer to an LLM chain to get a new answer.
- Since the Refine chain only passes a single document to the LLM at a time, it is well-suited for tasks that require analyzing more documents than can fit in the model's context. The obvious tradeoff is that this chain will make far more LLM calls than, for example, the Stuff documents chain. There are also certain tasks that are difficult to accomplish iteratively. For example, the Refine chain can perform poorly when documents frequently cross-reference one another or when a task requires detailed information from many documents.
+ - **stuff**: The stuff [documents](https://python.langchain.com/docs/modules/chains/document/stuff) chain (โstuff" as in "to stuff" or "to fill") is the most straightforward of _the_ document chains. It takes a list of documents, inserts them all into a prompt, and passes that prompt to an LLM. This chain is well-suited for applications where documents are small and only a few are passed in for most calls.
+ - **map_reduce**: The map-reduce [documents](https://python.langchain.com/docs/modules/chains/document/map_reduce) chain first applies an LLM chain to each document individually (the Map step), treating the chain output as a new document. It then passes all the new documents to a separate combined documents chain to get a single output (the Reduce step). It can optionally first compress or collapse the mapped documents to make sure that they fit in the combined documents chain (which will often pass them to an LLM). This compression step is performed recursively if necessary.
+ - **map_rerank**: The map re-rank [documents](https://python.langchain.com/docs/modules/chains/document/map_rerank) chain runs an initial prompt on each document that not only tries to complete a task but also gives a score for how certain it is in its answer. The highest-scoring response is returned.
+ - **refine**: The refine [documents](https://python.langchain.com/docs/modules/chains/document/refine) chain constructs a response by looping over the input documents and iteratively updating its answer. For each document, it passes all non-document inputs, the current document, and the latest intermediate answer to an LLM chain to get a new answer.
+
+ Since the Refine chain only passes a single document to the LLM at a time, it is well-suited for tasks that require analyzing more documents than can fit in the model's context. The obvious tradeoff is that this chain will make far more LLM calls than, for example, the Stuff documents chain. There are also certain tasks that are difficult to accomplish iteratively. For example, the Refine chain can perform poorly when documents frequently cross-reference one another or when a task requires detailed information from many documents.
---
@@ -48,7 +51,7 @@ The `ConversationChain` is a straightforward chain for interactive conversations
- **Memory:** Default memory store.
- **input_key:** Used to specify the key under which the user input will be stored in the conversation memory. It allows you to provide the user's input to the chain for processing and generating a response.
- **output_key:** Used to specify the key under which the generated response will be stored in the conversation memory. It allows you to retrieve the response using the specified key.
-- **verbose:** This parameter is used to control the level of detail in the output of the chain. When set to True, it will print out some internal states of the chain while it is being run, which can be helpful for debugging and understanding the chain's behavior. If set to False, it will suppress the verbose output โ defaults to `False`.
+- **verbose:** This parameter is used to control the level of detail in the output of the chain. When set to True, it will print out some internal states of the chain while it is being run, which can be helpful for debugging and understanding the chain's behavior. If set to False, it will suppress the verbose output โ defaults to `False`.
---
@@ -56,11 +59,11 @@ The `ConversationChain` is a straightforward chain for interactive conversations
The `ConversationalRetrievalChain` extracts information and provides answers by combining document search and question-answering abilities.
-:::info
+
A retriever is a component that finds documents based on a query. It doesn't store the documents themselves, but it returns the ones that match the query.
-:::
+
**Params**
@@ -68,12 +71,13 @@ A retriever is a component that finds documents based on a query. It doesn't sto
- **Memory:** Default memory store.
- **Retriever:** The retriever used to fetch relevant documents.
- **chain_type:** The chain type to be used. Each one of them applies a different โcombination strategyโ.
- - **stuff**: The stuff [documents](https://python.langchain.com/docs/modules/chains/document/stuff) chain (โstuff" as in "to stuff" or "to fill") is the most straightforward of *the* document chains. It takes a list of documents, inserts them all into a prompt, and passes that prompt to an LLM. This chain is well-suited for applications where documents are small and only a few are passed in for most calls.
- - **map_reduce**: The map-reduce [documents](https://python.langchain.com/docs/modules/chains/document/map_reduce) chain first applies an LLM chain to each document individually (the Map step), treating the chain output as a new document. It then passes all the new documents to a separate combined documents chain to get a single output (the Reduce step). It can optionally first compress or collapse the mapped documents to make sure that they fit in the combined documents chain (which will often pass them to an LLM). This compression step is performed recursively if necessary.
- - **map_rerank**: The map re-rank [documents](https://python.langchain.com/docs/modules/chains/document/map_rerank) chain runs an initial prompt on each document that not only tries to complete a task but also gives a score for how certain it is in its answer. The highest-scoring response is returned.
- - **refine**: The refine [documents](https://python.langchain.com/docs/modules/chains/document/refine) chain constructs a response by looping over the input documents and iteratively updating its answer. For each document, it passes all non-document inputs, the current document, and the latest intermediate answer to an LLM chain to get a new answer.
- Since the Refine chain only passes a single document to the LLM at a time, it is well-suited for tasks that require analyzing more documents than can fit in the model's context. The obvious tradeoff is that this chain will make far more LLM calls than, for example, the Stuff documents chain. There are also certain tasks that are difficult to accomplish iteratively. For example, the Refine chain can perform poorly when documents frequently cross-reference one another or when a task requires detailed information from many documents.
+ - **stuff**: The stuff [documents](https://python.langchain.com/docs/modules/chains/document/stuff) chain (โstuff" as in "to stuff" or "to fill") is the most straightforward of _the_ document chains. It takes a list of documents, inserts them all into a prompt, and passes that prompt to an LLM. This chain is well-suited for applications where documents are small and only a few are passed in for most calls.
+ - **map_reduce**: The map-reduce [documents](https://python.langchain.com/docs/modules/chains/document/map_reduce) chain first applies an LLM chain to each document individually (the Map step), treating the chain output as a new document. It then passes all the new documents to a separate combined documents chain to get a single output (the Reduce step). It can optionally first compress or collapse the mapped documents to make sure that they fit in the combined documents chain (which will often pass them to an LLM). This compression step is performed recursively if necessary.
+ - **map_rerank**: The map re-rank [documents](https://python.langchain.com/docs/modules/chains/document/map_rerank) chain runs an initial prompt on each document that not only tries to complete a task but also gives a score for how certain it is in its answer. The highest-scoring response is returned.
+ - **refine**: The refine [documents](https://python.langchain.com/docs/modules/chains/document/refine) chain constructs a response by looping over the input documents and iteratively updating its answer. For each document, it passes all non-document inputs, the current document, and the latest intermediate answer to an LLM chain to get a new answer.
+
+ Since the Refine chain only passes a single document to the LLM at a time, it is well-suited for tasks that require analyzing more documents than can fit in the model's context. The obvious tradeoff is that this chain will make far more LLM calls than, for example, the Stuff documents chain. There are also certain tasks that are difficult to accomplish iteratively. For example, the Refine chain can perform poorly when documents frequently cross-reference one another or when a task requires detailed information from many documents.
- **return_source_documents:** Used to specify whether or not to include the source documents that were used to answer the question in the output. When set to `True`, source documents will be included in the output along with the generated answer. This can be useful for providing additional context or references to the user โ defaults to `True`.
- **verbose:** Whether or not to run in verbose mode. In verbose mode, intermediate logs will be printed to the console โ defaults to `False`.
@@ -115,17 +119,17 @@ The `LLMMathChain` works by using the language model with an `LLMChain` to under
`RetrievalQA` is a chain used to find relevant documents or information to answer a given query. The retriever is responsible for returning the relevant documents based on the query, and the QA component then extracts the answer from those documents. The retrieval QA system combines the capabilities of both the retriever and the QA component to provide accurate and relevant answers to user queries.
-:::info
+
A retriever is a component that finds documents based on a query. It doesn't store the documents themselves, but it returns the ones that match the query.
-:::
+
**Params**
- **Combine Documents Chain:** Chain to use to combine the documents.
- **Memory:** Default memory store.
-- **Retriever:** The retriever used to fetch relevant documents.
+- **Retriever:** The retriever used to fetch relevant documents.
- **input_key:** This parameter is used to specify the key in the input data that contains the question. It is used to retrieve the question from the input data and pass it to the question-answering model for generating the answer โ defaults to `query`.
- **output_key:** This parameter is used to specify the key in the output data where the generated answer will be stored. It is used to retrieve the answer from the output data after the question-answering model has generated it โ defaults to `result`.
- **return_source_documents:** Used to specify whether or not to include the source documents that were used to answer the question in the output. When set to `True`, source documents will be included in the output along with the generated answer. This can be useful for providing additional context or references to the user โ defaults to `True`.
@@ -141,4 +145,4 @@ The `SQLDatabaseChain` finds answers to questions using a SQL database. It works
- **Db:** SQL Database to connect to.
- **LLM:** Language Model to use in the chain.
-- **Prompt:** Prompt template to translate natural language to SQL.
\ No newline at end of file
+- **Prompt:** Prompt template to translate natural language to SQL.
diff --git a/docs/docs/components/custom.mdx b/docs/docs/components/custom.mdx
new file mode 100644
index 000000000..ffa747c1b
--- /dev/null
+++ b/docs/docs/components/custom.mdx
@@ -0,0 +1,92 @@
+import Admonition from "@theme/Admonition";
+
+# Custom Components
+
+Used to create a custom component, a special type of Langflow component that allows users to extend the functionality of the platform by creating their own reusable and configurable components from a Python script.
+
+To use a custom component, follow these steps:
+
+- Create a class that inherits from _`langflow.CustomComponent`_ and contains a _`build`_ method.
+- Use arguments with [Type Annotations (or Type Hints)](https://docs.python.org/3/library/typing.html) of the _`build`_ method to create component fields.
+- If applicable, use the _`build_config`_ method to customize how these fields look and behave.
+
+
+
+For an in-depth explanation of custom components, their rules, and applications, make sure to read [Custom Component guidelines](../guidelines/custom-component).
+
+
+
+**Params**
+
+- **Code:** The Python code to define the component.
+
+## The CustomComponent Class
+
+The CustomComponent class serves as the foundation for creating custom components. By inheriting this class, users can create new, configurable components, tailored to their specific requirements.
+
+**Methods**
+
+- **build**: This method is required within a Custom Component class. It defines the component's functionality and specifies how it processes input data to produce output data. This method is called when the component is built (i.e., when you click the _Build_ โก button in the canvas).
+
+ The type annotations of the _`build`_ instance method are used to create the fields of the component.
+
+ | Supported Types |
+ | --------------------------------------------------------- |
+ | _`str`_, _`int`_, _`float`_, _`bool`_, _`list`_, _`dict`_ |
+ | _`langchain.chains.base.Chain`_ |
+ | _`langchain.PromptTemplate`_ |
+ | _`langchain.llms.base.BaseLLM`_ |
+ | _`langchain.Tool`_ |
+ | _`langchain.document_loaders.base.BaseLoader`_ |
+ | _`langchain.schema.Document`_ |
+ | _`langchain.text_splitters.TextSplitter`_ |
+ | _`langchain.vectorstores.base.VectorStore`_ |
+ | _`langchain.embeddings.base.Embeddings`_ |
+ | _`langchain.schema.BaseRetriever`_ |
+
+
+ Unlike Langchain types, base Python types do not add a
+ [handle](../guidelines/components) to the field by default. To add handles,
+ use the _`input_types`_ key in the _`build_config`_ method.
+
+
+- **build_config**: Used to define the configuration fields of the component (if applicable). It should always return a dictionary with specific keys representing the field names and corresponding configurations. This method is called when the code is processed (i.e., when you click _Check and Save_ in the code editor). It must follow the format described below:
+
+ - Top-level keys are field names.
+ - Their values are also of type _`dict`_. They specify the behavior of the generated fields.
+
+ Below are the available keys used to configure component fields:
+
+ | Key | Description |
+ | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | _`field_type: str`_ | The type of the field (can be any of the types supported by the _`build`_ method). |
+ | _`is_list: bool`_ | If the field can be a list of values, meaning that the user can manually add more inputs to the same field. |
+ | _`options: List[str]`_ | When defined, the field becomes a dropdown menu where a list of strings defines the options to be displayed. If the _`value`_ attribute is set to one of the options, that option becomes default. For this parameter to work, _`field_type`_ should invariably be _`str`_. |
+ | _`multiline: bool`_ | Defines if a string field opens a text editor. Useful for longer texts. |
+ | _`input_types: List[str]`_ | Used when you want a _`str`_ field to have connectable handles. |
+ | _`display_name: str`_ | Defines the name of the field. |
+ | _`advanced: bool`_ | Hide the field in the canvas view (displayed component settings only). Useful when a field is for advanced users. |
+ | _`password: bool`_ | To mask the input text. Useful to hide sensitive text (e.g. API keys). |
+ | _`required: bool`_ | Makes the field required. |
+ | _`info: str`_ | Adds a tooltip to the field. |
+ | _`file_types: List[str]`_ | This is a requirement if the _`field_type`_ is _file_. Defines which file types will be accepted. For example, _json_, _yaml_ or _yml_. |
+
+- The CustomComponent class also provides helpful methods for specific tasks (e.g., to load and use other flows from the Langflow platform):
+
+ | Method Name | Description |
+ | -------------- | ------------------------------------------------------------------- |
+ | _`list_flows`_ | Returns a list of Flow objects with an _`id`_ and a _`name`_. |
+ | _`get_flow`_ | Returns a Flow object. Parameters are _`flow_name`_ or _`flow_id`_. |
+ | _`load_flow`_ | Loads a flow from a given _`id`_. |
+
+- Useful attributes:
+
+ | Attribute Name | Description |
+ | -------------- | ----------------------------------------------------------------------------- |
+ | _`repr_value`_ | Displays the value it receives in the _`build`_ method. Useful for debugging. |
+
+
+
+ Check out the [FlowRunner](../examples/flow-runner) example to understand how to call a flow from a custom component.
+
+
diff --git a/docs/docs/components/prompts.mdx b/docs/docs/components/prompts.mdx
index 81ecc4b82..4256e091a 100644
--- a/docs/docs/components/prompts.mdx
+++ b/docs/docs/components/prompts.mdx
@@ -1,11 +1,13 @@
-import Admonition from '@theme/Admonition';
+import Admonition from "@theme/Admonition";
# Prompts
-
- We appreciate your understanding as we polish our documentation โ it may contain some rough edges. Share your feedback or report issues to help us improve! ๐ ๏ธ๐
-
+
+ We appreciate your understanding as we polish our documentation โ it may
+ contain some rough edges. Share your feedback or report issues to help us
+ improve! ๐ ๏ธ๐
+
A prompt refers to the input given to a language model. It is constructed from multiple components and can be parametrized using prompt templates. A prompt template is a reproducible way to generate prompts and allow for easy customization through input variables.
@@ -16,8 +18,10 @@ A prompt refers to the input given to a language model. It is constructed from m
The `PromptTemplate` component allows users to create prompts and define variables that provide control over instructing the model. The template can take in a set of variables from the end user and generates the prompt once the conversation is initiated.
-:::info
-Once a variable is defined in the prompt template, it becomes a component input of its own. Check out [Prompt Customization](../guidelines/prompt-customization.mdx) to learn more.
-:::
+
+ Once a variable is defined in the prompt template, it becomes a component
+ input of its own. Check out [Prompt
+ Customization](../guidelines/prompt-customization.mdx) to learn more.
+
-- **template:** Template used to format an individual request.
\ No newline at end of file
+- **template:** Template used to format an individual request.
diff --git a/docs/docs/contributing/how-contribute.md b/docs/docs/contributing/how-contribute.md
index cdccc271f..53b430496 100644
--- a/docs/docs/contributing/how-contribute.md
+++ b/docs/docs/contributing/how-contribute.md
@@ -36,10 +36,9 @@ Before you start, make sure you have the following installed:
- Poetry (>=1.4)
- Node.js
-Then install the dependencies and start the development server for the backend:
+Then, in the root folder, install the dependencies and start the development server for the backend:
```bash
-make install_backend
make backend
```
@@ -49,6 +48,7 @@ And the frontend:
make frontend
```
+
---
## Docker compose
@@ -59,4 +59,19 @@ The following snippet will run the backend and frontend in separate containers.
docker compose up --build
# or
make dev build=1
-```
\ No newline at end of file
+```
+
+---
+
+## Documentation
+
+The documentation is built using [Docusaurus](https://docusaurus.io/). To run the documentation locally, run the following commands:
+
+```bash
+cd docs
+npm install
+npm run start
+```
+
+The documentation will be available at `localhost:3000` and all the files are located in the `docs/docs` folder.
+Once you are done with your changes, you can create a Pull Request to the `main` branch.
diff --git a/docs/docs/examples/buffer-memory.mdx b/docs/docs/examples/buffer-memory.mdx
index c3e886cf9..d34649991 100644
--- a/docs/docs/examples/buffer-memory.mdx
+++ b/docs/docs/examples/buffer-memory.mdx
@@ -1,3 +1,5 @@
+import Admonition from "@theme/Admonition";
+
# Buffer Memory
For certain applications, retaining past interactions is crucial. For that, chains and agents may accept a memory component as one of their input parameters. The `ConversationBufferMemory` component is one of them. It stores messages and extracts them into variables.
@@ -17,9 +19,10 @@ import ZoomableImage from "/src/theme/ZoomableImage.js";
#### Download Flow
-:::note LangChain Components ๐ฆ๐
+
- [`ConversationBufferMemory`](https://python.langchain.com/docs/modules/memory/how_to/buffer)
- [`ConversationChain`](https://python.langchain.com/docs/modules/chains/)
- [`ChatOpenAI`](https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai)
- :::
+
+
diff --git a/docs/docs/examples/conversation-chain.mdx b/docs/docs/examples/conversation-chain.mdx
index b8cbb11bb..db3181881 100644
--- a/docs/docs/examples/conversation-chain.mdx
+++ b/docs/docs/examples/conversation-chain.mdx
@@ -1,10 +1,14 @@
+import Admonition from "@theme/Admonition";
+
# Conversation Chain
This example shows how to instantiate a simple `ConversationChain` component using a Language Model (LLM). Once the Node Status turns green ๐ข, the chat will be ready to take in user messages. Here, we used `ChatOpenAI` to act as the required LLM input, but you can use any LLM for this purpose.
-:::info
+
+
Make sure to always get the API key from the provider.
-:::
+
+
## โ๏ธ Langflow Example
@@ -21,8 +25,9 @@ import ZoomableImage from "/src/theme/ZoomableImage.js";
#### Download Flow
-:::note LangChain Components ๐ฆ๐
+
- [`ConversationChain`](https://python.langchain.com/docs/modules/chains/)
- [`ChatOpenAI`](https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai)
- :::
+
+
diff --git a/docs/docs/examples/csv-loader.mdx b/docs/docs/examples/csv-loader.mdx
index de808ec3d..c59dfc1e7 100644
--- a/docs/docs/examples/csv-loader.mdx
+++ b/docs/docs/examples/csv-loader.mdx
@@ -1,3 +1,5 @@
+import Admonition from "@theme/Admonition";
+
# CSV Loader
The `VectoStoreAgent` component retrieves information from one or more vector stores. This example shows a `VectoStoreAgent` connected to a CSV file through the `Chroma` vector store. Process description:
@@ -7,13 +9,18 @@ The `VectoStoreAgent` component retrieves information from one or more vector st
- These chunks feed the `Chroma` vector store, which converts them into vectors and stores them for fast indexing.
- Finally, the agent accesses the information of the vector store through the `VectorStoreInfo` tool.
-:::info
-The vector store is used for efficient semantic search, while `VectorStoreInfo` carries information about it, such as its name and description. Embeddings are a way to represent words, phrases, or any entities in a vector space. Learn more about them [here](https://platform.openai.com/docs/guides/embeddings/what-are-embeddings).
-:::
+
+ The vector store is used for efficient semantic search, while
+ `VectorStoreInfo` carries information about it, such as its name and
+ description. Embeddings are a way to represent words, phrases, or any entities
+ in a vector space. Learn more about them
+ [here](https://platform.openai.com/docs/guides/embeddings/what-are-embeddings).
+
-:::tip
-Once you build this flow, ask questions about the data in the chat interface (e.g., number of rows or columns).
-:::
+
+ Once you build this flow, ask questions about the data in the chat interface
+ (e.g., number of rows or columns).
+
## โ๏ธ Langflow Example
@@ -30,7 +37,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js";
#### Download Flow
-:::note LangChain Components ๐ฆ๐
+
- [`CSVLoader`](https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv)
- [`CharacterTextSplitter`](https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter)
@@ -39,4 +46,5 @@ import ZoomableImage from "/src/theme/ZoomableImage.js";
- [`VectorStoreInfo`](https://python.langchain.com/docs/modules/data_connection/vectorstores/)
- [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai)
- [`VectorStoreAgent`](https://python.langchain.com/docs/modules/agents/toolkits/vectorstore)
- :::
+
+
diff --git a/docs/docs/examples/flow-runner.mdx b/docs/docs/examples/flow-runner.mdx
new file mode 100644
index 000000000..c496cd745
--- /dev/null
+++ b/docs/docs/examples/flow-runner.mdx
@@ -0,0 +1,365 @@
+---
+description: Custom Components
+hide_table_of_contents: true
+---
+
+import ZoomableImage from "/src/theme/ZoomableImage.js";
+import Admonition from "@theme/Admonition";
+
+# FlowRunner Component
+
+The CustomComponent class allows us to create components that interact with Langflow itself. In this example, we will make a component that runs other flows available in "My Collection".
+
+
+
+We will cover how to:
+
+- List Collection flows using the _`list_flows`_ method.
+- Load a flow using the _`load_flow`_ method.
+- Configure a dropdown input field using the _`options`_ parameter.
+
+
+
+Example Code
+
+```python
+from langflow import CustomComponent
+from langchain.schema import Document
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ flows = self.list_flows()
+ flow_names = [f.name for f in flows]
+ return {"flow_name": {"options": flow_names,
+ "display_name": "Flow Name",
+ },
+ "document": {"display_name": "Document"}
+ }
+
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+ # Get the flow that matches the selected name
+ # You can also get the flow by id
+ # using self.get_flow(flow_id=flow_id)
+ tweaks = {}
+ flow = self.get_flow(flow_name=flow_name, tweaks=tweaks)
+ # Get the page_content from the document
+ if document and isinstance(document, list):
+ document = document[0]
+ page_content = document.page_content
+ # Use it in the flow
+ result = flow(page_content)
+ return Document(page_content=str(result))
+
+```
+
+
+
+
+
+```python
+from langflow import CustomComponent
+
+
+class MyComponent(CustomComponent):
+ display_name = "Custom Component"
+ description = "This is a custom component"
+
+ def build_config(self):
+ ...
+
+ def build(self):
+ ...
+
+```
+
+The typical structure of a Custom Component is composed of _`display_name`_ and _`description`_ attributes, _`build`_ and _`build_config`_ methods.
+
+---
+
+```python
+from langflow import CustomComponent
+
+
+# focus
+class FlowRunner(CustomComponent):
+ # focus
+ display_name = "Flow Runner"
+ # focus
+ description = "Run other flows"
+
+ def build_config(self):
+ ...
+
+ def build(self):
+ ...
+
+```
+
+Let's start by defining our component's _`display_name`_ and _`description`_.
+
+---
+
+```python
+from langflow import CustomComponent
+# focus
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ def build(self):
+ ...
+
+```
+
+Second, we will import _`Document`_ from the [_langchain.schema_](https://docs.langchain.com/docs/components/schema/) module. This will be the return type of the _`build`_ method.
+
+---
+
+```python
+from langflow import CustomComponent
+# focus
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ # focus
+ def build(self, flow_name: str, document: Document) -> Document:
+ ...
+
+```
+
+Now, let's add the [parameters](focus://11[20:55]) and the [return type](focus://11[60:69]) to the _`build`_ method. The parameters added are:
+
+- _`flow_name`_ is the name of the flow we want to run.
+- _`document`_ is the input document to be passed to that flow.
+ - Since _`Document`_ is a Langchain type, it will add an input [handle](../guidelines/components) to the component ([see more](../components/custom)).
+
+---
+
+```python focus=13:14
+from langflow import CustomComponent
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+
+```
+
+We can now start writing the _`build`_ method. Let's list available flows in "My Collection" using the _`list_flows`_ method.
+
+---
+
+```python focus=15:18
+from langflow import CustomComponent
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+ # Get the flow that matches the selected name
+ # You can also get the flow by id
+ # using self.get_flow(flow_id=flow_id)
+ tweaks = {}
+ flow = self.get_flow(flow_name=flow_name, tweaks=tweaks)
+
+```
+
+And retrieve a flow that matches the selected name (we'll make a dropdown input field for the user to choose among flow names).
+
+
+ From version 0.4.0, names are unique, which was not the case in previous
+ versions. This might lead to unexpected results if using flows with the same
+ name.
+
+
+---
+
+```python
+from langflow import CustomComponent
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+ # Get the flow that matches the selected name
+ # You can also get the flow by id
+ # using self.get_flow(flow_id=flow_id)
+ tweaks = {}
+ flow = self.get_flow(flow_name=flow_name, tweaks=tweaks)
+
+
+```
+
+You can load this flow using _`get_flow`_ and set a _`tweaks`_ dictionary to customize it. Find more about tweaks in our [features guidelines](../guidelines/features#code).
+
+---
+
+```python
+from langflow import CustomComponent
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ ...
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+ # Get the flow that matches the selected name
+ # You can also get the flow by id
+ # using self.get_flow(flow_id=flow_id)
+ tweaks = {}
+ flow = self.get_flow(flow_name=flow_name, tweaks=tweaks)
+ # Get the page_content from the document
+ if document and isinstance(document, list):
+ document = document[0]
+ page_content = document.page_content
+ # Use it in the flow
+ result = flow(page_content)
+ return Document(page_content=str(result))
+```
+
+We are using a _`Document`_ as input because it is a straightforward way to pass text data in Langflow (specifically because you can connect it to many [loaders](../components/loaders)).
+Generally, a flow will take a string or a dictionary as input because that's what LangChain components expect.
+In case you are passing a dictionary, you need to build it according to the needs of the flow you are using.
+
+The content of a document can be extracted using the _`page_content`_ attribute, which is a string, and passed as an argument to the selected flow.
+
+---
+
+```python focus=9:16
+from langflow import CustomComponent
+from langchain.schema import Document
+
+
+class FlowRunner(CustomComponent):
+ display_name = "Flow Runner"
+ description = "Run other flows using a document as input."
+
+ def build_config(self):
+ flows = self.list_flows()
+ flow_names = [f.name for f in flows]
+ return {"flow_name": {"options": flow_names,
+ "display_name": "Flow Name",
+ },
+ "document": {"display_name": "Document"}
+ }
+
+ def build(self, flow_name: str, document: Document) -> Document:
+ # List the flows
+ flows = self.list_flows()
+ # Get the flow that matches the selected name
+ # You can also get the flow by id
+ # using self.get_flow(flow_id=flow_id)
+ tweaks = {}
+ flow = self.get_flow(flow_name=flow_name, tweaks=tweaks)
+ # Get the page_content from the document
+ if document and isinstance(document, list):
+ document = document[0]
+ page_content = document.page_content
+ # Use it in the flow
+ result = flow(page_content)
+ return Document(page_content=str(result))
+```
+
+Finally, we can add field customizations through the _`build_config`_ method. Here we added the _`options`_ key to make the _`flow_name`_ field a dropdown menu. Check out the [custom component reference](../components/custom) for a list of available keys.
+
+
+ Make sure that the field type is _`str`_ and _`options`_ values are strings.
+
+
+
+
+Done! This is what our script and custom component looks like:
+
+
+ You can get the HTML code embedded with the chat by clicking the Code button
+ at the Sidebar after building a flow.
+
+
+{" "}
+
+
+ Clicking the Chat Widget HTML tab, you'll get the code to be inserted. Read
+ below to learn how to use it with HTML, React and Angular.
+
+
+{" "}
+
+
Further down, we will explain each of these options.
@@ -34,9 +32,10 @@ import ReactPlayer from "react-player";
Flows can be exported and imported as JSON files.
-:::caution
+
Watch out for API keys being stored in local files.
-:::
+
+
---
diff --git a/docs/docs/guidelines/prompt-customization.mdx b/docs/docs/guidelines/prompt-customization.mdx
index 8e2f409f9..efb5b3928 100644
--- a/docs/docs/guidelines/prompt-customization.mdx
+++ b/docs/docs/guidelines/prompt-customization.mdx
@@ -7,80 +7,62 @@ import ReactPlayer from "react-player";
The prompt template allows users to create prompts and define variables that provide control over instructing the model.
-
-
-
+{" "}
+
Variables can be used to define instructions, questions, context, inputs, or examples for the model and can be created with any chosen name in curly brackets, e.g., `{variable_name}`. They act as placeholders for parts of the text that can be easily modified.
-
-
-
+{" "}
+
Once inserted, these variables are immediately recognized as new fields in the prompt component. Here, you can define their values within the component itself or leave a field empty to be adjusted over the chat interface.
-
-
-
+{" "}
+
+
You can also use documents or output parsers as prompt variables. By plugging them into prompt handles, theyโll disable and feed that input field.
-
-
-
-
+{" "}
+
With this, users can interact with documents, webpages, or any other type of content directly from the prompt, which allows for seamless integration of external resources with the language model.
-
-
If working with an interactive (chat-like) flow, remember to keep one of the input variables empty to behave as the chat input.
-
-
-
-
+{" "}
+
diff --git a/docs/docs/guides/chatprompttemplate_guide.mdx b/docs/docs/guides/chatprompttemplate_guide.mdx
index 422bb6420..05a8f3333 100644
--- a/docs/docs/guides/chatprompttemplate_guide.mdx
+++ b/docs/docs/guides/chatprompttemplate_guide.mdx
@@ -39,8 +39,7 @@ In this guide, we will modify the "Basic Chat with Prompt and History" example,
5. Open the "Prompt" field on the SystemMessagePromptTemplate component.
-6. Enter the text: `You are a {role} that {behavior}.`
-
+6. Enter the text: _`You are a {role} that {behavior}.`_
7. Save your changes by clicking on "Check & Save".
8. Define the 'role' variable by typing "obedient assistant".
diff --git a/docs/docs/index.mdx b/docs/docs/index.mdx
index 4ec4a300d..7be04549c 100644
--- a/docs/docs/index.mdx
+++ b/docs/docs/index.mdx
@@ -6,13 +6,11 @@ import ThemedImage from "@theme/ThemedImage";
import useBaseUrl from "@docusaurus/useBaseUrl";
import ZoomableImage from "/src/theme/ZoomableImage.js";
-
-
-
+{" "}
+
diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js
index 3ac152b5b..617aec3d0 100644
--- a/docs/docusaurus.config.js
+++ b/docs/docusaurus.config.js
@@ -1,127 +1,145 @@
const lightCodeTheme = require("prism-react-renderer/themes/github");
+const { remarkCodeHike } = require("@code-hike/mdx");
// With JSDoc @type annotations, IDEs can provide config autocompletion
/** @type {import('@docusaurus/types').DocusaurusConfig} */
-(
- module.exports = {
- title: "Langflow Documentation",
- tagline: "Langflow is a GUI for LangChain, designed with react-flow",
- favicon: "img/favicon.ico",
- url: "https://logspace-ai.github.io",
- baseUrl: "/",
- onBrokenLinks: "throw",
- onBrokenMarkdownLinks: "warn",
- organizationName: "logspace-ai",
- projectName: "langflow",
- trailingSlash: false,
- customFields: {
- mendableAnonKey: process.env.MENDABLE_ANON_KEY,
- },
- i18n: {
- defaultLocale: "en",
- locales: ["en"],
- },
- presets: [
- [
- "@docusaurus/preset-classic",
- /** @type {import('@docusaurus/preset-classic').Options} */
- ({
- docs: {
- routeBasePath: "/",
- sidebarPath: require.resolve("./sidebars.js"),
- path: "docs",
- // sidebarPath: 'sidebars.js',
- },
- theme: {
- customCss: require.resolve("./src/css/custom.css"),
- },
- }),
- ],
- ],
- plugins: [
- ["docusaurus-node-polyfills", { excludeAliases: ["console"] }],
- "docusaurus-plugin-image-zoom",
- // ....
- async function myPlugin(context, options) {
- return {
- name: "docusaurus-tailwindcss",
- configurePostCss(postcssOptions) {
- // Appends TailwindCSS and AutoPrefixer.
- postcssOptions.plugins.push(require("tailwindcss"));
- postcssOptions.plugins.push(require("autoprefixer"));
- return postcssOptions;
- },
- };
- },
- ],
- themeConfig:
- /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
+module.exports = {
+ title: "Langflow Documentation",
+ tagline: "Langflow is a GUI for LangChain, designed with react-flow",
+ favicon: "img/favicon.ico",
+ url: "https://logspace-ai.github.io",
+ baseUrl: "/",
+ onBrokenLinks: "throw",
+ onBrokenMarkdownLinks: "warn",
+ organizationName: "logspace-ai",
+ projectName: "langflow",
+ trailingSlash: false,
+ customFields: {
+ mendableAnonKey: process.env.MENDABLE_ANON_KEY,
+ },
+ i18n: {
+ defaultLocale: "en",
+ locales: ["en"],
+ },
+ presets: [
+ [
+ "@docusaurus/preset-classic",
+ /** @type {import('@docusaurus/preset-classic').Options} */
({
- navbar: {
- hideOnScroll: true,
- title: "Langflow",
- logo: {
- alt: "Langflow",
- src: "img/chain.png",
- },
- items: [
- // right
- {
- position: "right",
- href: "https://github.com/logspace-ai/langflow",
- position: "right",
- className: "header-github-link",
- target: "_blank",
- rel: null,
- },
- {
- position: "right",
- href: "https://twitter.com/logspace_ai",
- position: "right",
- className: "header-twitter-link",
- target: "_blank",
- rel: null,
- },
- {
- position: "right",
- href: "https://discord.gg/EqksyE2EX9",
- position: "right",
- className: "header-discord-link",
- target: "_blank",
- rel: null,
- },
+ docs: {
+ beforeDefaultRemarkPlugins: [
+ [
+ remarkCodeHike,
+ {
+ theme: "github-light",
+ showCopyButton: true,
+ lineNumbers: true,
+ },
+ ],
+ ],
+ routeBasePath: "/",
+ sidebarPath: require.resolve("./sidebars.js"),
+ path: "docs",
+ // sidebarPath: 'sidebars.js',
+ },
+ theme: {
+ customCss: [
+ require.resolve("@code-hike/mdx/styles.css"),
+ require.resolve("./src/css/custom.css"),
],
},
- tableOfContents: {
- minHeadingLevel: 2,
- maxHeadingLevel: 5,
- },
- colorMode: {
- defaultMode: "light",
- disableSwitch: true,
- respectPrefersColorScheme: false,
- },
- announcementBar: {
- content:
- 'โญ๏ธ If you like โ๏ธLangflow, star it on
GitHub ! โญ๏ธ',
- backgroundColor: "#B53D38", //Mustard Yellow #D19900 #D4B20B - Salmon #E9967A
- textColor: "#fff",
- isCloseable: false,
- },
- footer: {
- links: [],
- copyright: `Copyright ยฉ ${new Date().getFullYear()} Logspace.`,
- },
- zoom: {
- selector: ".markdown :not(a) > img:not(.no-zoom)",
- background: {
- light: "rgba(240, 240, 240, 0.9)",
- },
- config: {},
- },
- prism: {
- theme: lightCodeTheme,
- },
}),
- }
-);
+ ],
+ ],
+ plugins: [
+ ["docusaurus-node-polyfills", { excludeAliases: ["console"] }],
+ "docusaurus-plugin-image-zoom",
+ // ....
+ async function myPlugin(context, options) {
+ return {
+ name: "docusaurus-tailwindcss",
+ configurePostCss(postcssOptions) {
+ // Appends TailwindCSS and AutoPrefixer.
+ postcssOptions.plugins.push(require("tailwindcss"));
+ postcssOptions.plugins.push(require("autoprefixer"));
+ return postcssOptions;
+ },
+ };
+ },
+ ],
+ themes: ["mdx-v2"],
+ themeConfig:
+ /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
+ ({
+ navbar: {
+ hideOnScroll: true,
+ title: "Langflow",
+ logo: {
+ alt: "Langflow",
+ src: "img/chain.png",
+ },
+ items: [
+ // right
+ {
+ position: "right",
+ href: "https://github.com/logspace-ai/langflow",
+ position: "right",
+ className: "header-github-link",
+ target: "_blank",
+ rel: null,
+ },
+ {
+ position: "right",
+ href: "https://twitter.com/logspace_ai",
+ position: "right",
+ className: "header-twitter-link",
+ target: "_blank",
+ rel: null,
+ },
+ {
+ position: "right",
+ href: "https://discord.gg/EqksyE2EX9",
+ position: "right",
+ className: "header-discord-link",
+ target: "_blank",
+ rel: null,
+ },
+ ],
+ },
+ tableOfContents: {
+ minHeadingLevel: 2,
+ maxHeadingLevel: 5,
+ },
+ colorMode: {
+ defaultMode: "light",
+ disableSwitch: true,
+ respectPrefersColorScheme: false,
+ },
+ announcementBar: {
+ content:
+ 'โญ๏ธ If you like โ๏ธLangflow, star it on
GitHub ! โญ๏ธ',
+ backgroundColor: "#E8EBF1", //Mustard Yellow #D19900 #D4B20B - Salmon #E9967A
+ textColor: "#1C1E21",
+ isCloseable: false,
+ },
+ footer: {
+ links: [],
+ copyright: `Copyright ยฉ ${new Date().getFullYear()} Logspace.`,
+ },
+ zoom: {
+ selector: ".markdown :not(a) > img:not(.no-zoom)",
+ background: {
+ light: "rgba(240, 240, 240, 0.9)",
+ },
+ config: {},
+ },
+ // prism: {
+ // theme: require("prism-react-renderer/themes/dracula"),
+ // },
+ docs: {
+ sidebar: {
+ hideable: true,
+ },
+ },
+ }),
+};
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 7db7f9376..ed79230c6 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -9,12 +9,13 @@
"version": "0.0.0",
"dependencies": {
"@babel/preset-react": "^7.22.3",
+ "@code-hike/mdx": "^0.9.0",
"@docusaurus/core": "2.4.1",
"@docusaurus/plugin-ideal-image": "^2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-classic": "^2.4.1",
"@docusaurus/theme-search-algolia": "^2.4.1",
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^2.3.0",
"@mendable/search": "^0.0.114",
"@pbe/react-yandex-maps": "^1.2.4",
"@prismicio/client": "^7.0.1",
@@ -22,6 +23,7 @@
"autoprefixer": "^10.4.14",
"clsx": "^1.2.1",
"docusaurus-plugin-image-zoom": "^0.1.4",
+ "docusaurus-theme-mdx-v2": "^0.1.2",
"jquery": "^3.7.0",
"medium-zoom": "^1.0.8",
"node-fetch": "^3.3.1",
@@ -1986,6 +1988,49 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@code-hike/lighter": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@code-hike/lighter/-/lighter-0.7.0.tgz",
+ "integrity": "sha512-64O07rIORKQLB+5T/GKAmKcD9sC0N9yHFJXa0Hs+0Aee1G+I4bSXxTccuDFP6c/G/3h5Pk7yv7PoX9/SpzaeiQ==",
+ "funding": {
+ "url": "https://github.com/code-hike/lighter?sponsor=1"
+ }
+ },
+ "node_modules/@code-hike/mdx": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@code-hike/mdx/-/mdx-0.9.0.tgz",
+ "integrity": "sha512-0wg68ZCjVWAkWT4gBUZJ8Mwktjen/XeWyqBQCrhA2IZSbZZnMYsEI6JJEFb/nZoNI3comB3JdxPLykZRq3qT2A==",
+ "dependencies": {
+ "@code-hike/lighter": "0.7.0",
+ "node-fetch": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/code-hike"
+ },
+ "peerDependencies": {
+ "react": "^16.8.3 || ^17 || ^18"
+ }
+ },
+ "node_modules/@code-hike/mdx/node_modules/node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -2683,6 +2728,18 @@
"react-dom": "^16.8.4 || ^17.0.0"
}
},
+ "node_modules/@docusaurus/theme-classic/node_modules/@mdx-js/react": {
+ "version": "1.6.22",
+ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz",
+ "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "react": "^16.13.1 || ^17.0.0"
+ }
+ },
"node_modules/@docusaurus/theme-common": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.1.tgz",
@@ -3168,15 +3225,19 @@
}
},
"node_modules/@mdx-js/react": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz",
- "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz",
+ "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==",
+ "dependencies": {
+ "@types/mdx": "^2.0.0",
+ "@types/react": ">=16"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
},
"peerDependencies": {
- "react": "^16.13.1 || ^17.0.0"
+ "react": ">=16"
}
},
"node_modules/@mdx-js/util": {
@@ -3665,6 +3726,14 @@
"node": ">=10.13.0"
}
},
+ "node_modules/@types/acorn": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+ "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/body-parser": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
@@ -3730,6 +3799,14 @@
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
"integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
},
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz",
+ "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/express": {
"version": "4.17.17",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
@@ -3817,6 +3894,11 @@
"@types/unist": "^2"
}
},
+ "node_modules/@types/mdx": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz",
+ "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg=="
+ },
"node_modules/@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
@@ -4198,6 +4280,14 @@
"acorn": "^8"
}
},
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
@@ -4502,6 +4592,14 @@
"util": "^0.12.0"
}
},
+ "node_modules/astring": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
+ "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
+ "bin": {
+ "astring": "bin/astring"
+ }
+ },
"node_modules/async-foreach": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
@@ -5391,6 +5489,15 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
@@ -6884,6 +6991,296 @@
"node": ">=6"
}
},
+ "node_modules/docusaurus-mdx-loader-v2": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/docusaurus-mdx-loader-v2/-/docusaurus-mdx-loader-v2-0.1.2.tgz",
+ "integrity": "sha512-Dd/XieCKKoirnJDou4h33zRZPCmbtSqvXrZm0yMmhCpLDpeScu8CBvveFVHCqs7UB+x82IpzgZX5rHkoFlz2Bw==",
+ "dependencies": {
+ "@babel/parser": "^7.17.3",
+ "@babel/traverse": "^7.17.3",
+ "@docusaurus/logger": "2.0.0-beta.18",
+ "@docusaurus/utils": "2.0.0-beta.18",
+ "@mdx-js/mdx": "^2.1.0",
+ "escape-html": "^1.0.3",
+ "estree-util-value-to-estree": "^1.3.0",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^10.0.1",
+ "image-size": "^1.0.1",
+ "lz-string": "^1.4.4",
+ "mdast-util-to-string": "^2.0.0",
+ "remark-admonitions": "^1.2.1",
+ "remark-emoji": "^2.1.0",
+ "remark-gfm": "1.0.0",
+ "stringify-object": "^3.3.0",
+ "tslib": "^2.3.1",
+ "unist-util-visit": "^2.0.2",
+ "url-loader": "^4.1.1",
+ "webpack": "^5.69.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.4 || ^17.0.0",
+ "react-dom": "^16.8.4 || ^17.0.0"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/@docusaurus/logger": {
+ "version": "2.0.0-beta.18",
+ "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.18.tgz",
+ "integrity": "sha512-frNe5vhH3mbPmH980Lvzaz45+n1PQl3TkslzWYXQeJOkFX17zUd3e3U7F9kR1+DocmAqHkgAoWuXVcvEoN29fg==",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "tslib": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/@docusaurus/utils": {
+ "version": "2.0.0-beta.18",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.18.tgz",
+ "integrity": "sha512-v2vBmH7xSbPwx3+GB90HgLSQdj+Rh5ELtZWy7M20w907k0ROzDmPQ/8Ke2DK3o5r4pZPGnCrsB3SaYI83AEmAA==",
+ "dependencies": {
+ "@docusaurus/logger": "2.0.0-beta.18",
+ "@svgr/webpack": "^6.2.1",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^10.0.1",
+ "github-slugger": "^1.4.0",
+ "globby": "^11.1.0",
+ "gray-matter": "^4.0.3",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "micromatch": "^4.0.5",
+ "resolve-pathname": "^3.0.0",
+ "shelljs": "^0.8.5",
+ "tslib": "^2.3.1",
+ "url-loader": "^4.1.1",
+ "webpack": "^5.70.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/@mdx-js/mdx": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz",
+ "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/mdx": "^2.0.0",
+ "estree-util-build-jsx": "^2.0.0",
+ "estree-util-is-identifier-name": "^2.0.0",
+ "estree-util-to-js": "^1.1.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-estree": "^2.0.0",
+ "markdown-extensions": "^1.0.0",
+ "periscopic": "^3.0.0",
+ "remark-mdx": "^2.0.0",
+ "remark-parse": "^10.0.0",
+ "remark-rehype": "^10.0.0",
+ "unified": "^10.0.0",
+ "unist-util-position-from-estree": "^1.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "unist-util-visit": "^4.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/@mdx-js/mdx/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/remark-mdx": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz",
+ "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==",
+ "dependencies": {
+ "mdast-util-mdx": "^2.0.0",
+ "micromark-extension-mdxjs": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/vfile": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+ "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/docusaurus-mdx-loader-v2/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/docusaurus-node-polyfills": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/docusaurus-node-polyfills/-/docusaurus-node-polyfills-1.0.0.tgz",
@@ -6906,6 +7303,18 @@
"medium-zoom": "^1.0.6"
}
},
+ "node_modules/docusaurus-theme-mdx-v2": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/docusaurus-theme-mdx-v2/-/docusaurus-theme-mdx-v2-0.1.2.tgz",
+ "integrity": "sha512-n5L4nx0LV5coTkZYS+owXmM0ACXWCbd4ou7aDrWIMm3YH7XPusSNelJpYsUKJxHFER/+czitbmieboFe4I7lMQ==",
+ "dependencies": {
+ "@mdx-js/react": "^2.1.0",
+ "docusaurus-mdx-loader-v2": "0.1.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/dom-converter": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
@@ -7247,6 +7656,106 @@
"node": ">=4.0"
}
},
+ "node_modules/estree-util-attach-comments": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz",
+ "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-build-jsx": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz",
+ "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "estree-util-is-identifier-name": "^2.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-is-identifier-name": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz",
+ "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz",
+ "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/estree-util-value-to-estree": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz",
+ "integrity": "sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==",
+ "dependencies": {
+ "is-plain-obj": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/estree-util-value-to-estree/node_modules/is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/estree-util-visit": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz",
+ "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -8606,6 +9115,88 @@
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
+ "node_modules/hast-util-to-estree": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz",
+ "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "estree-util-attach-comments": "^2.0.0",
+ "estree-util-is-identifier-name": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "mdast-util-mdx-expression": "^1.0.0",
+ "mdast-util-mdxjs-esm": "^1.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.1",
+ "unist-util-position": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/property-information": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz",
+ "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/style-to-object": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz",
+ "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==",
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/unist-util-position": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
+ "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-estree/node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/hast-util-to-parse5": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz",
@@ -8622,6 +9213,15 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
+ "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hastscript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
@@ -9472,6 +10072,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-reference": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz",
+ "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/is-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
@@ -9952,6 +10560,15 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
},
+ "node_modules/longest-streak": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -9987,6 +10604,14 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -10058,6 +10683,26 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/markdown-extensions": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz",
+ "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz",
+ "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==",
+ "dependencies": {
+ "repeat-string": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -10093,6 +10738,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz",
+ "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==",
+ "dependencies": {
+ "escape-string-regexp": "^4.0.0",
+ "unist-util-is": "^4.0.0",
+ "unist-util-visit-parents": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdast-util-from-markdown": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
@@ -10128,6 +10787,652 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-util-gfm": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
+ "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
+ "dependencies": {
+ "mdast-util-gfm-autolink-literal": "^0.1.0",
+ "mdast-util-gfm-strikethrough": "^0.2.0",
+ "mdast-util-gfm-table": "^0.1.0",
+ "mdast-util-gfm-task-list-item": "^0.1.0",
+ "mdast-util-to-markdown": "^0.6.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
+ "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
+ "dependencies": {
+ "ccount": "^1.0.0",
+ "mdast-util-find-and-replace": "^1.1.0",
+ "micromark": "^2.11.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
+ "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
+ "dependencies": {
+ "mdast-util-to-markdown": "^0.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
+ "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
+ "dependencies": {
+ "markdown-table": "^2.0.0",
+ "mdast-util-to-markdown": "~0.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
+ "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
+ "dependencies": {
+ "mdast-util-to-markdown": "~0.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz",
+ "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-mdx-expression": "^1.0.0",
+ "mdast-util-mdx-jsx": "^2.0.0",
+ "mdast-util-mdxjs-esm": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz",
+ "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz",
+ "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "ccount": "^2.0.0",
+ "mdast-util-from-markdown": "^1.1.0",
+ "mdast-util-to-markdown": "^1.3.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-remove-position": "^4.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
+ "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-remove-position": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz",
+ "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx/node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz",
+ "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdast-util-to-hast": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
@@ -10147,6 +11452,23 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-util-to-markdown": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
+ "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^2.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "parse-entities": "^2.0.0",
+ "repeat-string": "^1.0.0",
+ "zwitch": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdast-util-to-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
@@ -10326,6 +11648,298 @@
"uvu": "^0.5.0"
}
},
+ "node_modules/micromark-extension-gfm": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz",
+ "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==",
+ "dependencies": {
+ "micromark": "~2.11.0",
+ "micromark-extension-gfm-autolink-literal": "~0.5.0",
+ "micromark-extension-gfm-strikethrough": "~0.6.5",
+ "micromark-extension-gfm-table": "~0.4.0",
+ "micromark-extension-gfm-tagfilter": "~0.3.0",
+ "micromark-extension-gfm-task-list-item": "~0.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz",
+ "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==",
+ "dependencies": {
+ "micromark": "~2.11.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz",
+ "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==",
+ "dependencies": {
+ "micromark": "~2.11.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz",
+ "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==",
+ "dependencies": {
+ "micromark": "~2.11.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz",
+ "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz",
+ "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==",
+ "dependencies": {
+ "micromark": "~2.11.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-expression": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz",
+ "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "micromark-factory-mdx-expression": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-events-to-acorn": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz",
+ "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==",
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "estree-util-is-identifier-name": "^2.0.0",
+ "micromark-factory-mdx-expression": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-md": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz",
+ "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==",
+ "dependencies": {
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz",
+ "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==",
+ "dependencies": {
+ "acorn": "^8.0.0",
+ "acorn-jsx": "^5.0.0",
+ "micromark-extension-mdx-expression": "^1.0.0",
+ "micromark-extension-mdx-jsx": "^1.0.0",
+ "micromark-extension-mdx-md": "^1.0.0",
+ "micromark-extension-mdxjs-esm": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz",
+ "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "micromark-core-commonmark": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-events-to-acorn": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "unist-util-position-from-estree": "^1.1.0",
+ "uvu": "^0.5.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/micromark-factory-destination": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz",
@@ -10367,6 +11981,44 @@
"uvu": "^0.5.0"
}
},
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz",
+ "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-events-to-acorn": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "unist-util-position-from-estree": "^1.0.0",
+ "uvu": "^0.5.0",
+ "vfile-message": "^3.0.0"
+ }
+ },
+ "node_modules/micromark-factory-mdx-expression/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/micromark-factory-space": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
@@ -10558,6 +12210,44 @@
}
]
},
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz",
+ "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^2.0.0",
+ "estree-util-visit": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0",
+ "vfile-message": "^3.0.0"
+ }
+ },
+ "node_modules/micromark-util-events-to-acorn/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/micromark-util-html-tag-name": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz",
@@ -12117,6 +13807,16 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
"integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg=="
},
+ "node_modules/periscopic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "is-reference": "^3.0.0"
+ }
+ },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -13957,6 +15657,56 @@
"jsesc": "bin/jsesc"
}
},
+ "node_modules/rehype-parse": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz",
+ "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==",
+ "dependencies": {
+ "hast-util-from-parse5": "^5.0.0",
+ "parse5": "^5.0.0",
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse/node_modules/hast-util-from-parse5": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz",
+ "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==",
+ "dependencies": {
+ "ccount": "^1.0.3",
+ "hastscript": "^5.0.0",
+ "property-information": "^5.0.0",
+ "web-namespaces": "^1.1.2",
+ "xtend": "^4.0.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse/node_modules/hastscript": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz",
+ "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==",
+ "dependencies": {
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-parse-selector": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse/node_modules/parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
+ },
"node_modules/relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -13965,6 +15715,40 @@
"node": ">= 0.10"
}
},
+ "node_modules/remark-admonitions": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz",
+ "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==",
+ "dependencies": {
+ "rehype-parse": "^6.0.2",
+ "unified": "^8.4.2",
+ "unist-util-visit": "^2.0.1"
+ }
+ },
+ "node_modules/remark-admonitions/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/remark-admonitions/node_modules/unified": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz",
+ "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==",
+ "dependencies": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/remark-emoji": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz",
@@ -13984,6 +15768,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/remark-gfm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz",
+ "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==",
+ "dependencies": {
+ "mdast-util-gfm": "^0.1.0",
+ "micromark-extension-gfm": "^0.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/remark-mdx": {
"version": "1.6.22",
"resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
@@ -14206,6 +16003,189 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/remark-rehype": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-hast": "^12.1.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/mdast-util-definitions": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
+ "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/mdast-util-to-hast": {
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
+ "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-definitions": "^5.0.0",
+ "micromark-util-sanitize-uri": "^1.1.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-generated": "^2.0.0",
+ "unist-util-position": "^4.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unist-util-generated": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
+ "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unist-util-position": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
+ "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/vfile": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+ "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype/node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/remark-squeeze-paragraphs": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
@@ -15445,6 +17425,28 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz",
+ "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stringify-entities/node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/stringify-object": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
@@ -16033,6 +18035,15 @@
"integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==",
"deprecated": "Use String.prototype.trim() instead"
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/trim-newlines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
@@ -16441,6 +18452,18 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-position-from-estree": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz",
+ "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-remove": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz",
diff --git a/docs/package.json b/docs/package.json
index c7732b3dc..856e66ebe 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -15,12 +15,13 @@
},
"dependencies": {
"@babel/preset-react": "^7.22.3",
+ "@code-hike/mdx": "^0.9.0",
"@docusaurus/core": "2.4.1",
"@docusaurus/plugin-ideal-image": "^2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-classic": "^2.4.1",
"@docusaurus/theme-search-algolia": "^2.4.1",
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^2.3.0",
"@mendable/search": "^0.0.114",
"@pbe/react-yandex-maps": "^1.2.4",
"@prismicio/client": "^7.0.1",
@@ -28,6 +29,7 @@
"autoprefixer": "^10.4.14",
"clsx": "^1.2.1",
"docusaurus-plugin-image-zoom": "^0.1.4",
+ "docusaurus-theme-mdx-v2": "^0.1.2",
"jquery": "^3.7.0",
"medium-zoom": "^1.0.8",
"node-fetch": "^3.3.1",
@@ -67,4 +69,4 @@
"engines": {
"node": ">=16.14"
}
-}
\ No newline at end of file
+}
diff --git a/docs/sidebars.js b/docs/sidebars.js
index 872f39a26..fbabab150 100644
--- a/docs/sidebars.js
+++ b/docs/sidebars.js
@@ -21,6 +21,8 @@ module.exports = {
"guidelines/collection",
"guidelines/prompt-customization",
"guidelines/chat-interface",
+ "guidelines/chat-widget",
+ "guidelines/custom-component",
],
},
{
@@ -30,6 +32,7 @@ module.exports = {
items: [
"components/agents",
"components/chains",
+ "components/custom",
"components/embeddings",
"components/llms",
"components/loaders",
@@ -64,6 +67,7 @@ module.exports = {
label: "Examples",
collapsed: false,
items: [
+ "examples/flow-runner",
"examples/conversation-chain",
"examples/buffer-memory",
"examples/midjourney-prompt-chain",
diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css
index 2f6f992f3..b79c4df59 100644
--- a/docs/src/css/custom.css
+++ b/docs/src/css/custom.css
@@ -3,17 +3,19 @@
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
- :root {
+:root {
--ifm-background-color: var(--token-primary-bg-c);
--ifm-navbar-link-hover-color: initial;
--ifm-navbar-padding-vertical: 0;
--ifm-navbar-item-padding-vertical: 0;
- --ifm-font-family-base: -apple-system, BlinkMacSystemFont, Inter, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI emoji';
- --ifm-font-family-monospace: 'SFMono-Regular', 'Roboto Mono', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
+ --ifm-font-family-base: -apple-system, BlinkMacSystemFont, Inter, Helvetica,
+ Arial, sans-serif, "Apple Color Emoji", "Segoe UI emoji";
+ --ifm-font-family-monospace: "SFMono-Regular", "Roboto Mono", Consolas,
+ "Liberation Mono", Menlo, Courier, monospace;
}
.theme-doc-sidebar-item-category.menu__list-item:not(:first-child) {
- margin-top: 1.5rem!important;
+ margin-top: 1.5rem !important;
}
.docusaurus-highlight-code-line {
@@ -31,7 +33,7 @@
transform: skewY(6deg);
}
-[class^='announcementBar'] {
+[class^="announcementBar"] {
z-index: 10;
}
@@ -112,7 +114,7 @@ body {
}
.header-github-link:before {
- content: '';
+ content: "";
width: 24px;
height: 24px;
display: flex;
@@ -126,7 +128,7 @@ body {
}
.header-twitter-link::before {
- content: '';
+ content: "";
width: 24px;
height: 24px;
display: flex;
@@ -140,7 +142,7 @@ body {
}
.header-discord-link::before {
- content: '';
+ content: "";
width: 24px;
height: 24px;
display: flex;
@@ -148,7 +150,6 @@ body {
background-size: contain;
}
-
/* Images */
.image-rendering-crisp {
image-rendering: crisp-edges;
@@ -164,7 +165,7 @@ body {
.img-center {
display: flex;
justify-content: center;
- width: 100%,
+ width: 100%;
}
.resized-image {
@@ -188,4 +189,22 @@ body {
.mendable-search {
width: 140px;
}
-}
\ No newline at end of file
+}
+/*
+.ch-scrollycoding {
+ gap: 10rem !important;
+} */
+
+.ch-scrollycoding-content {
+ max-width: 55% !important;
+ min-width: 40% !important;
+}
+
+.ch-scrollycoding-sticker {
+ max-width: 60% !important;
+ min-width: 45% !important;
+}
+
+.ch-scrollycoding-step-content {
+ min-height: 70px;
+}
diff --git a/docs/src/theme/ZoomableImage.js b/docs/src/theme/ZoomableImage.js
index 750066bb7..aeeb0454a 100644
--- a/docs/src/theme/ZoomableImage.js
+++ b/docs/src/theme/ZoomableImage.js
@@ -1,8 +1,9 @@
-import React, { useState, useEffect } from 'react';
-import ThemedImage from '@theme/ThemedImage';
-import useBaseUrl from '@docusaurus/useBaseUrl';
+import React, { useState, useEffect } from "react";
+import ThemedImage from "@theme/ThemedImage";
+import useBaseUrl from "@docusaurus/useBaseUrl";
-const ZoomableImage = ({ alt, sources }) => {
+const ZoomableImage = ({ alt, sources, style }) => {
+ // add style here
const [isFullscreen, setIsFullscreen] = useState(false);
const toggleFullscreen = () => {
@@ -10,27 +11,36 @@ const ZoomableImage = ({ alt, sources }) => {
};
const handleKeyPress = (event) => {
- if (event.key === 'Escape') {
+ if (event.key === "Escape") {
setIsFullscreen(false);
}
};
useEffect(() => {
if (isFullscreen) {
- document.addEventListener('keydown', handleKeyPress);
+ document.addEventListener("keydown", handleKeyPress);
} else {
- document.removeEventListener('keydown', handleKeyPress);
+ document.removeEventListener("keydown", handleKeyPress);
}
return () => {
- document.removeEventListener('keydown', handleKeyPress);
+ document.removeEventListener("keydown", handleKeyPress);
};
}, [isFullscreen]);
+ // Default style
+ const defaultStyle = {
+ width: "50%",
+ margin: "0 auto",
+ display: "flex",
+ justifyContent: "center",
+ };
+
return (
=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz",
+ "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz",
+ "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.9",
+ "@babel/helper-compilation-targets": "^7.22.9",
+ "@babel/helper-module-transforms": "^7.22.9",
+ "@babel/helpers": "^7.22.6",
+ "@babel/parser": "^7.22.7",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.8",
+ "@babel/types": "^7.22.5",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz",
+ "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz",
+ "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.5",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
+ "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
+ "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+ "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
+ "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.6",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+ "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
+ "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
+ "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.22.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz",
+ "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.7",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.7",
+ "@babel/types": "^7.22.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
+ "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.0.0.tgz",
+ "integrity": "sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-preset": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.0.0.tgz",
+ "integrity": "sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==",
+ "dev": true,
+ "dependencies": {
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.0.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/cli": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/cli/-/cli-8.0.1.tgz",
+ "integrity": "sha512-o8CLcozNalKz4c2wFyldaWCQYj5UwXhB2S9ZaR0iZGY2FrU30qzwG1QdtTBTiR6g13udqAPGwDi91Re1QICIKQ==",
+ "dev": true,
+ "dependencies": {
+ "@svgr/core": "8.0.0",
+ "@svgr/plugin-jsx": "8.0.1",
+ "@svgr/plugin-prettier": "8.0.1",
+ "@svgr/plugin-svgo": "8.0.1",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.1.2",
+ "commander": "^9.4.1",
+ "dashify": "^2.0.0",
+ "glob": "^8.0.3",
+ "snake-case": "^3.0.4"
+ },
+ "bin": {
+ "svgr": "bin/svgr"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/core": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.0.0.tgz",
+ "integrity": "sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/plugin-jsx": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.0.1.tgz",
+ "integrity": "sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/plugin-prettier": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-prettier/-/plugin-prettier-8.0.1.tgz",
+ "integrity": "sha512-5ukxApPhNM5JvA91azPGSNp0FtmYXgCiTF8DZtEoM1X4FcPSoN5Pbi930lb226XDO/RtMFy0C8yyFUZ90K8U3A==",
+ "dev": true,
+ "dependencies": {
+ "deepmerge": "^4.3.1",
+ "prettier": "^2.8.7"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/plugin-svgo": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.0.1.tgz",
+ "integrity": "sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001515",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz",
+ "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "dependencies": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ },
+ "node_modules/dashify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dashify/-/dashify-2.0.0.tgz",
+ "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.457",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz",
+ "integrity": "sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==",
+ "dev": true
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true
+ },
+ "node_modules/svgo": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+ "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.2.1",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/svgo/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+ "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==",
+ "dev": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..b80f86e35
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "devDependencies": {
+ "@svgr/cli": "^8.0.1"
+ }
+}
diff --git a/poetry.lock b/poetry.lock
index 8ebef939f..b53c4820e 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,10 +1,9 @@
-# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
[[package]]
name = "aiofiles"
version = "23.1.0"
description = "File support for asyncio."
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -16,7 +15,6 @@ files = [
name = "aiohttp"
version = "3.8.5"
description = "Async http client/server framework (asyncio)"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -125,7 +123,6 @@ speedups = ["Brotli", "aiodns", "cchardet"]
name = "aiosignal"
version = "1.3.1"
description = "aiosignal: a list of registered asynchronous callbacks"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -140,7 +137,6 @@ frozenlist = ">=1.1.0"
name = "aiostream"
version = "0.4.5"
description = "Generator-based operators for asynchronous iteration"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -150,14 +146,13 @@ files = [
[[package]]
name = "anthropic"
-version = "0.3.5"
+version = "0.3.7"
description = "Client library for the anthropic API"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
- {file = "anthropic-0.3.5-py3-none-any.whl", hash = "sha256:38a0aeef126092e1f84e46a8982a552c5de3ec643582ad39fc68a07dde7d2acd"},
- {file = "anthropic-0.3.5.tar.gz", hash = "sha256:ec0488232d19a4c048ee2ddd135de31d62c549f2d169891a6d0a05947335474a"},
+ {file = "anthropic-0.3.7-py3-none-any.whl", hash = "sha256:ca57635d7f13d609aa8a5b93a834e067760d96b9657bdf81e0c7444ddf41fc64"},
+ {file = "anthropic-0.3.7.tar.gz", hash = "sha256:0453f80ba8224364c8b0dae0b5088becd67277de57708d7b887ebb6c2ceb3c49"},
]
[package.dependencies]
@@ -172,7 +167,6 @@ typing-extensions = ">=4.1.1,<5"
name = "anyio"
version = "3.7.1"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -194,7 +188,6 @@ trio = ["trio (<0.22)"]
name = "appdirs"
version = "1.4.4"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -206,7 +199,6 @@ files = [
name = "appnope"
version = "0.1.3"
description = "Disable App Nap on macOS >= 10.9"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -218,7 +210,6 @@ files = [
name = "argilla"
version = "0.0.1"
description = ""
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -230,7 +221,6 @@ files = [
name = "asgiref"
version = "3.7.2"
description = "ASGI specs, helper code, and adapters"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -248,7 +238,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"]
name = "asttokens"
version = "2.2.1"
description = "Annotate AST trees with source code positions"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -266,7 +255,6 @@ test = ["astroid", "pytest"]
name = "async-timeout"
version = "4.0.2"
description = "Timeout context manager for asyncio programs"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -278,7 +266,6 @@ files = [
name = "attrs"
version = "23.1.0"
description = "Classes Without Boilerplate"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -297,7 +284,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
name = "authlib"
version = "1.2.1"
description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -312,7 +298,6 @@ cryptography = ">=3.2"
name = "backcall"
version = "0.2.0"
description = "Specifications for callback functions passed in to an API"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -324,7 +309,6 @@ files = [
name = "backoff"
version = "2.2.1"
description = "Function decoration for backoff and retry"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -336,7 +320,6 @@ files = [
name = "beautifulsoup4"
version = "4.12.2"
description = "Screen-scraping library"
-category = "main"
optional = false
python-versions = ">=3.6.0"
files = [
@@ -355,7 +338,6 @@ lxml = ["lxml"]
name = "black"
version = "23.7.0"
description = "The uncompromising code formatter."
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -402,7 +384,6 @@ uvloop = ["uvloop (>=0.15.2)"]
name = "bleach"
version = "6.0.0"
description = "An easy safelist-based HTML-sanitizing tool."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -421,7 +402,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"]
name = "cachetools"
version = "5.3.1"
description = "Extensible memoizing collections and decorators"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -431,21 +411,19 @@ files = [
[[package]]
name = "certifi"
-version = "2023.5.7"
+version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
- {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
+ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
[[package]]
name = "cffi"
version = "1.15.1"
description = "Foreign Function Interface for Python calling C code."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -520,21 +498,19 @@ pycparser = "*"
[[package]]
name = "chardet"
-version = "5.1.0"
+version = "5.2.0"
description = "Universal encoding detector for Python 3"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"},
- {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"},
+ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"},
+ {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"},
]
[[package]]
name = "charset-normalizer"
version = "3.2.0"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -619,7 +595,6 @@ files = [
name = "chromadb"
version = "0.3.26"
description = "Chroma."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -649,7 +624,6 @@ uvicorn = {version = ">=0.18.3", extras = ["standard"]}
name = "click"
version = "8.1.6"
description = "Composable command line interface toolkit"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -664,7 +638,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
name = "click-log"
version = "0.4.0"
description = "Logging integration for Click"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -679,7 +652,6 @@ click = "*"
name = "clickhouse-connect"
version = "0.6.8"
description = "ClickHouse Database Core Driver for Python, Pandas, and Superset"
-category = "main"
optional = false
python-versions = "~=3.7"
files = [
@@ -767,14 +739,13 @@ sqlalchemy = ["sqlalchemy (>1.3.21,<2.0)"]
[[package]]
name = "cohere"
-version = "4.16.0"
+version = "4.17.0"
description = ""
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
- {file = "cohere-4.16.0-py3-none-any.whl", hash = "sha256:a0afe918af7d84e02fbf2af77854c0b09c7b2d2ffb4be5268160b0e027c5b23c"},
- {file = "cohere-4.16.0.tar.gz", hash = "sha256:8ba91b8ee82e9407269889c56feac7e16079d1d33b4833b51cd5bf2600f83934"},
+ {file = "cohere-4.17.0-py3-none-any.whl", hash = "sha256:44e0bdb0a2d9467506d27b285f542177b98f92647f27e17ea921a01006fe2f33"},
+ {file = "cohere-4.17.0.tar.gz", hash = "sha256:9f479543b50490b4cb6385468d7571ad891a09cde7bd6b028171596bac6ce6ff"},
]
[package.dependencies]
@@ -788,7 +759,6 @@ urllib3 = ">=1.26,<3"
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
@@ -800,7 +770,6 @@ files = [
name = "coloredlogs"
version = "15.0.1"
description = "Colored terminal output for Python's logging module"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -816,18 +785,17 @@ cron = ["capturer (>=2.4)"]
[[package]]
name = "comm"
-version = "0.1.3"
+version = "0.1.4"
description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
- {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"},
- {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"},
+ {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"},
+ {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"},
]
[package.dependencies]
-traitlets = ">=5.3"
+traitlets = ">=4"
[package.extras]
lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"]
@@ -838,7 +806,6 @@ typing = ["mypy (>=0.990)"]
name = "coverage"
version = "7.2.7"
description = "Code coverage measurement for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -912,35 +879,34 @@ toml = ["tomli"]
[[package]]
name = "cryptography"
-version = "41.0.2"
+version = "41.0.3"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"},
- {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"},
- {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"},
- {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"},
- {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"},
- {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"},
- {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"},
- {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"},
- {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"},
- {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"},
- {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"},
- {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"},
- {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"},
- {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"},
- {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"},
- {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"},
- {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"},
- {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"},
- {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"},
- {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"},
- {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"},
- {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"},
- {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"},
+ {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"},
+ {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"},
+ {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"},
+ {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"},
+ {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"},
+ {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"},
+ {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"},
+ {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"},
+ {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"},
+ {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"},
+ {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"},
+ {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"},
+ {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"},
+ {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"},
+ {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"},
+ {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"},
+ {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"},
+ {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"},
+ {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"},
+ {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"},
+ {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"},
+ {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"},
+ {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"},
]
[package.dependencies]
@@ -958,32 +924,31 @@ test-randomorder = ["pytest-randomly"]
[[package]]
name = "ctransformers"
-version = "0.2.13"
+version = "0.2.17"
description = "Python bindings for the Transformer models implemented in C/C++ using GGML library."
-category = "main"
-optional = false
+optional = true
python-versions = "*"
files = [
- {file = "ctransformers-0.2.13-py3-none-any.whl", hash = "sha256:63c5f828f77f23762ad72e0dabc3be05709e16f2342af9de49c909b44d5d856f"},
- {file = "ctransformers-0.2.13.tar.gz", hash = "sha256:e5beb8f065680d145417f8bc11ea64ffa7769a0b0aae0b1d664c963d7c729bf6"},
+ {file = "ctransformers-0.2.17-py3-none-any.whl", hash = "sha256:903c16b38f5b2750ee34b90107c3a72351d7a9a201a6987a6560bd50874e9698"},
+ {file = "ctransformers-0.2.17.tar.gz", hash = "sha256:0c9de34cc8295ba6cb940e413130e6658fac54a99cecfa6098ac04638fd9301e"},
]
[package.dependencies]
huggingface-hub = "*"
+py-cpuinfo = ">=9.0.0,<10.0.0"
[package.extras]
tests = ["pytest"]
[[package]]
name = "dataclasses-json"
-version = "0.5.12"
+version = "0.5.14"
description = "Easily serialize dataclasses to and from JSON."
-category = "main"
optional = false
-python-versions = ">=3.7,<3.12"
+python-versions = ">=3.7,<3.13"
files = [
- {file = "dataclasses_json-0.5.12-py3-none-any.whl", hash = "sha256:ece0f002af8d7b19c757c62b82ffb414e4bf49e856471f4070ba06590150c345"},
- {file = "dataclasses_json-0.5.12.tar.gz", hash = "sha256:70e28da52e36f4be6b724e1f1e77fbcd19e0e0a6bf9a4c4c6e5abf713d4dab5a"},
+ {file = "dataclasses_json-0.5.14-py3-none-any.whl", hash = "sha256:5ec6fed642adb1dbdb4182badb01e0861badfd8fda82e3b67f44b2d1e9d10d21"},
+ {file = "dataclasses_json-0.5.14.tar.gz", hash = "sha256:d82896a94c992ffaf689cd1fafc180164e2abdd415b8f94a7f78586af5886236"},
]
[package.dependencies]
@@ -994,7 +959,6 @@ typing-inspect = ">=0.4.0,<1"
name = "debugpy"
version = "1.6.7"
description = "An implementation of the Debug Adapter Protocol for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1022,7 +986,6 @@ files = [
name = "decorator"
version = "5.1.1"
description = "Decorators for Humans"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -1034,7 +997,6 @@ files = [
name = "deprecated"
version = "1.2.14"
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -1052,7 +1014,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"]
name = "deprecation"
version = "2.1.0"
description = "A library to handle automated deprecations"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1065,14 +1026,13 @@ packaging = "*"
[[package]]
name = "dill"
-version = "0.3.6"
-description = "serialize all of python"
-category = "main"
+version = "0.3.7"
+description = "serialize all of Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"},
- {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"},
+ {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"},
+ {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"},
]
[package.extras]
@@ -1082,8 +1042,7 @@ graph = ["objgraph (>=1.7.2)"]
name = "diskcache"
version = "5.6.1"
description = "Disk Cache -- Disk and file backed persistent cache."
-category = "main"
-optional = false
+optional = true
python-versions = ">=3"
files = [
{file = "diskcache-5.6.1-py3-none-any.whl", hash = "sha256:558c6a2d5d7c721bb00e40711803d6804850c9f76c426ed81ecc627fe9d2ce2d"},
@@ -1094,7 +1053,6 @@ files = [
name = "distro"
version = "1.8.0"
description = "Distro - an OS platform information API"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1104,20 +1062,18 @@ files = [
[[package]]
name = "dnspython"
-version = "2.3.0"
+version = "2.4.1"
description = "DNS toolkit"
-category = "main"
optional = false
-python-versions = ">=3.7,<4.0"
+python-versions = ">=3.8,<4.0"
files = [
- {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"},
- {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"},
+ {file = "dnspython-2.4.1-py3-none-any.whl", hash = "sha256:5b7488477388b8c0b70a8ce93b227c5603bc7b77f1565afe8e729c36c51447d7"},
+ {file = "dnspython-2.4.1.tar.gz", hash = "sha256:c33971c79af5be968bb897e95c2448e11a645ee84d93b265ce0b7aabe5dfdca8"},
]
[package.extras]
-curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"]
-dnssec = ["cryptography (>=2.6,<40.0)"]
-doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"]
+dnssec = ["cryptography (>=2.6,<42.0)"]
+doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"]
doq = ["aioquic (>=0.9.20)"]
idna = ["idna (>=2.1,<4.0)"]
trio = ["trio (>=0.14,<0.23)"]
@@ -1127,7 +1083,6 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"]
name = "docarray"
version = "0.21.1"
description = "The data structure for unstructured data"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1156,7 +1111,6 @@ weaviate = ["weaviate-client (>=3.9.0,<3.10.0)"]
name = "docker"
version = "6.1.3"
description = "A Python library for the Docker Engine API."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1178,7 +1132,6 @@ ssh = ["paramiko (>=2.4.3)"]
name = "docstring-parser"
version = "0.15"
description = "Parse Python docstrings in reST, Google and Numpydoc format"
-category = "main"
optional = false
python-versions = ">=3.6,<4.0"
files = [
@@ -1190,7 +1143,6 @@ files = [
name = "docutils"
version = "0.20.1"
description = "Docutils -- Python Documentation Utilities"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1202,7 +1154,6 @@ files = [
name = "dotty-dict"
version = "1.3.1"
description = "Dictionary wrapper for quick access to deeply nested keys."
-category = "main"
optional = false
python-versions = ">=3.5,<4.0"
files = [
@@ -1214,7 +1165,6 @@ files = [
name = "duckdb"
version = "0.8.1"
description = "DuckDB embedded database"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1276,7 +1226,6 @@ files = [
name = "ecdsa"
version = "0.18.0"
description = "ECDSA cryptographic signature library (pure python)"
-category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1295,7 +1244,6 @@ gmpy2 = ["gmpy2"]
name = "et-xmlfile"
version = "1.1.0"
description = "An implementation of lxml.xmlfile for the standard library"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1307,7 +1255,6 @@ files = [
name = "exceptiongroup"
version = "1.1.2"
description = "Backport of PEP 654 (exception groups)"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1322,7 +1269,6 @@ test = ["pytest (>=6)"]
name = "executing"
version = "1.2.0"
description = "Get the currently executing AST node of a frame, and other information"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1337,7 +1283,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"]
name = "faiss-cpu"
version = "1.7.4"
description = "A library for efficient similarity search and clustering of dense vectors."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1370,14 +1315,13 @@ files = [
[[package]]
name = "fake-useragent"
-version = "1.1.3"
+version = "1.2.1"
description = "Up-to-date simple useragent faker with real world database"
-category = "main"
optional = false
python-versions = "*"
files = [
- {file = "fake-useragent-1.1.3.tar.gz", hash = "sha256:1c06f0aa7d6e4894b919b30b9c7ebd72ff497325191057fbb5df3d5db06b93fc"},
- {file = "fake_useragent-1.1.3-py3-none-any.whl", hash = "sha256:695d3b1bf7d11d04ab0f971fb73b0ca8de98b78bbadfbc8bacbc9a48423f7531"},
+ {file = "fake-useragent-1.2.1.tar.gz", hash = "sha256:b411f903331f695e3840ccadcf011f745a405764e97c588f2b8fde9e400a5446"},
+ {file = "fake_useragent-1.2.1-py3-none-any.whl", hash = "sha256:ad2b5414d19493d0789572f04200d4f656f84d20b205cc805233212957fe385d"},
]
[package.dependencies]
@@ -1385,14 +1329,13 @@ importlib-resources = {version = ">=5.0", markers = "python_version < \"3.10\""}
[[package]]
name = "fastapi"
-version = "0.100.0"
+version = "0.100.1"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "fastapi-0.100.0-py3-none-any.whl", hash = "sha256:271662daf986da8fa98dc2b7c7f61c4abdfdccfb4786d79ed8b2878f172c6d5f"},
- {file = "fastapi-0.100.0.tar.gz", hash = "sha256:acb5f941ea8215663283c10018323ba7ea737c571b67fc7e88e9469c7eb1d12e"},
+ {file = "fastapi-0.100.1-py3-none-any.whl", hash = "sha256:ec6dd52bfc4eff3063cfcd0713b43c87640fefb2687bbbe3d8a08d94049cdf32"},
+ {file = "fastapi-0.100.1.tar.gz", hash = "sha256:522700d7a469e4a973d92321ab93312448fbe20fca9c8da97effc7e7bc56df23"},
]
[package.dependencies]
@@ -1403,11 +1346,50 @@ typing-extensions = ">=4.5.0"
[package.extras]
all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
+[[package]]
+name = "fastavro"
+version = "1.8.2"
+description = "Fast read/write of AVRO files"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "fastavro-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0e08964b2e9a455d831f2557402a683d4c4d45206f2ab9ade7c69d3dc14e0e58"},
+ {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:401a70b1e5c7161420c6019e0c8afa88f7c8a373468591f5ec37639a903c2509"},
+ {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef1ed3eaa4240c05698d02d8d0c010b9a03780eda37b492da6cd4c9d37e04ec"},
+ {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:543185a672ff6306beb329b57a7b8a3a2dd1eb21a5ccc530150623d58d48bb98"},
+ {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ffbf8bae1edb50fe7beeffc3afa8e684686550c2e5d31bf01c25cfa213f581e1"},
+ {file = "fastavro-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:bb545eb9d876bc7b785e27e98e7720ada7eee7d7a1729798d2ed51517f13500a"},
+ {file = "fastavro-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b837d3038c651046252bc92c1b9899bf21c7927a148a1ff89599c36c2a331ca"},
+ {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3510e96c0a47e4e914bd1a29c954eb662bfa24849ad92e597cb97cc79f21af7"},
+ {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccc0e74f2c2ab357f39bb73d67fcdb6dc10e23fdbbd399326139f72ec0fb99a3"},
+ {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:add51c70d0ab1175601c75cd687bbe9d16ae312cd8899b907aafe0d79ee2bc1d"},
+ {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d9e2662f57e6453e9a2c9fb4f54b2a9e62e3e46f5a412ac00558112336d23883"},
+ {file = "fastavro-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:fea75cf53a93c56dd56e68abce8d314ef877b27451c870cd7ede7582d34c08a7"},
+ {file = "fastavro-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:f489020bb8664c2737c03457ad5dbd490579ddab6f0a7b5c17fecfe982715a89"},
+ {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a547625c138efd5e61300119241041906ee8cb426fc7aa789900f87af7ed330d"},
+ {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53beb458f30c9ad4aa7bff4a42243ff990ffb713b6ce0cd9b360cbc3d648fe52"},
+ {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7b1b2cbd2dd851452306beed0ab9bdaeeab1cc8ad46f84b47cd81eeaff6dd6b8"},
+ {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d29e9baee0b2f37ecd09bde3b487cf900431fd548c85be3e4fe1b9a0b2a917f1"},
+ {file = "fastavro-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:66e132c710663230292bc63e2cb79cf95b16ccb94a5fc99bb63694b24e312fc5"},
+ {file = "fastavro-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38aca63ce604039bcdf2edd14912d00287bdbf8b76f9aa42b28e6ca0bf950092"},
+ {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9787835f6449ee94713e7993a700432fce3763024791ffa8a58dc91ef9d1f950"},
+ {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536cb448bc83811056be02749fd9df37a69621678f02597d272970a769e9b40c"},
+ {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e9d5027cf7d9968f8f819958b41bfedb933323ea6d6a0485eefacaa1afd91f54"},
+ {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:792adfc0c80c7f1109e0ab4b0decef20691fdf0a45091d397a0563872eb56d42"},
+ {file = "fastavro-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:650b22766259f7dd7519dfa4e4658f0e233c319efa130b9cf0c36a500e09cc57"},
+ {file = "fastavro-1.8.2.tar.gz", hash = "sha256:ab9d9226d4b66b6b3d0661a57cd45259b0868fed1c0cd4fac95249b9e0973320"},
+]
+
+[package.extras]
+codecs = ["lz4", "python-snappy", "zstandard"]
+lz4 = ["lz4"]
+snappy = ["python-snappy"]
+zstandard = ["zstandard"]
+
[[package]]
name = "filelock"
version = "3.12.2"
description = "A platform independent file lock."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1423,7 +1405,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p
name = "filetype"
version = "1.2.0"
description = "Infer file type and MIME type of any file/buffer. No external dependencies."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1435,7 +1416,6 @@ files = [
name = "flatbuffers"
version = "23.5.26"
description = "The FlatBuffers serialization format for Python"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1447,7 +1427,6 @@ files = [
name = "frozenlist"
version = "1.4.0"
description = "A list-like structure which implements collections.abc.MutableSequence"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1518,7 +1497,6 @@ files = [
name = "fsspec"
version = "2023.6.0"
description = "File-system specification"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1554,7 +1532,6 @@ tqdm = ["tqdm"]
name = "gitdb"
version = "4.0.10"
description = "Git Object Database"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1569,7 +1546,6 @@ smmap = ">=3.0.1,<6"
name = "gitpython"
version = "3.1.32"
description = "GitPython is a Python library used to interact with Git repositories"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1584,7 +1560,6 @@ gitdb = ">=4.0.1,<5"
name = "google-api-core"
version = "2.11.1"
description = "Google API client core library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1607,18 +1582,17 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
[[package]]
name = "google-api-python-client"
-version = "2.94.0"
+version = "2.95.0"
description = "Google API Client Library for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-api-python-client-2.94.0.tar.gz", hash = "sha256:4ff598b7b83d5c0c5582927e74947286070b5b21a13e1bb64409fd92e45bfb26"},
- {file = "google_api_python_client-2.94.0-py2.py3-none-any.whl", hash = "sha256:28b2f0c2c6380a119e2efd7ecd28fa9d313becf37d71f00bfa49332428e071b4"},
+ {file = "google-api-python-client-2.95.0.tar.gz", hash = "sha256:d2731ede12f79e53fbe11fdb913dfe986440b44c0a28431c78a8ec275f4c1541"},
+ {file = "google_api_python_client-2.95.0-py2.py3-none-any.whl", hash = "sha256:a8aab2da678f42a01f2f52108f787fef4310f23f9dd917c4e64664c3f0c885ba"},
]
[package.dependencies]
-google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0"
+google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0"
google-auth = ">=1.19.0,<3.0.0.dev0"
google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1.dev0"
@@ -1628,7 +1602,6 @@ uritemplate = ">=3.0.1,<5"
name = "google-auth"
version = "2.22.0"
description = "Google Authentication Library"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1654,7 +1627,6 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"]
name = "google-auth-httplib2"
version = "0.1.0"
description = "Google Authentication Library: httplib2 transport"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1671,7 +1643,6 @@ six = "*"
name = "google-cloud-aiplatform"
version = "1.28.1"
description = "Vertex AI API client library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1680,7 +1651,7 @@ files = [
]
[package.dependencies]
-google-api-core = {version = ">=1.32.0,<2.0.0 || >=2.8.0,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.32.0,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]}
google-cloud-bigquery = ">=1.15.0,<4.0.0dev"
google-cloud-resource-manager = ">=1.3.3,<3.0.0dev"
google-cloud-storage = ">=1.32.0,<3.0.0dev"
@@ -1709,7 +1680,6 @@ xai = ["tensorflow (>=2.3.0,<3.0.0dev)"]
name = "google-cloud-bigquery"
version = "3.11.4"
description = "Google BigQuery API client library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1718,7 +1688,7 @@ files = [
]
[package.dependencies]
-google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
google-cloud-core = ">=1.6.0,<3.0.0dev"
google-resumable-media = ">=0.6.0,<3.0dev"
grpcio = ">=1.47.0,<2.0dev"
@@ -1742,7 +1712,6 @@ tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"]
name = "google-cloud-core"
version = "2.3.3"
description = "Google Cloud API client core library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1751,7 +1720,7 @@ files = [
]
[package.dependencies]
-google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev"
+google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev"
google-auth = ">=1.25.0,<3.0dev"
[package.extras]
@@ -1761,7 +1730,6 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"]
name = "google-cloud-resource-manager"
version = "1.10.2"
description = "Google Cloud Resource Manager API client library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1770,7 +1738,7 @@ files = [
]
[package.dependencies]
-google-api-core = {version = ">=1.34.0,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev"
proto-plus = ">=1.22.0,<2.0.0dev"
protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
@@ -1779,7 +1747,6 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
name = "google-cloud-storage"
version = "2.10.0"
description = "Google Cloud Storage API client library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1788,7 +1755,7 @@ files = [
]
[package.dependencies]
-google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev"
+google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev"
google-auth = ">=1.25.0,<3.0dev"
google-cloud-core = ">=2.3.0,<3.0dev"
google-resumable-media = ">=2.3.2"
@@ -1801,7 +1768,6 @@ protobuf = ["protobuf (<5.0.0dev)"]
name = "google-crc32c"
version = "1.5.0"
description = "A python wrapper of the C library 'Google CRC32C'"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1882,7 +1848,6 @@ testing = ["pytest"]
name = "google-resumable-media"
version = "2.5.0"
description = "Utilities for Google Media Downloads and Resumable Uploads"
-category = "main"
optional = false
python-versions = ">= 3.7"
files = [
@@ -1901,7 +1866,6 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"]
name = "google-search-results"
version = "2.4.2"
description = "Scrape and search localized results from Google, Bing, Baidu, Yahoo, Yandex, Ebay, Homedepot, youtube at scale using SerpApi.com"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -1913,14 +1877,13 @@ requests = "*"
[[package]]
name = "googleapis-common-protos"
-version = "1.59.1"
+version = "1.60.0"
description = "Common protobufs used in Google APIs"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "googleapis-common-protos-1.59.1.tar.gz", hash = "sha256:b35d530fe825fb4227857bc47ad84c33c809ac96f312e13182bdeaa2abe1178a"},
- {file = "googleapis_common_protos-1.59.1-py2.py3-none-any.whl", hash = "sha256:0cbedb6fb68f1c07e18eb4c48256320777707e7d0c55063ae56c15db3224a61e"},
+ {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"},
+ {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"},
]
[package.dependencies]
@@ -1934,7 +1897,6 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"]
name = "gotrue"
version = "1.0.2"
description = "Python Client Library for GoTrue"
-category = "main"
optional = false
python-versions = ">=3.8,<4.0"
files = [
@@ -1950,7 +1912,6 @@ pydantic = ">=1.10.0,<2.0.0"
name = "greenlet"
version = "2.0.2"
description = "Lightweight in-process concurrent programming"
-category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
files = [
@@ -2024,7 +1985,6 @@ test = ["objgraph", "psutil"]
name = "grpc-google-iam-v1"
version = "0.12.6"
description = "IAM API client library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2041,7 +2001,6 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4
name = "grpcio"
version = "1.47.5"
description = "HTTP/2-based RPC framework"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -2103,7 +2062,6 @@ protobuf = ["grpcio-tools (>=1.47.5)"]
name = "grpcio-health-checking"
version = "1.47.5"
description = "Standard Health Checking Service for gRPC"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -2119,7 +2077,6 @@ protobuf = ">=3.12.0"
name = "grpcio-reflection"
version = "1.47.5"
description = "Standard Protobuf Reflection Service for gRPC"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -2135,7 +2092,6 @@ protobuf = ">=3.12.0"
name = "grpcio-status"
version = "1.47.5"
description = "Status proto mapping for gRPC"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -2152,7 +2108,6 @@ protobuf = ">=3.12.0"
name = "grpcio-tools"
version = "1.47.5"
description = "Protobuf code generator for gRPC"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -2211,18 +2166,17 @@ setuptools = "*"
[[package]]
name = "gunicorn"
-version = "20.1.0"
+version = "21.2.0"
description = "WSGI HTTP Server for UNIX"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
- {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"},
- {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"},
+ {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"},
+ {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"},
]
[package.dependencies]
-setuptools = ">=3.0"
+packaging = "*"
[package.extras]
eventlet = ["eventlet (>=0.24.1)"]
@@ -2234,7 +2188,6 @@ tornado = ["tornado (>=0.2)"]
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2246,7 +2199,6 @@ files = [
name = "h2"
version = "4.1.0"
description = "HTTP/2 State-Machine based protocol implementation"
-category = "main"
optional = false
python-versions = ">=3.6.1"
files = [
@@ -2262,7 +2214,6 @@ hyperframe = ">=6.0,<7"
name = "hnswlib"
version = "0.7.0"
description = "hnswlib"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -2276,7 +2227,6 @@ numpy = "*"
name = "hpack"
version = "4.0.0"
description = "Pure-Python HPACK header compression"
-category = "main"
optional = false
python-versions = ">=3.6.1"
files = [
@@ -2288,7 +2238,6 @@ files = [
name = "httpcore"
version = "0.16.3"
description = "A minimal low-level HTTP client."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2300,17 +2249,16 @@ files = [
anyio = ">=3.0,<5.0"
certifi = "*"
h11 = ">=0.13,<0.15"
-sniffio = ">=1.0.0,<2.0.0"
+sniffio = "==1.*"
[package.extras]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "httplib2"
version = "0.22.0"
description = "A comprehensive HTTP client library."
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -2325,7 +2273,6 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0
name = "httptools"
version = "0.6.0"
description = "A collection of framework independent HTTP protocol utils."
-category = "main"
optional = false
python-versions = ">=3.5.0"
files = [
@@ -2373,7 +2320,6 @@ test = ["Cython (>=0.29.24,<0.30.0)"]
name = "httpx"
version = "0.23.3"
description = "The next generation HTTP client."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2390,47 +2336,48 @@ sniffio = "*"
[package.extras]
brotli = ["brotli", "brotlicffi"]
-cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<13)"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<13)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "huggingface-hub"
-version = "0.15.1"
+version = "0.16.4"
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
- {file = "huggingface_hub-0.15.1-py3-none-any.whl", hash = "sha256:05b0fb0abbf1f625dfee864648ac3049fe225ac4371c7bafaca0c2d3a2f83445"},
- {file = "huggingface_hub-0.15.1.tar.gz", hash = "sha256:a61b7d1a7769fe10119e730277c72ab99d95c48d86a3d6da3e9f3d0f632a4081"},
+ {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"},
+ {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"},
]
[package.dependencies]
+aiohttp = {version = "*", optional = true, markers = "extra == \"inference\""}
filelock = "*"
fsspec = "*"
packaging = ">=20.9"
+pydantic = {version = "*", optional = true, markers = "extra == \"inference\""}
pyyaml = ">=5.1"
requests = "*"
tqdm = ">=4.42.1"
typing-extensions = ">=3.7.4.3"
[package.extras]
-all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"]
+all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"]
cli = ["InquirerPy (==0.3.4)"]
-dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"]
+dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"]
fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"]
+inference = ["aiohttp", "pydantic"]
quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"]
tensorflow = ["graphviz", "pydot", "tensorflow"]
-testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "gradio", "jedi", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
+testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
torch = ["torch"]
-typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"]
+typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"]
[[package]]
name = "humanfriendly"
version = "10.0"
description = "Human friendly output for text interfaces using Python"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -2445,7 +2392,6 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve
name = "hyperframe"
version = "6.0.1"
description = "HTTP/2 framing layer for Python"
-category = "main"
optional = false
python-versions = ">=3.6.1"
files = [
@@ -2457,7 +2403,6 @@ files = [
name = "idna"
version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -2469,7 +2414,6 @@ files = [
name = "importlib-metadata"
version = "6.8.0"
description = "Read metadata from Python packages"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -2489,7 +2433,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs
name = "importlib-resources"
version = "6.0.0"
description = "Read resources from Python packages"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -2508,7 +2451,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)",
name = "iniconfig"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2520,7 +2462,6 @@ files = [
name = "invoke"
version = "1.7.3"
description = "Pythonic task execution"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -2530,14 +2471,13 @@ files = [
[[package]]
name = "ipykernel"
-version = "6.24.0"
+version = "6.25.0"
description = "IPython Kernel for Jupyter"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
- {file = "ipykernel-6.24.0-py3-none-any.whl", hash = "sha256:2f5fffc7ad8f1fd5aadb4e171ba9129d9668dbafa374732cf9511ada52d6547f"},
- {file = "ipykernel-6.24.0.tar.gz", hash = "sha256:29cea0a716b1176d002a61d0b0c851f34536495bc4ef7dd0222c88b41b816123"},
+ {file = "ipykernel-6.25.0-py3-none-any.whl", hash = "sha256:f0042e867ac3f6bca1679e6a88cbd6a58ed93a44f9d0866aecde6efe8de76659"},
+ {file = "ipykernel-6.25.0.tar.gz", hash = "sha256:e342ce84712861be4b248c4a73472be4702c1b0dd77448bfd6bcfb3af9d5ddf9"},
]
[package.dependencies]
@@ -2546,7 +2486,7 @@ comm = ">=0.1.1"
debugpy = ">=1.6.5"
ipython = ">=7.23.1"
jupyter-client = ">=6.1.12"
-jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
matplotlib-inline = ">=0.1"
nest-asyncio = "*"
packaging = "*"
@@ -2566,7 +2506,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio"
name = "ipython"
version = "8.14.0"
description = "IPython: Productive Interactive Computing"
-category = "dev"
optional = false
python-versions = ">=3.9"
files = [
@@ -2606,7 +2545,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa
name = "jaraco-classes"
version = "3.3.0"
description = "Utility functions for Python class constructs"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -2623,13 +2561,12 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)",
[[package]]
name = "jcloud"
-version = "0.2.12"
+version = "0.2.14"
description = "Simplify deploying and managing Jina projects on Jina Cloud"
-category = "main"
optional = false
python-versions = "*"
files = [
- {file = "jcloud-0.2.12.tar.gz", hash = "sha256:b7bae0909e4f09267aaa681c59e86ae27d3812fb7b63ad018bfbbcfdf8c0ad1e"},
+ {file = "jcloud-0.2.14.tar.gz", hash = "sha256:60798a41be370cacf380bb024f04086df8b0e65f20e51b4fbe1dd11e04d95be7"},
]
[package.dependencies]
@@ -2646,29 +2583,27 @@ test = ["black (==22.3.0)", "jina (>=3.7.0)", "mock", "pytest", "pytest-asyncio"
[[package]]
name = "jedi"
-version = "0.18.2"
+version = "0.19.0"
description = "An autocompletion tool for Python that can be used for text editors."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
- {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"},
- {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"},
+ {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"},
+ {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"},
]
[package.dependencies]
-parso = ">=0.8.0,<0.9.0"
+parso = ">=0.8.3,<0.9.0"
[package.extras]
docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
[[package]]
name = "jeepney"
version = "0.8.0"
description = "Low-level, pure Python DBus protocol wrapper."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2684,7 +2619,6 @@ trio = ["async_generator", "trio"]
name = "jina"
version = "3.15.2"
description = "Build multimodal AI services via cloud native technologies ยท Neural Search ยท Generative AI ยท MLOps"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -2802,7 +2736,6 @@ websockets = ["websockets"]
name = "jina-hubble-sdk"
version = "0.39.0"
description = "SDK for Hubble API at Jina AI."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -2828,8 +2761,7 @@ full = ["aiohttp", "black (==22.3.0)", "docker", "filelock", "flake8 (==4.0.1)",
name = "jinja2"
version = "3.1.2"
description = "A very fast and expressive template engine."
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.7"
files = [
{file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
@@ -2846,7 +2778,6 @@ i18n = ["Babel (>=2.7)"]
name = "joblib"
version = "1.3.1"
description = "Lightweight pipelining with Python functions"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2858,7 +2789,6 @@ files = [
name = "jupyter-client"
version = "8.3.0"
description = "Jupyter protocol implementation and client libraries"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -2868,7 +2798,7 @@ files = [
[package.dependencies]
importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
-jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
python-dateutil = ">=2.8.2"
pyzmq = ">=23.0"
tornado = ">=6.2"
@@ -2882,7 +2812,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt
name = "jupyter-core"
version = "5.3.1"
description = "Jupyter core package. A base package on which Jupyter projects rely."
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -2903,7 +2832,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
name = "keyring"
version = "24.2.0"
description = "Store and access your passwords safely."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -2925,21 +2853,20 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)",
[[package]]
name = "langchain"
-version = "0.0.237"
+version = "0.0.250"
description = "Building applications with LLMs through composability"
-category = "main"
optional = false
python-versions = ">=3.8.1,<4.0"
files = [
- {file = "langchain-0.0.237-py3-none-any.whl", hash = "sha256:8eed8ea374b3487387ab81e418a1b629d2475f7af884ad83ff7172dc93b580dd"},
- {file = "langchain-0.0.237.tar.gz", hash = "sha256:186e2d99b4aac91c4d128234d6f206732c70a9688e9cc63863f23520746eefaf"},
+ {file = "langchain-0.0.250-py3-none-any.whl", hash = "sha256:65b3520f507e848edd88a35a70700971bbbf822fda65f621ccf44a3bb36ad03a"},
+ {file = "langchain-0.0.250.tar.gz", hash = "sha256:1b5775d6a472f633bb06e794f58cb6ff5d1eeb2da603b64a6a15013f8f61ee3f"},
]
[package.dependencies]
aiohttp = ">=3.8.3,<4.0.0"
async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""}
dataclasses-json = ">=0.5.7,<0.6.0"
-langsmith = ">=0.0.10,<0.0.11"
+langsmith = ">=0.0.11,<0.1.0"
numexpr = ">=2.8.4,<3.0.0"
numpy = ">=1,<2"
openapi-schema-pydantic = ">=1.2,<2.0"
@@ -2950,33 +2877,32 @@ SQLAlchemy = ">=1.4,<3"
tenacity = ">=8.1.0,<9.0.0"
[package.extras]
-all = ["O365 (>=2.0.26,<3.0.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3,<0.4)", "arxiv (>=1.4,<2.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "awadb (>=0.3.3,<0.4.0)", "azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "beautifulsoup4 (>=4,<5)", "clarifai (>=9.1.0)", "clickhouse-connect (>=0.5.14,<0.6.0)", "cohere (>=3,<4)", "deeplake (>=3.6.8,<4.0.0)", "docarray[hnswlib] (>=0.32.0,<0.33.0)", "duckduckgo-search (>=3.8.3,<4.0.0)", "elasticsearch (>=8,<9)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-auth (>=2.18.1,<3.0.0)", "google-search-results (>=2,<3)", "gptcache (>=0.1.7)", "html2text (>=2020.1.16,<2021.0.0)", "huggingface_hub (>=0,<1)", "jina (>=3.14,<4.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lancedb (>=0.1,<0.2)", "langkit (>=0.0.6,<0.1.0)", "lark (>=1.1.5,<2.0.0)", "libdeeplake (>=0.0.60,<0.0.61)", "lxml (>=4.9.2,<5.0.0)", "manifest-ml (>=0.0.1,<0.0.2)", "marqo (>=0.11.0,<0.12.0)", "momento (>=1.5.0,<2.0.0)", "nebula3-python (>=3.4.0,<4.0.0)", "neo4j (>=5.8.1,<6.0.0)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "octoai-sdk (>=0.1.1,<0.2.0)", "openai (>=0,<1)", "openlm (>=0.0.5,<0.0.6)", "opensearch-py (>=2.0.0,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pexpect (>=4.8.0,<5.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "pinecone-text (>=0.4.2,<0.5.0)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pymongo (>=4.3.3,<5.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pytesseract (>=0.3.10,<0.4.0)", "pyvespa (>=0.33.0,<0.34.0)", "qdrant-client (>=1.3.1,<2.0.0)", "rdflib (>=6.3.2,<7.0.0)", "redis (>=4,<5)", "requests-toolbelt (>=1.0.0,<2.0.0)", "sentence-transformers (>=2,<3)", "singlestoredb (>=0.7.1,<0.8.0)", "spacy (>=3,<4)", "steamship (>=2.16.9,<3.0.0)", "tensorflow-text (>=2.11.0,<3.0.0)", "tigrisdb (>=1.0.0b6,<2.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<3)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"]
-azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0a20230509004)", "openai (>=0,<1)"]
+all = ["O365 (>=2.0.26,<3.0.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "amadeus (>=8.1.0)", "anthropic (>=0.3,<0.4)", "arxiv (>=1.4,<2.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "awadb (>=0.3.9,<0.4.0)", "azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "beautifulsoup4 (>=4,<5)", "clarifai (>=9.1.0)", "clickhouse-connect (>=0.5.14,<0.6.0)", "cohere (>=4,<5)", "deeplake (>=3.6.8,<4.0.0)", "docarray[hnswlib] (>=0.32.0,<0.33.0)", "duckduckgo-search (>=3.8.3,<4.0.0)", "elasticsearch (>=8,<9)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-auth (>=2.18.1,<3.0.0)", "google-search-results (>=2,<3)", "gptcache (>=0.1.7)", "html2text (>=2020.1.16,<2021.0.0)", "huggingface_hub (>=0,<1)", "jina (>=3.14,<4.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lancedb (>=0.1,<0.2)", "langkit (>=0.0.6,<0.1.0)", "lark (>=1.1.5,<2.0.0)", "libdeeplake (>=0.0.60,<0.0.61)", "librosa (>=0.10.0.post2,<0.11.0)", "lxml (>=4.9.2,<5.0.0)", "manifest-ml (>=0.0.1,<0.0.2)", "marqo (>=0.11.0,<0.12.0)", "momento (>=1.5.0,<2.0.0)", "nebula3-python (>=3.4.0,<4.0.0)", "neo4j (>=5.8.1,<6.0.0)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "octoai-sdk (>=0.1.1,<0.2.0)", "openai (>=0,<1)", "openlm (>=0.0.5,<0.0.6)", "opensearch-py (>=2.0.0,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pexpect (>=4.8.0,<5.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "pinecone-text (>=0.4.2,<0.5.0)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pymongo (>=4.3.3,<5.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pytesseract (>=0.3.10,<0.4.0)", "python-arango (>=7.5.9,<8.0.0)", "pyvespa (>=0.33.0,<0.34.0)", "qdrant-client (>=1.3.1,<2.0.0)", "rdflib (>=6.3.2,<7.0.0)", "redis (>=4,<5)", "requests-toolbelt (>=1.0.0,<2.0.0)", "sentence-transformers (>=2,<3)", "singlestoredb (>=0.7.1,<0.8.0)", "spacy (>=3,<4)", "steamship (>=2.16.9,<3.0.0)", "tensorflow-text (>=2.11.0,<3.0.0)", "tigrisdb (>=1.0.0b6,<2.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<3)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)", "xinference (>=0.0.6,<0.0.7)"]
+azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b6)", "openai (>=0,<1)"]
clarifai = ["clarifai (>=9.1.0)"]
-cohere = ["cohere (>=3,<4)"]
+cohere = ["cohere (>=4,<5)"]
docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"]
embeddings = ["sentence-transformers (>=2,<3)"]
-extended-testing = ["atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.0.7,<0.0.8)", "chardet (>=5.1.0,<6.0.0)", "esprima (>=4.0.1,<5.0.0)", "gql (>=3.4.1,<4.0.0)", "html2text (>=2020.1.16,<2021.0.0)", "jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "openai (>=0,<1)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tqdm (>=4.48.0)", "zep-python (>=0.32)"]
+extended-testing = ["atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.0.7,<0.0.8)", "chardet (>=5.1.0,<6.0.0)", "esprima (>=4.0.1,<5.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "gql (>=3.4.1,<4.0.0)", "html2text (>=2020.1.16,<2021.0.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "openai (>=0,<1)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tqdm (>=4.48.0)", "xinference (>=0.0.6,<0.0.7)", "zep-python (>=0.32)"]
javascript = ["esprima (>=4.0.1,<5.0.0)"]
-llms = ["anthropic (>=0.3,<0.4)", "clarifai (>=9.1.0)", "cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "openllm (>=0.1.19)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"]
+llms = ["anthropic (>=0.3,<0.4)", "clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "openllm (>=0.1.19)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)", "xinference (>=0.0.6,<0.0.7)"]
openai = ["openai (>=0,<1)", "tiktoken (>=0.3.2,<0.4.0)"]
qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"]
text-helpers = ["chardet (>=5.1.0,<6.0.0)"]
[[package]]
name = "langchain-serve"
-version = "0.0.57"
+version = "0.0.58"
description = "Langchain Serve - serve your langchain apps on Jina AI Cloud."
-category = "main"
optional = true
python-versions = "*"
files = [
- {file = "langchain-serve-0.0.57.tar.gz", hash = "sha256:acd207c7c384232ae3d197b0ef0877d1afeb1fea89401722ab33fc6fb85ed2f5"},
+ {file = "langchain-serve-0.0.58.tar.gz", hash = "sha256:9ec65c8eeda9f777fb8b79117d92839873b10030fd832184ba891d4d3a065fff"},
]
[package.dependencies]
click = "*"
-jcloud = ">=0.2.8,<=0.2.12"
+jcloud = ">=0.2.13"
jina = "3.15.2"
jina-hubble-sdk = "*"
langchain = "*"
@@ -2991,14 +2917,13 @@ test = ["psutil", "pytest", "pytest-asyncio"]
[[package]]
name = "langsmith"
-version = "0.0.10"
+version = "0.0.16"
description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
-category = "main"
optional = false
python-versions = ">=3.8.1,<4.0"
files = [
- {file = "langsmith-0.0.10-py3-none-any.whl", hash = "sha256:716412979613a5eb550c9bce33165cd1bad296eb19009040155deccef427ef07"},
- {file = "langsmith-0.0.10.tar.gz", hash = "sha256:11e5db0d8e29ee5583cabd872eeece8ce50738737b1f52f316ac984f4a1a58c5"},
+ {file = "langsmith-0.0.16-py3-none-any.whl", hash = "sha256:a9a5b30dc1c0ee0c9f8bbd2076856f1db3856a9521464f130be1db519c7077e5"},
+ {file = "langsmith-0.0.16.tar.gz", hash = "sha256:0729df30dd5b1c9d0c83614b5d348c7358ac182d7e3003dafbfcbedb88cbc8b8"},
]
[package.dependencies]
@@ -3009,7 +2934,6 @@ requests = ">=2,<3"
name = "linkify-it-py"
version = "2.0.2"
description = "Links recognition library with FULL unicode support."
-category = "main"
optional = true
python-versions = ">=3.7"
files = [
@@ -3028,13 +2952,12 @@ test = ["coverage", "pytest", "pytest-cov"]
[[package]]
name = "llama-cpp-python"
-version = "0.1.73"
+version = "0.1.77"
description = "A Python wrapper for llama.cpp"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.7"
files = [
- {file = "llama_cpp_python-0.1.73.tar.gz", hash = "sha256:09606fc0ebe9e752c4d40330811859406582411f5b9a18e3992031a20de1d898"},
+ {file = "llama_cpp_python-0.1.77.tar.gz", hash = "sha256:76c7fae8f5386edecf38cb149bf119127e1208883f0456c6998465648d6c242e"},
]
[package.dependencies]
@@ -3049,7 +2972,6 @@ server = ["fastapi (>=0.100.0)", "pydantic-settings (>=2.0.1)", "sse-starlette (
name = "loguru"
version = "0.7.0"
description = "Python logging made (stupidly) simple"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -3068,7 +2990,6 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu
name = "lxml"
version = "4.9.3"
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
files = [
@@ -3165,7 +3086,6 @@ source = ["Cython (>=0.29.35)"]
name = "lz4"
version = "4.3.2"
description = "LZ4 Bindings for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3213,27 +3133,26 @@ tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"]
[[package]]
name = "markdown"
-version = "3.4.3"
+version = "3.4.4"
description = "Python implementation of John Gruber's Markdown."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "Markdown-3.4.3-py3-none-any.whl", hash = "sha256:065fd4df22da73a625f14890dd77eb8040edcbd68794bcd35943be14490608b2"},
- {file = "Markdown-3.4.3.tar.gz", hash = "sha256:8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520"},
+ {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"},
+ {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"},
]
[package.dependencies]
importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
[package.extras]
+docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"]
testing = ["coverage", "pyyaml"]
[[package]]
name = "markdown-it-py"
version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -3260,8 +3179,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe"
version = "2.1.3"
description = "Safely add untrusted strings to HTML/XML markup."
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.7"
files = [
{file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
@@ -3318,30 +3236,28 @@ files = [
[[package]]
name = "marshmallow"
-version = "3.19.0"
+version = "3.20.1"
description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
-category = "main"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"},
- {file = "marshmallow-3.19.0.tar.gz", hash = "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78"},
+ {file = "marshmallow-3.20.1-py3-none-any.whl", hash = "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c"},
+ {file = "marshmallow-3.20.1.tar.gz", hash = "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889"},
]
[package.dependencies]
packaging = ">=17.0"
[package.extras]
-dev = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"]
-docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.9)", "sphinx (==5.3.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"]
-lint = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)"]
+dev = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"]
+docs = ["alabaster (==0.7.13)", "autodocsumm (==0.2.11)", "sphinx (==7.0.1)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"]
+lint = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)"]
tests = ["pytest", "pytz", "simplejson"]
[[package]]
name = "matplotlib-inline"
version = "0.1.6"
description = "Inline Matplotlib backend for Jupyter"
-category = "dev"
optional = false
python-versions = ">=3.5"
files = [
@@ -3356,7 +3272,6 @@ traitlets = "*"
name = "mdit-py-plugins"
version = "0.4.0"
description = "Collection of plugins for markdown-it-py"
-category = "main"
optional = true
python-versions = ">=3.8"
files = [
@@ -3376,7 +3291,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3388,7 +3302,6 @@ files = [
name = "monotonic"
version = "1.6"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -3398,21 +3311,19 @@ files = [
[[package]]
name = "more-itertools"
-version = "9.1.0"
+version = "10.0.0"
description = "More routines for operating on iterables, beyond itertools"
-category = "main"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"},
- {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"},
+ {file = "more-itertools-10.0.0.tar.gz", hash = "sha256:cd65437d7c4b615ab81c0640c0480bc29a550ea032891977681efd28344d51e1"},
+ {file = "more_itertools-10.0.0-py3-none-any.whl", hash = "sha256:928d514ffd22b5b0a8fce326d57f423a55d2ff783b093bab217eda71e732330f"},
]
[[package]]
name = "mpmath"
version = "1.3.0"
description = "Python library for arbitrary-precision floating-point arithmetic"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -3430,7 +3341,6 @@ tests = ["pytest (>=4.6)"]
name = "msg-parser"
version = "1.2.0"
description = "This module enables reading, parsing and converting Microsoft Outlook MSG E-Mail files."
-category = "main"
optional = false
python-versions = ">=3.4"
files = [
@@ -3448,7 +3358,6 @@ rtf = ["compressed-rtf (>=1.0.5)"]
name = "multidict"
version = "6.0.4"
description = "multidict implementation"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3530,36 +3439,36 @@ files = [
[[package]]
name = "multiprocess"
-version = "0.70.14"
-description = "better multiprocessing and multithreading in python"
-category = "main"
+version = "0.70.15"
+description = "better multiprocessing and multithreading in Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "multiprocess-0.70.14-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560a27540daef4ce8b24ed3cc2496a3c670df66c96d02461a4da67473685adf3"},
- {file = "multiprocess-0.70.14-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:bfbbfa36f400b81d1978c940616bc77776424e5e34cb0c94974b178d727cfcd5"},
- {file = "multiprocess-0.70.14-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:89fed99553a04ec4f9067031f83a886d7fdec5952005551a896a4b6a59575bb9"},
- {file = "multiprocess-0.70.14-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:40a5e3685462079e5fdee7c6789e3ef270595e1755199f0d50685e72523e1d2a"},
- {file = "multiprocess-0.70.14-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:44936b2978d3f2648727b3eaeab6d7fa0bedf072dc5207bf35a96d5ee7c004cf"},
- {file = "multiprocess-0.70.14-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e628503187b5d494bf29ffc52d3e1e57bb770ce7ce05d67c4bbdb3a0c7d3b05f"},
- {file = "multiprocess-0.70.14-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0d5da0fc84aacb0e4bd69c41b31edbf71b39fe2fb32a54eaedcaea241050855c"},
- {file = "multiprocess-0.70.14-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:6a7b03a5b98e911a7785b9116805bd782815c5e2bd6c91c6a320f26fd3e7b7ad"},
- {file = "multiprocess-0.70.14-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cea5bdedd10aace3c660fedeac8b087136b4366d4ee49a30f1ebf7409bce00ae"},
- {file = "multiprocess-0.70.14-py310-none-any.whl", hash = "sha256:7dc1f2f6a1d34894c8a9a013fbc807971e336e7cc3f3ff233e61b9dc679b3b5c"},
- {file = "multiprocess-0.70.14-py37-none-any.whl", hash = "sha256:93a8208ca0926d05cdbb5b9250a604c401bed677579e96c14da3090beb798193"},
- {file = "multiprocess-0.70.14-py38-none-any.whl", hash = "sha256:6725bc79666bbd29a73ca148a0fb5f4ea22eed4a8f22fce58296492a02d18a7b"},
- {file = "multiprocess-0.70.14-py39-none-any.whl", hash = "sha256:63cee628b74a2c0631ef15da5534c8aedbc10c38910b9c8b18dcd327528d1ec7"},
- {file = "multiprocess-0.70.14.tar.gz", hash = "sha256:3eddafc12f2260d27ae03fe6069b12570ab4764ab59a75e81624fac453fbf46a"},
+ {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"},
+ {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"},
+ {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"},
+ {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"},
+ {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"},
+ {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"},
+ {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"},
+ {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"},
+ {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"},
+ {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"},
]
[package.dependencies]
-dill = ">=0.3.6"
+dill = ">=0.3.7"
[[package]]
name = "mypy"
version = "1.4.1"
description = "Optional static typing for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -3606,7 +3515,6 @@ reports = ["lxml"]
name = "mypy-extensions"
version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -3616,21 +3524,19 @@ files = [
[[package]]
name = "nest-asyncio"
-version = "1.5.6"
+version = "1.5.7"
description = "Patch asyncio to allow nested event loops"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
- {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"},
- {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"},
+ {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"},
+ {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"},
]
[[package]]
name = "networkx"
version = "3.1"
description = "Python package for creating and manipulating graphs and networks"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -3649,7 +3555,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"]
name = "nltk"
version = "3.8.1"
description = "Natural Language Toolkit"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3675,7 +3580,6 @@ twitter = ["twython"]
name = "numexpr"
version = "2.8.4"
description = "Fast numerical expression evaluator for NumPy"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3716,44 +3620,42 @@ numpy = ">=1.13.3"
[[package]]
name = "numpy"
-version = "1.25.1"
+version = "1.25.2"
description = "Fundamental package for array computing in Python"
-category = "main"
optional = false
python-versions = ">=3.9"
files = [
- {file = "numpy-1.25.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa"},
- {file = "numpy-1.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b"},
- {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf"},
- {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588"},
- {file = "numpy-1.25.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19"},
- {file = "numpy-1.25.1-cp310-cp310-win32.whl", hash = "sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"},
- {file = "numpy-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57"},
- {file = "numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e"},
- {file = "numpy-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800"},
- {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09"},
- {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6"},
- {file = "numpy-1.25.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d"},
- {file = "numpy-1.25.1-cp311-cp311-win32.whl", hash = "sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb"},
- {file = "numpy-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171"},
- {file = "numpy-1.25.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105"},
- {file = "numpy-1.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f"},
- {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625"},
- {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd"},
- {file = "numpy-1.25.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7"},
- {file = "numpy-1.25.1-cp39-cp39-win32.whl", hash = "sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c"},
- {file = "numpy-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631"},
- {file = "numpy-1.25.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009"},
- {file = "numpy-1.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004"},
- {file = "numpy-1.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe"},
- {file = "numpy-1.25.1.tar.gz", hash = "sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf"},
+ {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"},
+ {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"},
+ {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"},
+ {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"},
+ {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"},
+ {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"},
+ {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"},
+ {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"},
+ {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"},
+ {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"},
+ {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"},
+ {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"},
+ {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"},
+ {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"},
+ {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"},
+ {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"},
+ {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"},
+ {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"},
+ {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"},
+ {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"},
+ {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"},
+ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"},
]
[[package]]
name = "olefile"
version = "0.46"
description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -3764,7 +3666,6 @@ files = [
name = "onnxruntime"
version = "1.15.1"
description = "ONNX Runtime is a runtime accelerator for Machine Learning models"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -3806,7 +3707,6 @@ sympy = "*"
name = "openai"
version = "0.27.8"
description = "Python client library for the OpenAI API"
-category = "main"
optional = false
python-versions = ">=3.7.1"
files = [
@@ -3821,7 +3721,7 @@ tqdm = "*"
[package.extras]
datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
-dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"]
+dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"]
embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"]
wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"]
@@ -3829,7 +3729,6 @@ wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1
name = "openapi-schema-pydantic"
version = "1.2.4"
description = "OpenAPI (v3) specification schema as pydantic class"
-category = "main"
optional = false
python-versions = ">=3.6.1"
files = [
@@ -3844,7 +3743,6 @@ pydantic = ">=1.8.2"
name = "openpyxl"
version = "3.1.2"
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -3859,7 +3757,6 @@ et-xmlfile = "*"
name = "opentelemetry-api"
version = "1.19.0"
description = "OpenTelemetry Python API"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3875,7 +3772,6 @@ importlib-metadata = ">=6.0,<7.0"
name = "opentelemetry-exporter-otlp"
version = "1.19.0"
description = "OpenTelemetry Collector Exporters"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3891,7 +3787,6 @@ opentelemetry-exporter-otlp-proto-http = "1.19.0"
name = "opentelemetry-exporter-otlp-proto-common"
version = "1.19.0"
description = "OpenTelemetry Protobuf encoding"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3906,7 +3801,6 @@ opentelemetry-proto = "1.19.0"
name = "opentelemetry-exporter-otlp-proto-grpc"
version = "1.19.0"
description = "OpenTelemetry Collector Protobuf over gRPC Exporter"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3931,7 +3825,6 @@ test = ["pytest-grpc"]
name = "opentelemetry-exporter-otlp-proto-http"
version = "1.19.0"
description = "OpenTelemetry Collector Protobuf over HTTP Exporter"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3956,7 +3849,6 @@ test = ["responses (==0.22.0)"]
name = "opentelemetry-exporter-prometheus"
version = "1.12.0rc1"
description = "Prometheus Metric Exporter for OpenTelemetry"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -3973,7 +3865,6 @@ prometheus-client = ">=0.5.0,<1.0.0"
name = "opentelemetry-instrumentation"
version = "0.40b0"
description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3990,7 +3881,6 @@ wrapt = ">=1.0.0,<2.0.0"
name = "opentelemetry-instrumentation-aiohttp-client"
version = "0.40b0"
description = "OpenTelemetry aiohttp client instrumentation"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4013,7 +3903,6 @@ test = ["http-server-mock", "opentelemetry-instrumentation-aiohttp-client[instru
name = "opentelemetry-instrumentation-asgi"
version = "0.40b0"
description = "ASGI instrumentation for OpenTelemetry"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4036,7 +3925,6 @@ test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-u
name = "opentelemetry-instrumentation-fastapi"
version = "0.40b0"
description = "OpenTelemetry FastAPI Instrumentation"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4059,7 +3947,6 @@ test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instrument
name = "opentelemetry-instrumentation-grpc"
version = "0.40b0"
description = "OpenTelemetry gRPC instrumentation"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4082,7 +3969,6 @@ test = ["opentelemetry-instrumentation-grpc[instruments]", "opentelemetry-sdk (>
name = "opentelemetry-proto"
version = "1.19.0"
description = "OpenTelemetry Python Proto"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4097,7 +3983,6 @@ protobuf = ">=3.19,<5.0"
name = "opentelemetry-sdk"
version = "1.19.0"
description = "OpenTelemetry Python SDK"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4114,7 +3999,6 @@ typing-extensions = ">=3.7.4"
name = "opentelemetry-semantic-conventions"
version = "0.40b0"
description = "OpenTelemetry Semantic Conventions"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4126,7 +4010,6 @@ files = [
name = "opentelemetry-util-http"
version = "0.40b0"
description = "Web util for OpenTelemetry"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4138,7 +4021,6 @@ files = [
name = "orjson"
version = "3.9.2"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4194,7 +4076,6 @@ files = [
name = "overrides"
version = "7.3.1"
description = "A decorator to automatically detect mismatch when overriding a method."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4206,7 +4087,6 @@ files = [
name = "packaging"
version = "23.1"
description = "Core utilities for Python packages"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4218,7 +4098,6 @@ files = [
name = "pandas"
version = "2.0.3"
description = "Powerful data structures for data analysis, time series, and statistics"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -4285,7 +4164,6 @@ xml = ["lxml (>=4.6.3)"]
name = "pandas-stubs"
version = "2.0.2.230605"
description = "Type annotations for pandas"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -4301,7 +4179,6 @@ types-pytz = ">=2022.1.1"
name = "parso"
version = "0.8.3"
description = "A Python Parser"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -4315,21 +4192,19 @@ testing = ["docopt", "pytest (<6.0.0)"]
[[package]]
name = "pathspec"
-version = "0.11.1"
+version = "0.11.2"
description = "Utility library for gitignore style pattern matching of file paths."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"},
- {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"},
+ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
+ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
]
[[package]]
name = "pdf2image"
version = "1.16.3"
description = "A wrapper around the pdftoppm and pdftocairo command line tools to convert PDF to a PIL Image list."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -4344,7 +4219,6 @@ pillow = "*"
name = "pdfminer-six"
version = "20221105"
description = "PDF parser and analyzer"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4365,7 +4239,6 @@ image = ["Pillow"]
name = "pexpect"
version = "4.8.0"
description = "Pexpect allows easy control of interactive console applications."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -4380,7 +4253,6 @@ ptyprocess = ">=0.5"
name = "pickleshare"
version = "0.7.5"
description = "Tiny 'shelve'-like database with concurrency support"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -4392,7 +4264,6 @@ files = [
name = "pillow"
version = "10.0.0"
description = "Python Imaging Library (Fork)"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -4460,7 +4331,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
name = "pinecone-client"
version = "2.2.2"
description = "Pinecone client and SDK"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -4486,7 +4356,6 @@ grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv
name = "pkginfo"
version = "1.9.6"
description = "Query metadata from sdists / bdists / installed packages."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4499,25 +4368,23 @@ testing = ["pytest", "pytest-cov"]
[[package]]
name = "platformdirs"
-version = "3.9.1"
+version = "3.10.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
- {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"},
- {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"},
+ {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"},
+ {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"},
]
[package.extras]
-docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
[[package]]
name = "pluggy"
version = "1.2.0"
description = "plugin and hook calling mechanisms for python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -4533,7 +4400,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "portalocker"
version = "2.7.0"
description = "Wraps the portalocker recipe for easy usage"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -4553,7 +4419,6 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p
name = "postgrest"
version = "0.10.6"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
-category = "main"
optional = false
python-versions = ">=3.8,<4.0"
files = [
@@ -4571,7 +4436,6 @@ strenum = ">=0.4.9,<0.5.0"
name = "posthog"
version = "3.0.1"
description = "Integrate PostHog into any python application."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -4595,7 +4459,6 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint"
name = "prometheus-client"
version = "0.17.1"
description = "Python client for the Prometheus monitoring system."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4610,7 +4473,6 @@ twisted = ["twisted"]
name = "prompt-toolkit"
version = "3.0.39"
description = "Library for building powerful interactive command lines in Python"
-category = "dev"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -4625,7 +4487,6 @@ wcwidth = "*"
name = "proto-plus"
version = "1.22.3"
description = "Beautiful, Pythonic protocol buffers."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4643,7 +4504,6 @@ testing = ["google-api-core[grpc] (>=1.31.5)"]
name = "protobuf"
version = "3.20.3"
description = "Protocol Buffers"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4675,7 +4535,6 @@ files = [
name = "psutil"
version = "5.9.5"
description = "Cross-platform lib for process and system monitoring in Python."
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -4702,7 +4561,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
name = "psycopg"
version = "3.1.9"
description = "PostgreSQL database adapter for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4726,7 +4584,6 @@ test = ["anyio (>=3.6.2)", "mypy (>=1.2)", "pproxy (>=2.7)", "pytest (>=6.2.5)",
name = "psycopg-binary"
version = "3.1.9"
description = "PostgreSQL database adapter for Python -- C optimisation distribution"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4790,7 +4647,6 @@ files = [
name = "psycopg2-binary"
version = "2.9.6"
description = "psycopg2 - Python-PostgreSQL Database Adapter"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -4862,7 +4718,6 @@ files = [
name = "ptyprocess"
version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -4874,7 +4729,6 @@ files = [
name = "pulsar-client"
version = "3.2.0"
description = "Apache Pulsar Python client library"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -4922,7 +4776,6 @@ functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.8.2)", "prometh
name = "pure-eval"
version = "0.2.2"
description = "Safely evaluate AST nodes without side effects"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -4933,11 +4786,21 @@ files = [
[package.extras]
tests = ["pytest"]
+[[package]]
+name = "py-cpuinfo"
+version = "9.0.0"
+description = "Get CPU info with pure Python"
+optional = true
+python-versions = "*"
+files = [
+ {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"},
+ {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"},
+]
+
[[package]]
name = "pyarrow"
version = "12.0.1"
description = "Python library for Apache Arrow"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -4975,7 +4838,6 @@ numpy = ">=1.16.6"
name = "pyasn1"
version = "0.5.0"
description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
@@ -4987,7 +4849,6 @@ files = [
name = "pyasn1-modules"
version = "0.3.0"
description = "A collection of ASN.1-based protocols modules"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
@@ -5002,7 +4863,6 @@ pyasn1 = ">=0.4.6,<0.6.0"
name = "pycparser"
version = "2.21"
description = "C parser in Python"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -5012,48 +4872,47 @@ files = [
[[package]]
name = "pydantic"
-version = "1.10.11"
+version = "1.10.12"
description = "Data validation and settings management using python type hints"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"},
- {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"},
- {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"},
- {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"},
- {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"},
- {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"},
- {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"},
- {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"},
- {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"},
- {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"},
- {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"},
- {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"},
- {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"},
- {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"},
- {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"},
- {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"},
- {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"},
- {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"},
- {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"},
- {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"},
- {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"},
- {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"},
- {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"},
- {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"},
- {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"},
- {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"},
- {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"},
- {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"},
- {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"},
- {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"},
- {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"},
- {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"},
- {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"},
- {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"},
- {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"},
- {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"},
+ {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"},
+ {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"},
+ {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"},
+ {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"},
+ {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"},
+ {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"},
+ {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"},
+ {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"},
+ {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"},
+ {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"},
+ {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"},
+ {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"},
+ {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"},
+ {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"},
+ {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"},
+ {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"},
+ {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"},
+ {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"},
+ {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"},
+ {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"},
+ {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"},
+ {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"},
+ {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"},
+ {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"},
+ {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"},
+ {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"},
+ {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"},
+ {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"},
+ {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"},
+ {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"},
+ {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"},
+ {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"},
+ {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"},
+ {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"},
+ {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"},
+ {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"},
]
[package.dependencies]
@@ -5067,7 +4926,6 @@ email = ["email-validator (>=1.0.3)"]
name = "pygments"
version = "2.15.1"
description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -5082,7 +4940,6 @@ plugins = ["importlib-metadata"]
name = "pymongo"
version = "4.4.1"
description = "Python driver for MongoDB "
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -5177,7 +5034,6 @@ zstd = ["zstandard"]
name = "pypandoc"
version = "1.11"
description = "Thin wrapper for pandoc."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -5187,14 +5043,13 @@ files = [
[[package]]
name = "pyparsing"
-version = "3.1.0"
+version = "3.1.1"
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
-category = "main"
optional = false
python-versions = ">=3.6.8"
files = [
- {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"},
- {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"},
+ {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"},
+ {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"},
]
[package.extras]
@@ -5202,14 +5057,13 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pypdf"
-version = "3.12.2"
+version = "3.14.0"
description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
- {file = "pypdf-3.12.2-py3-none-any.whl", hash = "sha256:75c56b5e8ac8c61f6d8189d6bc839c1c2d1fe64626f4bab5d954e82c38652162"},
- {file = "pypdf-3.12.2.tar.gz", hash = "sha256:8657d56fd4f64540b9a1e5285845543534321484f1276af893eead7bd00598e6"},
+ {file = "pypdf-3.14.0-py3-none-any.whl", hash = "sha256:55a5943d9a598ff6b9d301acf8fa33303656a1ea86fd3d754c6d20d417636c6f"},
+ {file = "pypdf-3.14.0.tar.gz", hash = "sha256:1fb4edffa5d3a448f964d0ad2a31cd8e408ea5d76d45efac042a8c3448c83b0a"},
]
[package.dependencies]
@@ -5219,14 +5073,13 @@ typing_extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\
crypto = ["PyCryptodome"]
dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "wheel"]
docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"]
-full = ["Pillow", "PyCryptodome"]
-image = ["Pillow"]
+full = ["Pillow (>=8.0.0)", "PyCryptodome"]
+image = ["Pillow (>=8.0.0)"]
[[package]]
name = "pyreadline3"
version = "3.4.1"
description = "A python implementation of GNU readline."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5238,7 +5091,6 @@ files = [
name = "pysrt"
version = "1.1.2"
description = "SubRip (.srt) subtitle parser and writer"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5252,7 +5104,6 @@ chardet = "*"
name = "pytest"
version = "7.4.0"
description = "pytest: simple powerful testing with Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -5275,7 +5126,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
name = "pytest-cov"
version = "4.1.0"
description = "Pytest plugin for measuring coverage."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -5294,7 +5144,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale
name = "python-dateutil"
version = "2.8.2"
description = "Extensions to the standard Python datetime module"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
@@ -5309,7 +5158,6 @@ six = ">=1.5"
name = "python-docx"
version = "0.8.11"
description = "Create and update Microsoft Word .docx files."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5323,7 +5171,6 @@ lxml = ">=2.3.2"
name = "python-dotenv"
version = "1.0.0"
description = "Read key-value pairs from a .env file and set them as environment variables"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -5338,7 +5185,6 @@ cli = ["click (>=5.0)"]
name = "python-gitlab"
version = "3.15.0"
description = "Interact with GitLab API"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -5358,7 +5204,6 @@ yaml = ["PyYaml (>=5.2)"]
name = "python-jose"
version = "3.3.0"
description = "JOSE implementation in Python"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5380,7 +5225,6 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"]
name = "python-magic"
version = "0.4.27"
description = "File type identification using libmagic"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -5392,7 +5236,6 @@ files = [
name = "python-multipart"
version = "0.0.6"
description = "A streaming multipart parser for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -5407,7 +5250,6 @@ dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatc
name = "python-pptx"
version = "0.6.21"
description = "Generate and manipulate Open XML PowerPoint (.pptx) files"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5423,7 +5265,6 @@ XlsxWriter = ">=0.5.7"
name = "python-semantic-release"
version = "7.33.2"
description = "Automatic Semantic Versioning for Python projects"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5455,7 +5296,6 @@ test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock (
name = "pytz"
version = "2023.3"
description = "World timezone definitions, modern and historical"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5467,7 +5307,6 @@ files = [
name = "pywin32"
version = "306"
description = "Python for Window Extensions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5491,7 +5330,6 @@ files = [
name = "pywin32-ctypes"
version = "0.2.2"
description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -5503,7 +5341,6 @@ files = [
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -5553,7 +5390,6 @@ files = [
name = "pyzmq"
version = "25.1.0"
description = "Python bindings for 0MQ"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -5641,14 +5477,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
[[package]]
name = "qdrant-client"
-version = "1.3.1"
+version = "1.3.2"
description = "Client library for the Qdrant vector search engine"
-category = "main"
optional = false
python-versions = ">=3.7,<3.12"
files = [
- {file = "qdrant_client-1.3.1-py3-none-any.whl", hash = "sha256:9640855585d1f532094e342f07e0f2ef00652a60fc5d903c92ca3989a1e86318"},
- {file = "qdrant_client-1.3.1.tar.gz", hash = "sha256:a999358b10e611d71b4b04c6ded36a6cfc963e56b4c3f99d9c1a603ca524a82e"},
+ {file = "qdrant_client-1.3.2-py3-none-any.whl", hash = "sha256:66a076016fb9d33bec8170e96516d7e4a0ee5c611824cc9be18590ffeb3cf9aa"},
+ {file = "qdrant_client-1.3.2.tar.gz", hash = "sha256:6638c9eac027f2c0fdb1f63c3bd7b403fe8c3f73cb1f21fd15fd60f71012d537"},
]
[package.dependencies]
@@ -5657,15 +5492,13 @@ grpcio-tools = ">=1.41.0"
httpx = {version = ">=0.14.0", extras = ["http2"]}
numpy = {version = ">=1.21", markers = "python_version >= \"3.8\""}
portalocker = ">=2.7.0,<3.0.0"
-pydantic = ">=1.8,<2.0"
-typing-extensions = ">=4.0.0,<4.6.0"
+pydantic = ">=1.10.8"
urllib3 = ">=1.26.14,<2.0.0"
[[package]]
name = "readme-renderer"
version = "40.0"
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -5685,7 +5518,6 @@ md = ["cmarkgfm (>=0.8.0)"]
name = "realtime"
version = "1.0.0"
description = ""
-category = "main"
optional = false
python-versions = ">=3.8,<4.0"
files = [
@@ -5702,7 +5534,6 @@ websockets = ">=10.3,<11.0"
name = "regex"
version = "2023.6.3"
description = "Alternative regular expression module, to replace re."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -5800,7 +5631,6 @@ files = [
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -5822,7 +5652,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "requests-toolbelt"
version = "1.0.0"
description = "A utility belt for advanced users of python-requests"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -5837,7 +5666,6 @@ requests = ">=2.0.1,<3.0.0"
name = "rfc3986"
version = "1.5.0"
description = "Validating URI References per RFC 3986"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -5853,14 +5681,13 @@ idna2008 = ["idna"]
[[package]]
name = "rich"
-version = "13.4.2"
+version = "13.5.2"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
- {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"},
- {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"},
+ {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"},
+ {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"},
]
[package.dependencies]
@@ -5874,7 +5701,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "rsa"
version = "4.9"
description = "Pure-Python RSA implementation"
-category = "main"
optional = false
python-versions = ">=3.6,<4"
files = [
@@ -5889,7 +5715,6 @@ pyasn1 = ">=0.1.3"
name = "ruff"
version = "0.0.254"
description = "An extremely fast Python linter, written in Rust."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -5916,8 +5741,7 @@ files = [
name = "safetensors"
version = "0.3.1"
description = "Fast and Safe Tensor serialization"
-category = "main"
-optional = false
+optional = true
python-versions = "*"
files = [
{file = "safetensors-0.3.1-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:2ae9b7dd268b4bae6624729dac86deb82104820e9786429b0583e5168db2f770"},
@@ -5977,8 +5801,7 @@ torch = ["torch (>=1.10)"]
name = "scikit-learn"
version = "1.3.0"
description = "A set of python modules for machine learning and data mining"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.8"
files = [
{file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"},
@@ -6020,8 +5843,7 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (
name = "scipy"
version = "1.11.1"
description = "Fundamental algorithms for scientific computing in Python"
-category = "main"
-optional = false
+optional = true
python-versions = "<3.13,>=3.9"
files = [
{file = "scipy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04"},
@@ -6057,7 +5879,6 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo
name = "secretstorage"
version = "3.3.3"
description = "Python bindings to FreeDesktop.org Secret Service API"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6073,7 +5894,6 @@ jeepney = ">=0.6"
name = "semver"
version = "2.13.0"
description = "Python helper for Semantic Versioning (http://semver.org/)"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -6085,8 +5905,7 @@ files = [
name = "sentence-transformers"
version = "2.2.2"
description = "Multilingual text embeddings"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.6.0"
files = [
{file = "sentence-transformers-2.2.2.tar.gz", hash = "sha256:dbc60163b27de21076c9a30d24b5b7b6fa05141d68cf2553fa9a77bf79a29136"},
@@ -6108,8 +5927,7 @@ transformers = ">=4.6.0,<5.0.0"
name = "sentencepiece"
version = "0.1.99"
description = "SentencePiece python wrapper"
-category = "main"
-optional = false
+optional = true
python-versions = "*"
files = [
{file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0eb528e70571b7c02723e5804322469b82fe7ea418c96051d0286c0fa028db73"},
@@ -6163,7 +5981,6 @@ files = [
name = "setuptools"
version = "68.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6180,7 +5997,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
name = "shapely"
version = "1.8.5.post1"
description = "Geometric objects, predicates, and operations"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6237,7 +6053,6 @@ vectorized = ["numpy"]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -6249,7 +6064,6 @@ files = [
name = "slack-bolt"
version = "1.18.0"
description = "The Bolt Framework for Python"
-category = "main"
optional = true
python-versions = ">=3.6"
files = [
@@ -6271,7 +6085,6 @@ testing-without-asyncio = ["Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werk
name = "slack-sdk"
version = "3.21.3"
description = "The Slack API Platform SDK for Python"
-category = "main"
optional = true
python-versions = ">=3.6.0"
files = [
@@ -6287,7 +6100,6 @@ testing = ["Flask (>=1,<2)", "Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "We
name = "smmap"
version = "5.0.0"
description = "A pure Python implementation of a sliding window memory map manager"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6299,7 +6111,6 @@ files = [
name = "sniffio"
version = "1.3.0"
description = "Sniff out which async library your code is running under"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6311,7 +6122,6 @@ files = [
name = "soupsieve"
version = "2.4.1"
description = "A modern CSS selector implementation for Beautiful Soup."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6323,7 +6133,6 @@ files = [
name = "sqlalchemy"
version = "1.4.41"
description = "Database Abstraction Library"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
@@ -6371,7 +6180,7 @@ files = [
]
[package.dependencies]
-greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""}
+greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\")"}
[package.extras]
aiomysql = ["aiomysql", "greenlet (!=0.4.17)"]
@@ -6398,7 +6207,6 @@ sqlcipher = ["sqlcipher3-binary"]
name = "sqlalchemy2-stubs"
version = "0.0.2a35"
description = "Typing Stubs for SQLAlchemy 1.4"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6413,7 +6221,6 @@ typing-extensions = ">=3.7.4"
name = "sqlmodel"
version = "0.0.8"
description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness."
-category = "main"
optional = false
python-versions = ">=3.6.1,<4.0.0"
files = [
@@ -6430,7 +6237,6 @@ sqlalchemy2-stubs = "*"
name = "stack-data"
version = "0.6.2"
description = "Extract data from python stack frames and tracebacks for informative displays"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -6450,7 +6256,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
name = "starlette"
version = "0.27.0"
description = "The little ASGI library that shines."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6467,18 +6272,17 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam
[[package]]
name = "storage3"
-version = "0.5.2"
+version = "0.5.3"
description = "Supabase Storage client for Python."
-category = "main"
optional = false
python-versions = ">=3.8,<4.0"
files = [
- {file = "storage3-0.5.2-py3-none-any.whl", hash = "sha256:3aaba8cebf89eef6b5fc48739b8c8c8539461f2eed9ea1dc4c763dea10c6d009"},
- {file = "storage3-0.5.2.tar.gz", hash = "sha256:e9932fca869a8f9cdab9a20e5249439928cfe2d07c4524141b15fef1882a7f61"},
+ {file = "storage3-0.5.3-py3-none-any.whl", hash = "sha256:5dab88b8e91afadb72fbfde4ce8fb819d6324385624ceb9dca2927fb80b3b800"},
+ {file = "storage3-0.5.3.tar.gz", hash = "sha256:0c8b356d61eb021d8fcb9ca94d124754f2738c75a73babef91b2f1f60b2a13c0"},
]
[package.dependencies]
-httpx = ">=0.23,<0.24"
+httpx = ">=0.23,<0.25"
python-dateutil = ">=2.8.2,<3.0.0"
typing-extensions = ">=4.2.0,<5.0.0"
@@ -6486,7 +6290,6 @@ typing-extensions = ">=4.2.0,<5.0.0"
name = "strenum"
version = "0.4.15"
description = "An Enum that inherits from str."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -6503,7 +6306,6 @@ test = ["pylint", "pytest", "pytest-black", "pytest-cov", "pytest-pylint"]
name = "supabase"
version = "1.0.3"
description = "Supabase client for Python."
-category = "main"
optional = false
python-versions = ">=3.8,<4.0"
files = [
@@ -6524,7 +6326,6 @@ supafunc = ">=0.2.2,<0.3.0"
name = "supafunc"
version = "0.2.2"
description = "Library for Supabase Functions"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -6539,7 +6340,6 @@ httpx = ">=0.23.0,<0.24.0"
name = "sympy"
version = "1.12"
description = "Computer algebra system (CAS) in Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -6554,7 +6354,6 @@ mpmath = ">=0.19"
name = "tabulate"
version = "0.9.0"
description = "Pretty-print tabular data"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6569,7 +6368,6 @@ widechars = ["wcwidth"]
name = "tenacity"
version = "8.2.2"
description = "Retry code until it succeeds"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6582,14 +6380,13 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"]
[[package]]
name = "textual"
-version = "0.30.0"
+version = "0.31.0"
description = "Modern Text User Interface framework"
-category = "main"
optional = true
python-versions = ">=3.7,<4.0"
files = [
- {file = "textual-0.30.0-py3-none-any.whl", hash = "sha256:e87d587e4569236f3809d41955ed9556287dbedaca64724e1d6ad5adbb69c9c5"},
- {file = "textual-0.30.0.tar.gz", hash = "sha256:bf7045a7e9b7dc3ac589c38ce86ac31aecf0e76e8c8ce09aee474316bc2e2c03"},
+ {file = "textual-0.31.0-py3-none-any.whl", hash = "sha256:1243bccadb28e1ff46bdfe676ee25a6ce52756842bc9dca4d824e0bc4d7d9a42"},
+ {file = "textual-0.31.0.tar.gz", hash = "sha256:e2b43f1c26b21731ee83f558f8d6cb4f7163e3a713854c36cd7785139a0e4e51"},
]
[package.dependencies]
@@ -6602,8 +6399,7 @@ typing-extensions = ">=4.4.0,<5.0.0"
name = "threadpoolctl"
version = "3.2.0"
description = "threadpoolctl"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.8"
files = [
{file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"},
@@ -6614,7 +6410,6 @@ files = [
name = "tiktoken"
version = "0.4.0"
description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -6660,7 +6455,6 @@ blobfile = ["blobfile (>=2)"]
name = "tokenizers"
version = "0.13.3"
description = "Fast and Customizable Tokenizers"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -6715,7 +6509,6 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
-category = "main"
optional = true
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -6727,7 +6520,6 @@ files = [
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -6737,22 +6529,20 @@ files = [
[[package]]
name = "tomlkit"
-version = "0.11.8"
+version = "0.12.1"
description = "Style preserving TOML library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"},
- {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"},
+ {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"},
+ {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"},
]
[[package]]
name = "torch"
version = "2.0.1"
description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.8.0"
files = [
{file = "torch-2.0.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8ced00b3ba471856b993822508f77c98f48a458623596a4c43136158781e306a"},
@@ -6791,8 +6581,7 @@ opt-einsum = ["opt-einsum (>=3.3)"]
name = "torchvision"
version = "0.15.2"
description = "image and video datasets and models for torch deep learning"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.8"
files = [
{file = "torchvision-0.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7754088774e810c5672b142a45dcf20b1bd986a5a7da90f8660c43dc43fb850c"},
@@ -6819,7 +6608,7 @@ files = [
[package.dependencies]
numpy = "*"
-pillow = ">=5.3.0,<8.3.0 || >=8.4.0"
+pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0"
requests = "*"
torch = "2.0.1"
@@ -6830,7 +6619,6 @@ scipy = ["scipy"]
name = "tornado"
version = "6.3.2"
description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
-category = "dev"
optional = false
python-versions = ">= 3.8"
files = [
@@ -6851,7 +6639,6 @@ files = [
name = "tqdm"
version = "4.65.0"
description = "Fast, Extensible Progress Meter"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -6872,7 +6659,6 @@ telegram = ["requests"]
name = "traitlets"
version = "5.9.0"
description = "Traitlets Python configuration system"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -6888,8 +6674,7 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"]
name = "transformers"
version = "4.31.0"
description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
-category = "main"
-optional = false
+optional = true
python-versions = ">=3.8.0"
files = [
{file = "transformers-4.31.0-py3-none-any.whl", hash = "sha256:8487aab0195ce1c2a5ae189305118b9720daddbc7b688edb09ccd79e3b149f6b"},
@@ -6958,7 +6743,6 @@ vision = ["Pillow (<10.0.0)"]
name = "twine"
version = "3.8.0"
description = "Collection of utilities for publishing packages on PyPI"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -6982,7 +6766,6 @@ urllib3 = ">=1.26.0"
name = "typer"
version = "0.9.0"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -7004,7 +6787,6 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.
name = "types-appdirs"
version = "1.4.3.5"
description = "Typing stubs for appdirs"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -7014,21 +6796,19 @@ files = [
[[package]]
name = "types-cachetools"
-version = "5.3.0.5"
+version = "5.3.0.6"
description = "Typing stubs for cachetools"
-category = "main"
optional = false
python-versions = "*"
files = [
- {file = "types-cachetools-5.3.0.5.tar.gz", hash = "sha256:67fa46d51a650896770aee0ba80f0e61dc4a7d1373198eec1bc0622263eaa256"},
- {file = "types_cachetools-5.3.0.5-py3-none-any.whl", hash = "sha256:c0c5fa00199017d974c935bf043c467d5204e4f835141e489b48765b5ac1d960"},
+ {file = "types-cachetools-5.3.0.6.tar.gz", hash = "sha256:595f0342d246c8ba534f5a762cf4c2f60ecb61e8002b8b2277fd5cf791d4e851"},
+ {file = "types_cachetools-5.3.0.6-py3-none-any.whl", hash = "sha256:f7f8a25bfe306f2e6bc2ad0a2f949d9e72f2d91036d509c36d3810bf728bc6e1"},
]
[[package]]
name = "types-pillow"
version = "9.5.0.6"
description = "Typing stubs for Pillow"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -7040,7 +6820,6 @@ files = [
name = "types-pytz"
version = "2023.3.0.0"
description = "Typing stubs for pytz"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -7050,26 +6829,24 @@ files = [
[[package]]
name = "types-pyyaml"
-version = "6.0.12.10"
+version = "6.0.12.11"
description = "Typing stubs for PyYAML"
-category = "dev"
optional = false
python-versions = "*"
files = [
- {file = "types-PyYAML-6.0.12.10.tar.gz", hash = "sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97"},
- {file = "types_PyYAML-6.0.12.10-py3-none-any.whl", hash = "sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f"},
+ {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"},
+ {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"},
]
[[package]]
name = "types-requests"
-version = "2.31.0.1"
+version = "2.31.0.2"
description = "Typing stubs for requests"
-category = "dev"
optional = false
python-versions = "*"
files = [
- {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"},
- {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"},
+ {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"},
+ {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"},
]
[package.dependencies]
@@ -7077,33 +6854,30 @@ types-urllib3 = "*"
[[package]]
name = "types-urllib3"
-version = "1.26.25.13"
+version = "1.26.25.14"
description = "Typing stubs for urllib3"
-category = "dev"
optional = false
python-versions = "*"
files = [
- {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"},
- {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"},
+ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"},
+ {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"},
]
[[package]]
name = "typing-extensions"
-version = "4.5.0"
+version = "4.7.1"
description = "Backported and Experimental Type Hints for Python 3.7+"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
- {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
+ {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
+ {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
]
[[package]]
name = "typing-inspect"
version = "0.9.0"
description = "Runtime inspection utilities for typing module."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -7119,7 +6893,6 @@ typing-extensions = ">=3.7.4"
name = "tzdata"
version = "2023.3"
description = "Provider of IANA time zone data"
-category = "main"
optional = false
python-versions = ">=2"
files = [
@@ -7131,7 +6904,6 @@ files = [
name = "uc-micro-py"
version = "1.0.2"
description = "Micro subset of unicode data files for linkify-it-py projects."
-category = "main"
optional = true
python-versions = ">=3.7"
files = [
@@ -7146,7 +6918,6 @@ test = ["coverage", "pytest", "pytest-cov"]
name = "unstructured"
version = "0.7.12"
description = "A library that prepares raw documents for downstream ML tasks."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -7194,7 +6965,6 @@ wikipedia = ["wikipedia"]
name = "uritemplate"
version = "4.1.1"
description = "Implementation of RFC 6570 URI Templates"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -7206,7 +6976,6 @@ files = [
name = "urllib3"
version = "1.26.16"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
@@ -7223,7 +6992,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "uvicorn"
version = "0.22.0"
description = "The lightning-fast ASGI server."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7238,7 +7006,7 @@ h11 = ">=0.8"
httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
-uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
@@ -7249,7 +7017,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "uvloop"
version = "0.17.0"
description = "Fast implementation of asyncio event loop on top of libuv"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7294,7 +7061,6 @@ test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "my
name = "validators"
version = "0.20.0"
description = "Python Data Validation for Humansโข."
-category = "main"
optional = false
python-versions = ">=3.4"
files = [
@@ -7311,7 +7077,6 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"]
name = "watchfiles"
version = "0.19.0"
description = "Simple, modern and high performance file watching and code reload in python."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7346,7 +7111,6 @@ anyio = ">=3.0.0"
name = "wcwidth"
version = "0.2.6"
description = "Measures the displayed width of unicode strings in a terminal"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -7358,7 +7122,6 @@ files = [
name = "weaviate-client"
version = "3.22.1"
description = "A python native Weaviate client"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -7379,7 +7142,6 @@ grpc = ["grpcio", "grpcio-tools"]
name = "webencodings"
version = "0.5.1"
description = "Character encoding aliases for legacy web content"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -7391,7 +7153,6 @@ files = [
name = "websocket-client"
version = "1.6.1"
description = "WebSocket client for Python with low level API options"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7408,7 +7169,6 @@ test = ["websockets"]
name = "websockets"
version = "10.4"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7485,24 +7245,22 @@ files = [
[[package]]
name = "wheel"
-version = "0.40.0"
+version = "0.41.0"
description = "A built-package format for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
- {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"},
- {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"},
+ {file = "wheel-0.41.0-py3-none-any.whl", hash = "sha256:7e9be3bbd0078f6147d82ed9ed957e323e7708f57e134743d2edef3a7b7972a9"},
+ {file = "wheel-0.41.0.tar.gz", hash = "sha256:55a0f0a5a84869bce5ba775abfd9c462e3a6b1b7b7ec69d72c0b83d673a5114d"},
]
[package.extras]
-test = ["pytest (>=6.0.0)"]
+test = ["pytest (>=6.0.0)", "setuptools (>=65)"]
[[package]]
name = "wikipedia"
version = "1.4.0"
description = "Wikipedia API for Python"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -7517,7 +7275,6 @@ requests = ">=2.0.0,<3.0.0"
name = "win32-setctime"
version = "1.1.0"
description = "A small Python utility to set file creation time on Windows"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -7532,7 +7289,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
name = "wrapt"
version = "1.15.0"
description = "Module for decorators, wrappers and monkey patching."
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
files = [
@@ -7617,7 +7373,6 @@ files = [
name = "xlrd"
version = "2.0.1"
description = "Library for developers to extract data from Microsoft Excel (tm) .xls spreadsheet files"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
@@ -7634,7 +7389,6 @@ test = ["pytest", "pytest-cov"]
name = "xlsxwriter"
version = "3.1.2"
description = "A Python module for creating Excel XLSX files."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -7646,7 +7400,6 @@ files = [
name = "yarl"
version = "1.9.2"
description = "Yet another URL library"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7734,7 +7487,6 @@ multidict = ">=4.0"
name = "zipp"
version = "3.16.2"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -7750,7 +7502,6 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
name = "zstandard"
version = "0.21.0"
description = "Zstandard bindings for Python"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -7806,9 +7557,11 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\
cffi = ["cffi (>=1.11)"]
[extras]
+all = []
deploy = ["langchain-serve"]
+local = ["ctransformers", "llama-cpp-python", "sentence-transformers"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.9,<3.11"
-content-hash = "8c0a6e271d438bbd06bb5ad4644e4753e71d61b26565819dc9e8a2bcc1c05de0"
+content-hash = "154238df4e8b249196011f592d63e2fad0e18316960e400037f54453c813d47a"
diff --git a/pyproject.toml b/pyproject.toml
index 0341229f5..849130a74 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "langflow"
-version = "0.3.3"
+version = "0.4.0"
description = "A Python package with a built-in web application"
authors = ["Logspace "]
maintainers = [
@@ -32,14 +32,14 @@ beautifulsoup4 = "^4.12.2"
google-search-results = "^2.4.1"
google-api-python-client = "^2.79.0"
typer = "^0.9.0"
-gunicorn = "^20.1.0"
-langchain = "^0.0.237"
+gunicorn = "^21.1.0"
+langchain = "^0.0.250"
openai = "^0.27.8"
pandas = "^2.0.0"
chromadb = "^0.3.21"
-huggingface-hub = "^0.15.0"
+huggingface-hub = { version = "^0.16.0", extras = ["inference"] }
rich = "^13.4.2"
-llama-cpp-python = "~0.1.0"
+llama-cpp-python = { version = "~0.1.0", optional = true }
networkx = "^3.1"
unstructured = "^0.7.0"
pypdf = "^3.11.0"
@@ -56,8 +56,8 @@ qdrant-client = "^1.3.0"
websockets = "^10.3"
weaviate-client = "^3.21.0"
jina = "3.15.2"
-sentence-transformers = "^2.2.2"
-ctransformers = "^0.2.10"
+sentence-transformers = { version = "^2.2.2", optional = true }
+ctransformers = { version = "^0.2.10", optional = true }
cohere = "^4.11.0"
python-multipart = "^0.0.6"
sqlmodel = "^0.0.8"
@@ -75,8 +75,9 @@ certifi = "^2023.5.7"
google-cloud-aiplatform = "^1.26.1"
psycopg = "^3.1.9"
psycopg-binary = "^3.1.9"
+fastavro = "^1.8.0"
-[tool.poetry.dev-dependencies]
+[tool.poetry.group.dev.dependencies]
black = "^23.1.0"
ipykernel = "^6.21.2"
mypy = "^1.1.1"
@@ -94,6 +95,9 @@ types-pyyaml = "^6.0.12.8"
[tool.poetry.extras]
deploy = ["langchain-serve"]
+local = ["llama-cpp-python", "sentence-transformers", "ctransformers"]
+all = ["deploy", "local"]
+
[tool.pytest.ini_options]
minversion = "6.0"
diff --git a/src/backend/langflow/__init__.py b/src/backend/langflow/__init__.py
index f6d1facdf..5920369e2 100644
--- a/src/backend/langflow/__init__.py
+++ b/src/backend/langflow/__init__.py
@@ -1,6 +1,7 @@
from importlib import metadata
-from langflow.cache import cache_manager # noqa: E402
-from langflow.processing.process import load_flow_from_json # noqa: E402
+from langflow.cache import cache_manager
+from langflow.processing.process import load_flow_from_json
+from langflow.interface.custom.custom_component import CustomComponent
try:
__version__ = metadata.version(__package__)
@@ -9,5 +10,4 @@ except metadata.PackageNotFoundError:
__version__ = ""
del metadata # optional, avoids polluting the results of dir(__package__)
-
-__all__ = ["load_flow_from_json", "cache_manager"]
+__all__ = ["load_flow_from_json", "cache_manager", "CustomComponent"]
diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py
index 385e74932..58789908a 100644
--- a/src/backend/langflow/__main__.py
+++ b/src/backend/langflow/__main__.py
@@ -2,7 +2,8 @@ import os
import sys
import time
import httpx
-from multiprocess import Process, cpu_count # type: ignore
+from langflow.utils.util import get_number_of_workers
+from multiprocess import Process # type: ignore
import platform
from pathlib import Path
from typing import Optional
@@ -20,18 +21,13 @@ from dotenv import load_dotenv
app = typer.Typer()
-def get_number_of_workers(workers=None):
- if workers == -1:
- workers = (cpu_count() * 2) + 1
- return workers
-
-
def update_settings(
config: str,
cache: str,
dev: bool = False,
database_url: Optional[str] = None,
remove_api_keys: bool = False,
+ components_path: Optional[Path] = None,
):
"""Update the settings from a config file."""
@@ -39,13 +35,19 @@ def update_settings(
database_url = database_url or os.getenv("langflow_database_url")
if config:
+ logger.debug(f"Loading settings from {config}")
settings.update_from_yaml(config, dev=dev)
if database_url:
settings.update_settings(database_url=database_url)
if remove_api_keys:
+ logger.debug(f"Setting remove_api_keys to {remove_api_keys}")
settings.update_settings(remove_api_keys=remove_api_keys)
if cache:
+ logger.debug(f"Setting cache to {cache}")
settings.update_settings(cache=cache)
+ if components_path:
+ logger.debug(f"Adding component path {components_path}")
+ settings.update_settings(components_path=components_path)
def load_params():
@@ -120,10 +122,15 @@ def serve(
"127.0.0.1", help="Host to bind the server to.", envvar="LANGFLOW_HOST"
),
workers: int = typer.Option(
- 1, help="Number of worker processes.", envvar="LANGFLOW_WORKERS"
+ 2, help="Number of worker processes.", envvar="LANGFLOW_WORKERS"
),
- timeout: int = typer.Option(60, help="Worker timeout in seconds."),
+ timeout: int = typer.Option(300, help="Worker timeout in seconds."),
port: int = typer.Option(7860, help="Port to listen on.", envvar="LANGFLOW_PORT"),
+ components_path: Optional[Path] = typer.Option(
+ Path(__file__).parent / "components",
+ help="Path to the directory containing custom components.",
+ envvar="LANGFLOW_COMPONENTS_PATH",
+ ),
config: str = typer.Option("config.yaml", help="Path to the configuration file."),
# .env file param
env_file: Path = typer.Option(
@@ -181,6 +188,7 @@ def serve(
database_url=database_url,
remove_api_keys=remove_api_keys,
cache=cache,
+ components_path=components_path,
)
# create path object if path is provided
static_files_dir: Optional[Path] = Path(path) if path else None
@@ -298,7 +306,7 @@ def run_langflow(host, port, log_level, options, app):
Run Langflow server on localhost
"""
try:
- if platform.system() in ["Darwin", "Windows"]:
+ if platform.system() in ["Windows"]:
# Run using uvicorn on MacOS and Windows
# Windows doesn't support gunicorn
# MacOS requires an env variable to be set to use gunicorn
diff --git a/src/backend/langflow/api/router.py b/src/backend/langflow/api/router.py
index f090abe74..b9c51c11e 100644
--- a/src/backend/langflow/api/router.py
+++ b/src/backend/langflow/api/router.py
@@ -6,6 +6,7 @@ from langflow.api.v1 import (
validate_router,
flows_router,
flow_styles_router,
+ component_router,
)
router = APIRouter(
@@ -14,5 +15,6 @@ router = APIRouter(
router.include_router(chat_router)
router.include_router(endpoints_router)
router.include_router(validate_router)
+router.include_router(component_router)
router.include_router(flows_router)
router.include_router(flow_styles_router)
diff --git a/src/backend/langflow/api/utils.py b/src/backend/langflow/api/utils.py
index 2384a4089..91fa93ea4 100644
--- a/src/backend/langflow/api/utils.py
+++ b/src/backend/langflow/api/utils.py
@@ -57,3 +57,12 @@ def build_input_keys_response(langchain_object, artifacts):
input_keys_response["template"] = langchain_object.prompt.template
return input_keys_response
+
+
+def merge_nested_dicts(dict1, dict2):
+ for key, value in dict2.items():
+ if isinstance(value, dict) and isinstance(dict1.get(key), dict):
+ dict1[key] = merge_nested_dicts(dict1[key], value)
+ else:
+ dict1[key] = value
+ return dict1
diff --git a/src/backend/langflow/api/v1/__init__.py b/src/backend/langflow/api/v1/__init__.py
index f18f90e42..f001152a9 100644
--- a/src/backend/langflow/api/v1/__init__.py
+++ b/src/backend/langflow/api/v1/__init__.py
@@ -3,10 +3,12 @@ from langflow.api.v1.validate import router as validate_router
from langflow.api.v1.chat import router as chat_router
from langflow.api.v1.flows import router as flows_router
from langflow.api.v1.flow_styles import router as flow_styles_router
+from langflow.api.v1.components import router as component_router
__all__ = [
"chat_router",
"endpoints_router",
+ "component_router",
"validate_router",
"flows_router",
"flow_styles_router",
diff --git a/src/backend/langflow/api/v1/callback.py b/src/backend/langflow/api/v1/callback.py
index deddde47f..69dbf5082 100644
--- a/src/backend/langflow/api/v1/callback.py
+++ b/src/backend/langflow/api/v1/callback.py
@@ -91,8 +91,8 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
# This is to emulate the stream of tokens
for resp in resps:
await self.websocket.send_json(resp.dict())
- except Exception as e:
- logger.error(e)
+ except Exception as exc:
+ logger.error(f"Error sending response: {exc}")
async def on_tool_error(
self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any
diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py
index 43f10a54b..4248bcebd 100644
--- a/src/backend/langflow/api/v1/chat.py
+++ b/src/backend/langflow/api/v1/chat.py
@@ -26,7 +26,7 @@ async def chat(client_id: str, websocket: WebSocket):
message = "Please, build the flow before sending messages"
await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=message)
except WebSocketException as exc:
- logger.error(exc)
+ logger.error(f"Websocket error: {exc}")
await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=str(exc))
@@ -56,7 +56,7 @@ async def init_build(graph_data: dict, flow_id: str):
return InitResponse(flowId=flow_id)
except Exception as exc:
- logger.error(exc)
+ logger.error(f"Error initializing build: {exc}")
return HTTPException(status_code=500, detail=str(exc))
@@ -74,7 +74,7 @@ async def build_status(flow_id: str):
)
except Exception as exc:
- logger.error(exc)
+ logger.error(f"Error checking build status: {exc}")
return HTTPException(status_code=500, detail=str(exc))
@@ -177,5 +177,5 @@ async def stream_build(flow_id: str):
try:
return StreamingResponse(event_stream(flow_id), media_type="text/event-stream")
except Exception as exc:
- logger.error(exc)
+ logger.error(f"Error streaming build: {exc}")
raise HTTPException(status_code=500, detail=str(exc))
diff --git a/src/backend/langflow/api/v1/components.py b/src/backend/langflow/api/v1/components.py
new file mode 100644
index 000000000..1e34da2aa
--- /dev/null
+++ b/src/backend/langflow/api/v1/components.py
@@ -0,0 +1,77 @@
+from datetime import timezone
+from typing import List
+from uuid import UUID
+from langflow.database.models.component import Component, ComponentModel
+from langflow.database.base import get_session
+from sqlmodel import Session, select
+from fastapi import APIRouter, Depends, HTTPException
+from sqlalchemy.exc import IntegrityError
+from datetime import datetime
+
+
+COMPONENT_NOT_FOUND = "Component not found"
+COMPONENT_ALREADY_EXISTS = "A component with the same id already exists."
+COMPONENT_DELETED = "Component deleted"
+
+
+router = APIRouter(prefix="/components", tags=["Components"])
+
+
+@router.post("/", response_model=Component)
+def create_component(component: ComponentModel, db: Session = Depends(get_session)):
+ db_component = Component(**component.dict())
+ try:
+ db.add(db_component)
+ db.commit()
+ db.refresh(db_component)
+ except IntegrityError as e:
+ db.rollback()
+ raise HTTPException(
+ status_code=400,
+ detail=COMPONENT_ALREADY_EXISTS,
+ ) from e
+ return db_component
+
+
+@router.get("/{component_id}", response_model=Component)
+def read_component(component_id: UUID, db: Session = Depends(get_session)):
+ if component := db.get(Component, component_id):
+ return component
+ else:
+ raise HTTPException(status_code=404, detail=COMPONENT_NOT_FOUND)
+
+
+@router.get("/", response_model=List[Component])
+def read_components(skip: int = 0, limit: int = 50, db: Session = Depends(get_session)):
+ query = select(Component)
+ query = query.offset(skip).limit(limit)
+
+ return db.execute(query).fetchall()
+
+
+@router.patch("/{component_id}", response_model=Component)
+def update_component(
+ component_id: UUID, component: ComponentModel, db: Session = Depends(get_session)
+):
+ db_component = db.get(Component, component_id)
+ if not db_component:
+ raise HTTPException(status_code=404, detail=COMPONENT_NOT_FOUND)
+ component_data = component.dict(exclude_unset=True)
+
+ for key, value in component_data.items():
+ setattr(db_component, key, value)
+
+ db_component.update_at = datetime.now(timezone.utc)
+ db.commit()
+ db.refresh(db_component)
+ return db_component
+
+
+@router.delete("/{component_id}")
+def delete_component(component_id: UUID, db: Session = Depends(get_session)):
+ component = db.get(Component, component_id)
+ if not component:
+ raise HTTPException(status_code=404, detail=COMPONENT_NOT_FOUND)
+ db.delete(component)
+ db.commit()
+ return {"detail": COMPONENT_DELETED}
diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py
index 13cba6c2c..f11a23340 100644
--- a/src/backend/langflow/api/v1/endpoints.py
+++ b/src/backend/langflow/api/v1/endpoints.py
@@ -1,17 +1,34 @@
-from typing import Optional
+from http import HTTPStatus
+from typing import Annotated, Optional
+
from langflow.cache.utils import save_uploaded_file
from langflow.database.models.flow import Flow
from langflow.processing.process import process_graph_cached, process_tweaks
from langflow.utils.logger import logger
+from langflow.settings import settings
-from fastapi import APIRouter, Depends, HTTPException, UploadFile
+from fastapi import APIRouter, Depends, HTTPException, UploadFile, Body
+
+from langflow.interface.custom.custom_component import CustomComponent
+
+from langflow.interface.custom.directory_reader import (
+ CustomComponentPathValueError,
+)
from langflow.api.v1.schemas import (
ProcessResponse,
UploadFileResponse,
+ CustomComponentCode,
+)
+
+from langflow.api.utils import merge_nested_dicts
+
+from langflow.interface.types import (
+ build_langchain_types_dict,
+ build_langchain_template_custom_component,
+ build_langchain_custom_component_list_from_path,
)
-from langflow.interface.types import langchain_types_dict
from langflow.database.base import get_session
from sqlmodel import Session
@@ -21,7 +38,47 @@ router = APIRouter(tags=["Base"])
@router.get("/all")
def get_all():
- return langchain_types_dict
+ native_components = build_langchain_types_dict()
+
+ # custom_components is a list of dicts
+ # need to merge all the keys into one dict
+ custom_components_from_file = {}
+ if settings.components_path:
+ custom_component_dicts = [
+ build_langchain_custom_component_list_from_path(str(path))
+ for path in settings.components_path
+ ]
+ for custom_component_dict in custom_component_dicts:
+ custom_components_from_file = merge_nested_dicts(
+ custom_components_from_file, custom_component_dict
+ )
+ return merge_nested_dicts(native_components, custom_components_from_file)
+
+
+@router.get("/load_custom_component_from_path")
+def get_load_custom_component_from_path(path: str):
+ try:
+ data = build_langchain_custom_component_list_from_path(path)
+ except CustomComponentPathValueError as err:
+ raise HTTPException(
+ status_code=400,
+ detail={"error": type(err).__name__, "traceback": str(err)},
+ ) from err
+
+ return data
+
+
+@router.get("/load_custom_component_from_path_TEST")
+def get_load_custom_component_from_path_test(path: str):
+ from langflow.interface.custom.directory_reader import (
+ DirectoryReader,
+ )
+
+ reader = DirectoryReader(path, False)
+ file_list = reader.get_files()
+ data = reader.build_component_menu_list(file_list)
+
+ return reader.filter_loaded_components(data, True)
# For backwards compatibility we will keep the old endpoint
@@ -31,6 +88,7 @@ async def process_flow(
flow_id: str,
inputs: Optional[dict] = None,
tweaks: Optional[dict] = None,
+ clear_cache: Annotated[bool, Body(embed=True)] = False, # noqa: F821
session: Session = Depends(get_session),
):
"""
@@ -50,7 +108,7 @@ async def process_flow(
graph_data = process_tweaks(graph_data, tweaks)
except Exception as exc:
logger.error(f"Error processing tweaks: {exc}")
- response = process_graph_cached(graph_data, inputs)
+ response = process_graph_cached(graph_data, inputs, clear_cache)
return ProcessResponse(
result=response,
)
@@ -60,7 +118,11 @@ async def process_flow(
raise HTTPException(status_code=500, detail=str(e)) from e
-@router.post("/upload/{flow_id}", response_model=UploadFileResponse, status_code=201)
+@router.post(
+ "/upload/{flow_id}",
+ response_model=UploadFileResponse,
+ status_code=HTTPStatus.CREATED,
+)
async def create_upload_file(file: UploadFile, flow_id: str):
# Cache file
try:
@@ -81,3 +143,13 @@ def get_version():
from langflow import __version__
return {"version": __version__}
+
+
+@router.post("/custom_component", status_code=HTTPStatus.OK)
+async def custom_component(
+ raw_code: CustomComponentCode,
+):
+ extractor = CustomComponent(code=raw_code.code)
+ extractor.is_check_valid()
+
+ return build_langchain_template_custom_component(extractor)
diff --git a/src/backend/langflow/api/v1/schemas.py b/src/backend/langflow/api/v1/schemas.py
index e4b9a6e84..0148dac6d 100644
--- a/src/backend/langflow/api/v1/schemas.py
+++ b/src/backend/langflow/api/v1/schemas.py
@@ -116,3 +116,20 @@ class StreamData(BaseModel):
def __str__(self) -> str:
return f"event: {self.event}\ndata: {json.dumps(self.data)}\n\n"
+
+
+class CustomComponentCode(BaseModel):
+ code: str
+
+
+class CustomComponentResponseError(BaseModel):
+ detail: str
+ traceback: str
+
+
+class ComponentListCreate(BaseModel):
+ flows: List[FlowCreate]
+
+
+class ComponentListRead(BaseModel):
+ flows: List[FlowRead]
diff --git a/src/backend/langflow/chat/manager.py b/src/backend/langflow/chat/manager.py
index 33de784b5..1e93174e2 100644
--- a/src/backend/langflow/chat/manager.py
+++ b/src/backend/langflow/chat/manager.py
@@ -111,7 +111,7 @@ class ChatManager:
# This is to catch the following error:
# Unexpected ASGI message 'websocket.close', after sending 'websocket.close'
if "after sending" in str(exc):
- logger.error(exc)
+ logger.error(f"Error closing connection: {exc}")
async def process_message(
self, client_id: str, payload: Dict, langchain_object: Any
@@ -197,13 +197,13 @@ class ChatManager:
langchain_object = self.in_memory_cache.get(client_id)
await self.process_message(client_id, payload, langchain_object)
- except Exception as e:
+ except Exception as exc:
# Handle any exceptions that might occur
- logger.error(e)
+ logger.error(f"Error handling websocket: {exc}")
await self.close_connection(
client_id=client_id,
code=status.WS_1011_INTERNAL_ERROR,
- reason=str(e)[:120],
+ reason=str(exc)[:120],
)
finally:
try:
@@ -212,6 +212,6 @@ class ChatManager:
code=status.WS_1000_NORMAL_CLOSURE,
reason="Client disconnected",
)
- except Exception as e:
- logger.error(e)
+ except Exception as exc:
+ logger.error(f"Error closing connection: {exc}")
self.disconnect(client_id)
diff --git a/src/backend/langflow/config.yaml b/src/backend/langflow/config.yaml
index 3116e74c7..63e8cdf99 100644
--- a/src/backend/langflow/config.yaml
+++ b/src/backend/langflow/config.yaml
@@ -153,6 +153,8 @@ memories:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory"
MongoDBChatMessageHistory:
documentation: "https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history"
+ MotorheadMemory:
+ documentation: "https://python.langchain.com/docs/integrations/memory/motorhead_memory"
prompts:
ChatMessagePromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"
@@ -290,3 +292,6 @@ output_parsers:
documentation: "https://python.langchain.com/docs/modules/model_io/output_parsers/structured"
ResponseSchema:
documentation: "https://python.langchain.com/docs/modules/model_io/output_parsers/structured"
+custom_components:
+ CustomComponent:
+ documentation: ""
diff --git a/src/backend/langflow/custom/customs.py b/src/backend/langflow/custom/customs.py
index 58ef1b508..55d855197 100644
--- a/src/backend/langflow/custom/customs.py
+++ b/src/backend/langflow/custom/customs.py
@@ -31,6 +31,9 @@ CUSTOM_NODES = {
"MidJourneyPromptChain": frontend_node.chains.MidJourneyPromptChainNode(),
"load_qa_chain": frontend_node.chains.CombineDocsChainNode(),
},
+ "custom_components": {
+ "CustomComponent": frontend_node.custom_components.CustomComponentFrontendNode(),
+ },
}
diff --git a/src/backend/langflow/database/base.py b/src/backend/langflow/database/base.py
index 256434523..338298a6b 100644
--- a/src/backend/langflow/database/base.py
+++ b/src/backend/langflow/database/base.py
@@ -1,3 +1,4 @@
+from contextlib import contextmanager
from langflow.settings import settings
from sqlmodel import SQLModel, Session, create_engine
from langflow.utils.logger import logger
@@ -32,6 +33,19 @@ def create_db_and_tables():
logger.debug("Database and tables created successfully")
-def get_session():
- with Session(engine) as session:
+@contextmanager
+def session_getter():
+ try:
+ session = Session(engine)
+ yield session
+ except Exception as e:
+ print("Session rollback because of exception:", e)
+ session.rollback()
+ raise
+ finally:
+ session.close()
+
+
+def get_session():
+ with session_getter() as session:
yield session
diff --git a/src/backend/langflow/database/models/component.py b/src/backend/langflow/database/models/component.py
new file mode 100644
index 000000000..bb2408cdb
--- /dev/null
+++ b/src/backend/langflow/database/models/component.py
@@ -0,0 +1,29 @@
+from langflow.database.models.base import SQLModelSerializable, SQLModel
+from sqlmodel import Field
+from typing import Optional
+from datetime import datetime
+import uuid
+
+
+class Component(SQLModelSerializable, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ frontend_node_id: uuid.UUID = Field(index=True)
+ name: str = Field(index=True)
+ description: Optional[str] = Field(default=None)
+ python_code: Optional[str] = Field(default=None)
+ return_type: Optional[str] = Field(default=None)
+ is_disabled: bool = Field(default=False)
+ is_read_only: bool = Field(default=False)
+ create_at: datetime = Field(default_factory=datetime.utcnow)
+ update_at: datetime = Field(default_factory=datetime.utcnow)
+
+
+class ComponentModel(SQLModel):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4)
+ frontend_node_id: uuid.UUID = Field(default=uuid.uuid4())
+ name: str = Field(default="")
+ description: Optional[str] = None
+ python_code: Optional[str] = None
+ return_type: Optional[str] = None
+ is_disabled: bool = False
+ is_read_only: bool = False
diff --git a/src/backend/langflow/graph/graph/base.py b/src/backend/langflow/graph/graph/base.py
index 0d93dd0db..99b4e2b3d 100644
--- a/src/backend/langflow/graph/graph/base.py
+++ b/src/backend/langflow/graph/graph/base.py
@@ -77,6 +77,8 @@ class Graph:
def _validate_nodes(self) -> None:
"""Check that all nodes have edges"""
+ if len(self.nodes) == 1:
+ return
for node in self.nodes:
if not self._validate_node(node):
raise ValueError(
diff --git a/src/backend/langflow/graph/graph/constants.py b/src/backend/langflow/graph/graph/constants.py
index a2fd287eb..5e5c3b709 100644
--- a/src/backend/langflow/graph/graph/constants.py
+++ b/src/backend/langflow/graph/graph/constants.py
@@ -14,7 +14,7 @@ from langflow.interface.vector_store.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator
from langflow.interface.output_parsers.base import output_parser_creator
from langflow.interface.retrievers.base import retriever_creator
-
+from langflow.interface.custom.base import custom_component_creator
from typing import Dict, Type
@@ -32,5 +32,6 @@ VERTEX_TYPE_MAP: Dict[str, Type[Vertex]] = {
**{t: types.DocumentLoaderVertex for t in documentloader_creator.to_list()},
**{t: types.TextSplitterVertex for t in textsplitter_creator.to_list()},
**{t: types.OutputParserVertex for t in output_parser_creator.to_list()},
+ **{t: types.CustomComponentVertex for t in custom_component_creator.to_list()},
**{t: types.RetrieverVertex for t in retriever_creator.to_list()},
}
diff --git a/src/backend/langflow/graph/vertex/types.py b/src/backend/langflow/graph/vertex/types.py
index 20ec3e66d..5aee7b14c 100644
--- a/src/backend/langflow/graph/vertex/types.py
+++ b/src/backend/langflow/graph/vertex/types.py
@@ -239,3 +239,12 @@ class PromptVertex(Vertex):
class OutputParserVertex(Vertex):
def __init__(self, data: Dict):
super().__init__(data, base_type="output_parsers")
+
+
+class CustomComponentVertex(Vertex):
+ def __init__(self, data: Dict):
+ super().__init__(data, base_type="custom_components")
+
+ def _built_object_repr(self):
+ if self.artifacts and "repr" in self.artifacts:
+ return self.artifacts["repr"] or super()._built_object_repr()
diff --git a/src/backend/langflow/interface/base.py b/src/backend/langflow/interface/base.py
index 6e1522dd2..e6a28bf7d 100644
--- a/src/backend/langflow/interface/base.py
+++ b/src/backend/langflow/interface/base.py
@@ -34,7 +34,7 @@ class LangChainTypeCreator(BaseModel, ABC):
for name, value_dict in type_settings.items()
}
except AttributeError as exc:
- logger.error(exc)
+ logger.error(f"Error getting settings for {self.type_name}: {exc}")
self.name_docs_dict = {}
return self.name_docs_dict
diff --git a/src/backend/langflow/interface/custom/__init__.py b/src/backend/langflow/interface/custom/__init__.py
new file mode 100644
index 000000000..5b87e9fa3
--- /dev/null
+++ b/src/backend/langflow/interface/custom/__init__.py
@@ -0,0 +1,4 @@
+from langflow.interface.custom.base import CustomComponentCreator
+from langflow.interface.custom.custom_component import CustomComponent
+
+__all__ = ["CustomComponentCreator", "CustomComponent"]
diff --git a/src/backend/langflow/interface/custom/base.py b/src/backend/langflow/interface/custom/base.py
new file mode 100644
index 000000000..06e874fa7
--- /dev/null
+++ b/src/backend/langflow/interface/custom/base.py
@@ -0,0 +1,48 @@
+from typing import Any, Dict, List, Optional, Type
+
+
+from langflow.interface.base import LangChainTypeCreator
+
+# from langflow.interface.custom.custom import CustomComponent
+from langflow.interface.custom.custom_component import CustomComponent
+from langflow.template.frontend_node.custom_components import (
+ CustomComponentFrontendNode,
+)
+from langflow.utils.logger import logger
+
+# Assuming necessary imports for Field, Template, and FrontendNode classes
+
+
+class CustomComponentCreator(LangChainTypeCreator):
+ type_name: str = "custom_components"
+
+ @property
+ def frontend_node_class(self) -> Type[CustomComponentFrontendNode]:
+ return CustomComponentFrontendNode
+
+ @property
+ def type_to_loader_dict(self) -> Dict:
+ if self.type_dict is None:
+ self.type_dict: dict[str, Any] = {
+ "CustomComponent": CustomComponent,
+ }
+ return self.type_dict
+
+ def get_signature(self, name: str) -> Optional[Dict]:
+ from langflow.custom.customs import get_custom_nodes
+
+ try:
+ if name in get_custom_nodes(self.type_name).keys():
+ return get_custom_nodes(self.type_name)[name]
+ except ValueError as exc:
+ raise ValueError(f"CustomComponent {name} not found: {exc}") from exc
+ except AttributeError as exc:
+ logger.error(f"CustomComponent {name} not loaded: {exc}")
+ return None
+ return None
+
+ def to_list(self) -> List[str]:
+ return list(self.type_to_loader_dict.keys())
+
+
+custom_component_creator = CustomComponentCreator()
diff --git a/src/backend/langflow/interface/custom/code_parser.py b/src/backend/langflow/interface/custom/code_parser.py
new file mode 100644
index 000000000..d42f82635
--- /dev/null
+++ b/src/backend/langflow/interface/custom/code_parser.py
@@ -0,0 +1,272 @@
+import ast
+import inspect
+import traceback
+
+from typing import Dict, Any, List, Type, Union
+from fastapi import HTTPException
+from langflow.interface.custom.schema import CallableCodeDetails, ClassCodeDetails
+
+
+class CodeSyntaxError(HTTPException):
+ pass
+
+
+class CodeParser:
+ """
+ A parser for Python source code, extracting code details.
+ """
+
+ def __init__(self, code: Union[str, Type]) -> None:
+ """
+ Initializes the parser with the provided code.
+ """
+ if isinstance(code, type):
+ if not inspect.isclass(code):
+ raise ValueError("The provided code must be a class.")
+ # If the code is a class, get its source code
+ code = inspect.getsource(code)
+ self.code = code
+ self.data: Dict[str, Any] = {
+ "imports": [],
+ "functions": [],
+ "classes": [],
+ "global_vars": [],
+ }
+ self.handlers = {
+ ast.Import: self.parse_imports,
+ ast.ImportFrom: self.parse_imports,
+ ast.FunctionDef: self.parse_functions,
+ ast.ClassDef: self.parse_classes,
+ ast.Assign: self.parse_global_vars,
+ }
+
+ def __get_tree(self):
+ """
+ Parses the provided code to validate its syntax.
+ It tries to parse the code into an abstract syntax tree (AST).
+ """
+ try:
+ tree = ast.parse(self.code)
+ except SyntaxError as err:
+ raise CodeSyntaxError(
+ status_code=400,
+ detail={"error": err.msg, "traceback": traceback.format_exc()},
+ ) from err
+
+ return tree
+
+ def parse_node(self, node: Union[ast.stmt, ast.AST]) -> None:
+ """
+ Parses an AST node and updates the data
+ dictionary with the relevant information.
+ """
+ if handler := self.handlers.get(type(node)): # type: ignore
+ handler(node) # type: ignore
+
+ def parse_imports(self, node: Union[ast.Import, ast.ImportFrom]) -> None:
+ """
+ Extracts "imports" from the code.
+ """
+ if isinstance(node, ast.Import):
+ for alias in node.names:
+ self.data["imports"].append(alias.name)
+ elif isinstance(node, ast.ImportFrom):
+ for alias in node.names:
+ self.data["imports"].append((node.module, alias.name))
+
+ def parse_functions(self, node: ast.FunctionDef) -> None:
+ """
+ Extracts "functions" from the code.
+ """
+ self.data["functions"].append(self.parse_callable_details(node))
+
+ def parse_arg(self, arg, default):
+ """
+ Parses an argument and its default value.
+ """
+ arg_dict = {"name": arg.arg, "default": default}
+ if arg.annotation:
+ arg_dict["type"] = ast.unparse(arg.annotation)
+ return arg_dict
+
+ def parse_callable_details(self, node: ast.FunctionDef) -> Dict[str, Any]:
+ """
+ Extracts details from a single function or method node.
+ """
+ func = CallableCodeDetails(
+ name=node.name,
+ doc=ast.get_docstring(node),
+ args=[],
+ body=[],
+ return_type=ast.unparse(node.returns) if node.returns else None,
+ )
+
+ func.args = self.parse_function_args(node)
+ func.body = self.parse_function_body(node)
+
+ return func.dict()
+
+ def parse_function_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
+ """
+ Parses the arguments of a function or method node.
+ """
+ args = []
+
+ args += self.parse_positional_args(node)
+ args += self.parse_varargs(node)
+ args += self.parse_keyword_args(node)
+ args += self.parse_kwargs(node)
+
+ return args
+
+ def parse_positional_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
+ """
+ Parses the positional arguments of a function or method node.
+ """
+ num_args = len(node.args.args)
+ num_defaults = len(node.args.defaults)
+ num_missing_defaults = num_args - num_defaults
+ missing_defaults = [None] * num_missing_defaults
+ default_values = [
+ ast.unparse(default).strip("'") if default else None
+ for default in node.args.defaults
+ ]
+ # Now check all default values to see if there
+ # are any "None" values in the middle
+ default_values = [
+ None if value == "None" else value for value in default_values
+ ]
+
+ defaults = missing_defaults + default_values
+
+ args = [
+ self.parse_arg(arg, default)
+ for arg, default in zip(node.args.args, defaults)
+ ]
+ return args
+
+ def parse_varargs(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
+ """
+ Parses the *args argument of a function or method node.
+ """
+ args = []
+
+ if node.args.vararg:
+ args.append(self.parse_arg(node.args.vararg, None))
+
+ return args
+
+ def parse_keyword_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
+ """
+ Parses the keyword-only arguments of a function or method node.
+ """
+ kw_defaults = [None] * (
+ len(node.args.kwonlyargs) - len(node.args.kw_defaults)
+ ) + [
+ ast.unparse(default) if default else None
+ for default in node.args.kw_defaults
+ ]
+
+ args = [
+ self.parse_arg(arg, default)
+ for arg, default in zip(node.args.kwonlyargs, kw_defaults)
+ ]
+ return args
+
+ def parse_kwargs(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
+ """
+ Parses the **kwargs argument of a function or method node.
+ """
+ args = []
+
+ if node.args.kwarg:
+ args.append(self.parse_arg(node.args.kwarg, None))
+
+ return args
+
+ def parse_function_body(self, node: ast.FunctionDef) -> List[str]:
+ """
+ Parses the body of a function or method node.
+ """
+ return [ast.unparse(line) for line in node.body]
+
+ def parse_assign(self, stmt):
+ """
+ Parses an Assign statement and returns a dictionary
+ with the target's name and value.
+ """
+ for target in stmt.targets:
+ if isinstance(target, ast.Name):
+ return {"name": target.id, "value": ast.unparse(stmt.value)}
+
+ def parse_ann_assign(self, stmt):
+ """
+ Parses an AnnAssign statement and returns a dictionary
+ with the target's name, value, and annotation.
+ """
+ if isinstance(stmt.target, ast.Name):
+ return {
+ "name": stmt.target.id,
+ "value": ast.unparse(stmt.value) if stmt.value else None,
+ "annotation": ast.unparse(stmt.annotation),
+ }
+
+ def parse_function_def(self, stmt):
+ """
+ Parses a FunctionDef statement and returns the parsed
+ method and a boolean indicating if it's an __init__ method.
+ """
+ method = self.parse_callable_details(stmt)
+ return (method, True) if stmt.name == "__init__" else (method, False)
+
+ def parse_classes(self, node: ast.ClassDef) -> None:
+ """
+ Extracts "classes" from the code, including inheritance and init methods.
+ """
+
+ class_details = ClassCodeDetails(
+ name=node.name,
+ doc=ast.get_docstring(node),
+ bases=[ast.unparse(base) for base in node.bases],
+ attributes=[],
+ methods=[],
+ init=None,
+ )
+
+ for stmt in node.body:
+ if isinstance(stmt, ast.Assign):
+ if attr := self.parse_assign(stmt):
+ class_details.attributes.append(attr)
+ elif isinstance(stmt, ast.AnnAssign):
+ if attr := self.parse_ann_assign(stmt):
+ class_details.attributes.append(attr)
+ elif isinstance(stmt, ast.FunctionDef):
+ method, is_init = self.parse_function_def(stmt)
+ if is_init:
+ class_details.init = method
+ else:
+ class_details.methods.append(method)
+
+ self.data["classes"].append(class_details.dict())
+
+ def parse_global_vars(self, node: ast.Assign) -> None:
+ """
+ Extracts global variables from the code.
+ """
+ global_var = {
+ "targets": [
+ t.id if hasattr(t, "id") else ast.dump(t) for t in node.targets
+ ],
+ "value": ast.unparse(node.value),
+ }
+ self.data["global_vars"].append(global_var)
+
+ def parse_code(self) -> Dict[str, Any]:
+ """
+ Runs all parsing operations and returns the resulting data.
+ """
+ tree = self.__get_tree()
+
+ for node in ast.walk(tree):
+ self.parse_node(node)
+ return self.data
diff --git a/src/backend/langflow/interface/custom/component.py b/src/backend/langflow/interface/custom/component.py
new file mode 100644
index 000000000..a9dc0f323
--- /dev/null
+++ b/src/backend/langflow/interface/custom/component.py
@@ -0,0 +1,72 @@
+import ast
+from typing import Optional
+from pydantic import BaseModel
+from fastapi import HTTPException
+
+from langflow.utils import validate
+from langflow.interface.custom.code_parser import CodeParser
+
+
+class ComponentCodeNullError(HTTPException):
+ pass
+
+
+class ComponentFunctionEntrypointNameNullError(HTTPException):
+ pass
+
+
+class Component(BaseModel):
+ ERROR_CODE_NULL = "Python code must be provided."
+ ERROR_FUNCTION_ENTRYPOINT_NAME_NULL = (
+ "The name of the entrypoint function must be provided."
+ )
+
+ code: Optional[str]
+ function_entrypoint_name = "build"
+ field_config: dict = {}
+
+ def __init__(self, **data):
+ super().__init__(**data)
+
+ def get_code_tree(self, code: str):
+ parser = CodeParser(code)
+ return parser.parse_code()
+
+ def get_function(self):
+ if not self.code:
+ raise ComponentCodeNullError(
+ status_code=400,
+ detail={"error": self.ERROR_CODE_NULL, "traceback": ""},
+ )
+
+ if not self.function_entrypoint_name:
+ raise ComponentFunctionEntrypointNameNullError(
+ status_code=400,
+ detail={
+ "error": self.ERROR_FUNCTION_ENTRYPOINT_NAME_NULL,
+ "traceback": "",
+ },
+ )
+
+ return validate.create_function(self.code, self.function_entrypoint_name)
+
+ def build_template_config(self, attributes) -> dict:
+ template_config = {}
+
+ for item in attributes:
+ item_name = item.get("name")
+
+ if item_value := item.get("value"):
+ if "display_name" in item_name:
+ template_config["display_name"] = ast.literal_eval(item_value)
+
+ elif "description" in item_name:
+ template_config["description"] = ast.literal_eval(item_value)
+
+ elif "field_config" in item_name:
+ template_config["field_config"] = ast.literal_eval(item_value)
+
+ return template_config
+
+ def build(self):
+ raise NotImplementedError
diff --git a/src/backend/langflow/interface/custom/constants.py b/src/backend/langflow/interface/custom/constants.py
new file mode 100644
index 000000000..0e747d0ca
--- /dev/null
+++ b/src/backend/langflow/interface/custom/constants.py
@@ -0,0 +1,58 @@
+from langchain import PromptTemplate
+from langchain.chains.base import Chain
+from langchain.document_loaders.base import BaseLoader
+from langchain.embeddings.base import Embeddings
+from langchain.llms.base import BaseLLM
+from langchain.schema import BaseRetriever, Document
+from langchain.text_splitter import TextSplitter
+from langchain.tools import Tool
+from langchain.vectorstores.base import VectorStore
+
+
+LANGCHAIN_BASE_TYPES = {
+ "Chain": Chain,
+ "Tool": Tool,
+ "BaseLLM": BaseLLM,
+ "PromptTemplate": PromptTemplate,
+ "BaseLoader": BaseLoader,
+ "Document": Document,
+ "TextSplitter": TextSplitter,
+ "VectorStore": VectorStore,
+ "Embeddings": Embeddings,
+ "BaseRetriever": BaseRetriever,
+}
+
+# Langchain base types plus Python base types
+CUSTOM_COMPONENT_SUPPORTED_TYPES = {
+ **LANGCHAIN_BASE_TYPES,
+ "str": str,
+ "int": int,
+ "float": float,
+ "bool": bool,
+ "list": list,
+ "dict": dict,
+}
+
+
+DEFAULT_CUSTOM_COMPONENT_CODE = """from langflow import CustomComponent
+
+from langchain.llms.base import BaseLLM
+from langchain.chains import LLMChain
+from langchain import PromptTemplate
+from langchain.schema import Document
+
+import requests
+
+class YourComponent(CustomComponent):
+ display_name: str = "Custom Component"
+ description: str = "Create any custom component you want!"
+
+ def build_config(self):
+ return { "url": { "multiline": True, "required": True } }
+
+ def build(self, url: str, llm: BaseLLM, prompt: PromptTemplate) -> Document:
+ response = requests.get(url)
+ chain = LLMChain(llm=llm, prompt=prompt)
+ result = chain.run(response.text[:300])
+ return Document(page_content=str(result))
+"""
diff --git a/src/backend/langflow/interface/custom/custom_component.py b/src/backend/langflow/interface/custom/custom_component.py
new file mode 100644
index 000000000..4d65070bf
--- /dev/null
+++ b/src/backend/langflow/interface/custom/custom_component.py
@@ -0,0 +1,194 @@
+from typing import Any, Callable, List, Optional
+from fastapi import HTTPException
+from langflow.interface.custom.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES
+from langflow.interface.custom.component import Component
+from langflow.interface.custom.directory_reader import DirectoryReader
+
+from langflow.utils import validate
+
+from langflow.database.base import session_getter
+from langflow.database.models.flow import Flow
+from pydantic import Extra
+
+
+class CustomComponent(Component, extra=Extra.allow):
+ code: Optional[str]
+ field_config: dict = {}
+ code_class_base_inheritance = "CustomComponent"
+ function_entrypoint_name = "build"
+ function: Optional[Callable] = None
+ return_type_valid_list = list(CUSTOM_COMPONENT_SUPPORTED_TYPES.keys())
+ repr_value: Optional[str] = ""
+
+ def __init__(self, **data):
+ super().__init__(**data)
+
+ def custom_repr(self):
+ return str(self.repr_value)
+
+ def build_config(self):
+ return self.field_config
+
+ def _class_template_validation(self, code: str):
+ TYPE_HINT_LIST = ["Optional", "Prompt", "PromptTemplate", "LLMChain"]
+
+ if not code:
+ raise HTTPException(
+ status_code=400,
+ detail={
+ "error": self.ERROR_CODE_NULL,
+ "traceback": "",
+ },
+ )
+
+ reader = DirectoryReader("", False)
+
+ for type_hint in TYPE_HINT_LIST:
+ if reader.is_type_hint_used_but_not_imported(type_hint, code):
+ error_detail = {
+ "error": "Type hint Error",
+ "traceback": f"Type hint '{type_hint}' is used but not imported in the code.",
+ }
+ raise HTTPException(status_code=400, detail=error_detail)
+
+ def is_check_valid(self) -> bool:
+ return self._class_template_validation(self.code) if self.code else False
+
+ def get_code_tree(self, code: str):
+ return super().get_code_tree(code)
+
+ @property
+ def get_function_entrypoint_args(self) -> str:
+ if not self.code:
+ return ""
+ tree = self.get_code_tree(self.code)
+
+ component_classes = [
+ cls
+ for cls in tree["classes"]
+ if self.code_class_base_inheritance in cls["bases"]
+ ]
+ if not component_classes:
+ return ""
+
+ # Assume the first Component class is the one we're interested in
+ component_class = component_classes[0]
+ build_methods = [
+ method
+ for method in component_class["methods"]
+ if method["name"] == self.function_entrypoint_name
+ ]
+
+ if not build_methods:
+ return ""
+
+ build_method = build_methods[0]
+
+ return build_method["args"]
+
+ @property
+ def get_function_entrypoint_return_type(self) -> str:
+ if not self.code:
+ return ""
+ tree = self.get_code_tree(self.code)
+
+ component_classes = [
+ cls
+ for cls in tree["classes"]
+ if self.code_class_base_inheritance in cls["bases"]
+ ]
+ if not component_classes:
+ return ""
+
+ # Assume the first Component class is the one we're interested in
+ component_class = component_classes[0]
+ build_methods = [
+ method
+ for method in component_class["methods"]
+ if method["name"] == self.function_entrypoint_name
+ ]
+
+ if not build_methods:
+ return ""
+
+ build_method = build_methods[0]
+
+ return build_method["return_type"]
+
+ @property
+ def get_main_class_name(self):
+ tree = self.get_code_tree(self.code)
+
+ base_name = self.code_class_base_inheritance
+ method_name = self.function_entrypoint_name
+
+ classes = []
+ for item in tree.get("classes"):
+ if base_name in item["bases"]:
+ method_names = [method["name"] for method in item["methods"]]
+ if method_name in method_names:
+ classes.append(item["name"])
+
+ # Get just the first item
+ return next(iter(classes), "")
+
+ @property
+ def build_template_config(self):
+ tree = self.get_code_tree(self.code)
+
+ attributes = [
+ main_class["attributes"]
+ for main_class in tree.get("classes")
+ if main_class["name"] == self.get_main_class_name
+ ]
+ # Get just the first item
+ attributes = next(iter(attributes), [])
+
+ return super().build_template_config(attributes)
+
+ @property
+ def get_function(self):
+ return validate.create_function(self.code, self.function_entrypoint_name)
+
+ def load_flow(self, flow_id: str, tweaks: Optional[dict] = None) -> Any:
+ from langflow.processing.process import build_sorted_vertices_with_caching
+ from langflow.processing.process import process_tweaks
+
+ with session_getter() as session:
+ graph_data = flow.data if (flow := session.get(Flow, flow_id)) else None
+ if not graph_data:
+ raise ValueError(f"Flow {flow_id} not found")
+ if tweaks:
+ graph_data = process_tweaks(graph_data=graph_data, tweaks=tweaks)
+ return build_sorted_vertices_with_caching(graph_data)
+
+ def list_flows(self, *, get_session: Optional[Callable] = None) -> List[Flow]:
+ get_session = get_session or session_getter
+ with get_session() as session:
+ flows = session.query(Flow).all()
+ return flows
+
+ def get_flow(
+ self,
+ *,
+ flow_name: Optional[str] = None,
+ flow_id: Optional[str] = None,
+ tweaks: Optional[dict] = None,
+ get_session: Optional[Callable] = None,
+ ) -> Flow:
+ get_session = get_session or session_getter
+
+ with get_session() as session:
+ if flow_id:
+ flow = session.query(Flow).get(flow_id)
+ elif flow_name:
+ flow = session.query(Flow).filter(Flow.name == flow_name).first()
+ else:
+ raise ValueError("Either flow_name or flow_id must be provided")
+
+ if not flow:
+ raise ValueError(f"Flow {flow_name or flow_id} not found")
+ return self.load_flow(flow.id, tweaks)
+
+ def build(self):
+ raise NotImplementedError
diff --git a/src/backend/langflow/interface/custom/directory_reader.py b/src/backend/langflow/interface/custom/directory_reader.py
new file mode 100644
index 000000000..3357d164f
--- /dev/null
+++ b/src/backend/langflow/interface/custom/directory_reader.py
@@ -0,0 +1,239 @@
+import os
+import ast
+import zlib
+
+
+class CustomComponentPathValueError(ValueError):
+ pass
+
+
+class StringCompressor:
+ def __init__(self, input_string):
+ """Initialize StringCompressor with a string to compress."""
+ self.input_string = input_string
+
+ def compress_string(self):
+ """
+ Compress the initial string and return the compressed data.
+ """
+ # Convert string to bytes
+ byte_data = self.input_string.encode("utf-8")
+ # Compress the bytes
+ self.compressed_data = zlib.compress(byte_data)
+
+ return self.compressed_data
+
+ def decompress_string(self):
+ """
+ Decompress the compressed data and return the original string.
+ """
+ # Decompress the bytes
+ decompressed_data = zlib.decompress(self.compressed_data)
+ # Convert bytes back to string
+ return decompressed_data.decode("utf-8")
+
+
+class DirectoryReader:
+ # Ensure the base path to read the files that contain
+ # the custom components from this directory.
+ base_path = ""
+
+ def __init__(self, directory_path, compress_code_field=False):
+ """
+ Initialize DirectoryReader with a directory path
+ and a flag indicating whether to compress the code.
+ """
+ self.directory_path = directory_path
+ self.compress_code_field = compress_code_field
+
+ def get_safe_path(self):
+ """Check if the path is valid and return it, or None if it's not."""
+ return self.directory_path if self.is_valid_path() else None
+
+ def is_valid_path(self) -> bool:
+ """Check if the directory path is valid by comparing it to the base path."""
+ fullpath = os.path.normpath(os.path.join(self.directory_path))
+ return fullpath.startswith(self.base_path)
+
+ def is_empty_file(self, file_content):
+ """
+ Check if the file content is empty.
+ """
+ return len(file_content.strip()) == 0
+
+ def filter_loaded_components(self, data: dict, with_errors: bool) -> dict:
+ items = [
+ {
+ "name": menu["name"],
+ "path": menu["path"],
+ "components": [
+ component
+ for component in menu["components"]
+ if (component["error"] if with_errors else not component["error"])
+ ],
+ }
+ for menu in data["menu"]
+ ]
+ filtred = [menu for menu in items if menu["components"]]
+ return {"menu": filtred}
+
+ def validate_code(self, file_content):
+ """
+ Validate the Python code by trying to parse it with ast.parse.
+ """
+ try:
+ ast.parse(file_content)
+ return True
+ except SyntaxError:
+ return False
+
+ def validate_build(self, file_content):
+ """
+ Check if the file content contains a function named 'build'.
+ """
+ return "def build" in file_content
+
+ def read_file_content(self, file_path):
+ """
+ Read and return the content of a file.
+ """
+ if not os.path.isfile(file_path):
+ return None
+ with open(file_path, "r") as file:
+ return file.read()
+
+ def get_files(self):
+ """
+ Walk through the directory path and return a list of all .py files.
+ """
+ if not (safe_path := self.get_safe_path()):
+ raise CustomComponentPathValueError(
+ f"The path needs to start with '{self.base_path}'."
+ )
+
+ file_list = []
+ for root, _, files in os.walk(safe_path):
+ file_list.extend(
+ os.path.join(root, filename)
+ for filename in files
+ if filename.endswith(".py")
+ )
+ return file_list
+
+ def find_menu(self, response, menu_name):
+ """
+ Find and return a menu by its name in the response.
+ """
+ return next(
+ (menu for menu in response["menu"] if menu["name"] == menu_name),
+ None,
+ )
+
+ def _is_type_hint_imported(self, type_hint_name: str, code: str) -> bool:
+ """
+ Check if a specific type hint is imported
+ from the typing module in the given code.
+ """
+ module = ast.parse(code)
+
+ return any(
+ isinstance(node, ast.ImportFrom)
+ and node.module == "typing"
+ and any(alias.name == type_hint_name for alias in node.names)
+ for node in ast.walk(module)
+ )
+
+ def _is_type_hint_used_in_args(self, type_hint_name: str, code: str) -> bool:
+ """
+ Check if a specific type hint is used in the
+ function definitions within the given code.
+ """
+ module = ast.parse(code)
+
+ for node in ast.walk(module):
+ if isinstance(node, ast.FunctionDef):
+ for arg in node.args.args:
+ if self._is_type_hint_in_arg_annotation(
+ arg.annotation, type_hint_name
+ ):
+ return True
+ return False
+
+ def _is_type_hint_in_arg_annotation(self, annotation, type_hint_name: str) -> bool:
+ """
+ Helper function to check if a type hint exists in an annotation.
+ """
+ return (
+ annotation is not None
+ and isinstance(annotation, ast.Subscript)
+ and isinstance(annotation.value, ast.Name)
+ and annotation.value.id == type_hint_name
+ )
+
+ def is_type_hint_used_but_not_imported(
+ self, type_hint_name: str, code: str
+ ) -> bool:
+ """
+ Check if a type hint is used but not imported in the given code.
+ """
+ try:
+ return self._is_type_hint_used_in_args(
+ type_hint_name, code
+ ) and not self._is_type_hint_imported(type_hint_name, code)
+ except SyntaxError:
+ # Returns True if there's something wrong with the code
+ # TODO : Find a better way to handle this
+ return True
+
+ def process_file(self, file_path):
+ """
+ Process a file by validating its content and
+ returning the result and content/error message.
+ """
+ file_content = self.read_file_content(file_path)
+
+ if file_content is None:
+ return False, f"Could not read {file_path}"
+ elif self.is_empty_file(file_content):
+ return False, "Empty file"
+ elif not self.validate_code(file_content):
+ return False, "Syntax error"
+ elif not self.validate_build(file_content):
+ return False, "Missing build function"
+ elif self.is_type_hint_used_but_not_imported("Optional", file_content):
+ return False, "Type hint 'Optional' is used but not imported in the code."
+ else:
+ if self.compress_code_field:
+ file_content = str(StringCompressor(file_content).compress_string())
+ return True, file_content
+
+ def build_component_menu_list(self, file_paths):
+ """
+ Build a list of menus with their components
+ from the .py files in the directory.
+ """
+ response = {"menu": []}
+
+ for file_path in file_paths:
+ menu_name = os.path.basename(os.path.dirname(file_path))
+ filename = os.path.basename(file_path)
+ validation_result, result_content = self.process_file(file_path)
+
+ menu_result = self.find_menu(response, menu_name) or {
+ "name": menu_name,
+ "path": os.path.dirname(file_path),
+ "components": [],
+ }
+
+ component_info = {
+ "name": filename.split(".")[0],
+ "file": filename,
+ "code": result_content if validation_result else "",
+ "error": "" if validation_result else result_content,
+ }
+ menu_result["components"].append(component_info)
+
+ if menu_result not in response["menu"]:
+ response["menu"].append(menu_result)
+
+ return response
diff --git a/src/backend/langflow/interface/custom/schema.py b/src/backend/langflow/interface/custom/schema.py
new file mode 100644
index 000000000..80d65405f
--- /dev/null
+++ b/src/backend/langflow/interface/custom/schema.py
@@ -0,0 +1,29 @@
+from pydantic import BaseModel, Field
+
+
+from typing import Optional
+
+
+class ClassCodeDetails(BaseModel):
+ """
+ A dataclass for storing details about a class.
+ """
+
+ name: str
+ doc: Optional[str]
+ bases: list
+ attributes: list
+ methods: list
+ init: Optional[dict] = Field(default_factory=dict)
+
+
+class CallableCodeDetails(BaseModel):
+ """
+ A dataclass for storing details about a callable.
+ """
+
+ name: str
+ doc: Optional[str]
+ args: list
+ body: list
+ return_type: Optional[str]
diff --git a/src/backend/langflow/interface/importing/utils.py b/src/backend/langflow/interface/importing/utils.py
index ccfd8d5dd..0acb2cff5 100644
--- a/src/backend/langflow/interface/importing/utils.py
+++ b/src/backend/langflow/interface/importing/utils.py
@@ -9,6 +9,7 @@ from langchain.base_language import BaseLanguageModel
from langchain.chains.base import Chain
from langchain.chat_models.base import BaseChatModel
from langchain.tools import BaseTool
+from langflow.interface.custom.custom_component import CustomComponent
from langflow.utils import validate
from langflow.interface.wrappers.base import wrapper_creator
@@ -47,6 +48,7 @@ def import_by_type(_type: str, name: str) -> Any:
"utilities": import_utility,
"output_parsers": import_output_parser,
"retrievers": import_retriever,
+ "custom_components": import_custom_component,
}
if _type == "llms":
key = "chat" if "chat" in name.lower() else "llm"
@@ -57,6 +59,13 @@ def import_by_type(_type: str, name: str) -> Any:
return loaded_func(name)
+def import_custom_component(custom_component: str) -> CustomComponent:
+ """Import custom component from custom component name"""
+ return import_class(
+ f"langflow.interface.custom.custom_component.{custom_component}"
+ )
+
+
def import_output_parser(output_parser: str) -> Any:
"""Import output parser from output parser name"""
return import_module(f"from langchain.output_parsers import {output_parser}")
@@ -172,3 +181,8 @@ def get_function(code):
function_name = validate.extract_function_name(code)
return validate.create_function(code, function_name)
+
+
+def get_function_custom(code):
+ class_name = validate.extract_class_name(code)
+ return validate.create_class(code, class_name)
diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py
index b232d089c..f52b2e56c 100644
--- a/src/backend/langflow/interface/initialize/loading.py
+++ b/src/backend/langflow/interface/initialize/loading.py
@@ -1,21 +1,23 @@
-import contextlib
import json
-from typing import Any, Callable, Dict, List, Sequence, Type
+from typing import Any, Callable, Dict, Sequence, Type
-from langchain.agents import ZeroShotAgent
from langchain.agents import agent as agent_module
from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.agents.tools import BaseTool
from langflow.interface.initialize.llm import initialize_vertexai
+from langflow.interface.initialize.utils import handle_format_kwargs, handle_node_type
from langflow.interface.initialize.vector_store import vecstore_initializer
-from langchain.schema import Document, BaseOutputParser
from pydantic import ValidationError
+from langflow.interface.importing.utils import (
+ get_function,
+ get_function_custom,
+ import_by_type,
+)
from langflow.interface.custom_lists import CUSTOM_NODES
-from langflow.interface.importing.utils import get_function, import_by_type
from langflow.interface.agents.base import agent_creator
from langflow.interface.toolkits.base import toolkits_creator
from langflow.interface.chains.base import chain_creator
@@ -58,7 +60,12 @@ def convert_kwargs(params):
kwargs_keys = [key for key in params.keys() if "kwargs" in key or "config" in key]
for key in kwargs_keys:
if isinstance(params[key], str):
- params[key] = json.loads(params[key])
+ try:
+ params[key] = json.loads(params[key])
+ except json.JSONDecodeError:
+ # if the string is not a valid json string, we will
+ # remove the key from the params
+ params.pop(key, None)
return params
@@ -95,12 +102,21 @@ def instantiate_based_on_type(class_object, base_type, node_type, params):
return instantiate_retriever(node_type, class_object, params)
elif base_type == "memory":
return instantiate_memory(node_type, class_object, params)
+ elif base_type == "custom_components":
+ return instantiate_custom_component(node_type, class_object, params)
elif base_type == "wrappers":
return instantiate_wrapper(node_type, class_object, params)
else:
return class_object(**params)
+def instantiate_custom_component(node_type, class_object, params):
+ class_object = get_function_custom(params.pop("code"))
+ custom_component = class_object()
+ built_object = custom_component.build(**params)
+ return built_object, {"repr": custom_component.custom_repr()}
+
+
def instantiate_wrapper(node_type, class_object, params):
if node_type in wrapper_creator.from_method_nodes:
method = wrapper_creator.from_method_nodes[node_type]
@@ -199,68 +215,8 @@ def instantiate_agent(node_type, class_object: Type[agent_module.Agent], params:
def instantiate_prompt(node_type, class_object, params: Dict):
- if node_type == "ZeroShotPrompt":
- if "tools" not in params:
- params["tools"] = []
- return ZeroShotAgent.create_prompt(**params)
- elif "MessagePromptTemplate" in node_type:
- # Then we only need the template
- from_template_params = {
- "template": params.pop("prompt", params.pop("template", ""))
- }
-
- if not from_template_params.get("template"):
- raise ValueError("Prompt template is required")
- prompt = class_object.from_template(**from_template_params)
-
- elif node_type == "ChatPromptTemplate":
- prompt = class_object.from_messages(**params)
- else:
- prompt = class_object(**params)
-
- format_kwargs: Dict[str, Any] = {}
- for input_variable in prompt.input_variables:
- if input_variable in params:
- variable = params[input_variable]
- if isinstance(variable, str):
- format_kwargs[input_variable] = variable
- elif isinstance(variable, BaseOutputParser) and hasattr(
- variable, "get_format_instructions"
- ):
- format_kwargs[input_variable] = variable.get_format_instructions()
- elif isinstance(variable, List) and all(
- isinstance(item, Document) for item in variable
- ):
- # Format document to contain page_content and metadata
- # as one string separated by a newline
- if len(variable) > 1:
- content = "\n".join(
- [item.page_content for item in variable if item.page_content]
- )
- else:
- content = variable[0].page_content
- # content could be a json list of strings
- with contextlib.suppress(json.JSONDecodeError):
- content = json.loads(content)
- if isinstance(content, list):
- content = ",".join([str(item) for item in content])
- format_kwargs[input_variable] = content
- # handle_keys will be a list but it does not exist yet
- # so we need to create it
-
- if (
- isinstance(variable, List)
- and all(isinstance(item, Document) for item in variable)
- ) or (
- isinstance(variable, BaseOutputParser)
- and hasattr(variable, "get_format_instructions")
- ):
- if "handle_keys" not in format_kwargs:
- format_kwargs["handle_keys"] = []
-
- # Add the handle_keys to the list
- format_kwargs["handle_keys"].append(input_variable)
-
+ params, prompt = handle_node_type(node_type, class_object, params)
+ format_kwargs = handle_format_kwargs(prompt, params)
return prompt, format_kwargs
@@ -363,6 +319,8 @@ def instantiate_textsplitter(
):
try:
documents = params.pop("documents")
+ if not isinstance(documents, list):
+ documents = [documents]
except KeyError as exc:
raise ValueError(
"The source you provided did not load correctly or was empty."
diff --git a/src/backend/langflow/interface/initialize/utils.py b/src/backend/langflow/interface/initialize/utils.py
new file mode 100644
index 000000000..31fbc6d8b
--- /dev/null
+++ b/src/backend/langflow/interface/initialize/utils.py
@@ -0,0 +1,103 @@
+import contextlib
+import json
+from typing import Any, Dict, List
+
+from langchain.agents import ZeroShotAgent
+
+
+from langchain.schema import Document, BaseOutputParser
+
+
+def handle_node_type(node_type, class_object, params: Dict):
+ if node_type == "ZeroShotPrompt":
+ params = check_tools_in_params(params)
+ prompt = ZeroShotAgent.create_prompt(**params)
+ elif "MessagePromptTemplate" in node_type:
+ prompt = instantiate_from_template(class_object, params)
+ elif node_type == "ChatPromptTemplate":
+ prompt = class_object.from_messages(**params)
+ else:
+ prompt = class_object(**params)
+ return params, prompt
+
+
+def check_tools_in_params(params: Dict):
+ if "tools" not in params:
+ params["tools"] = []
+ return params
+
+
+def instantiate_from_template(class_object, params: Dict):
+ from_template_params = {
+ "template": params.pop("prompt", params.pop("template", ""))
+ }
+ if not from_template_params.get("template"):
+ raise ValueError("Prompt template is required")
+ return class_object.from_template(**from_template_params)
+
+
+def handle_format_kwargs(prompt, params: Dict):
+ format_kwargs: Dict[str, Any] = {}
+ for input_variable in prompt.input_variables:
+ if input_variable in params:
+ format_kwargs = handle_variable(params, input_variable, format_kwargs)
+ return format_kwargs
+
+
+def handle_variable(params: Dict, input_variable: str, format_kwargs: Dict):
+ variable = params[input_variable]
+ if isinstance(variable, str):
+ format_kwargs[input_variable] = variable
+ elif isinstance(variable, BaseOutputParser) and hasattr(
+ variable, "get_format_instructions"
+ ):
+ format_kwargs[input_variable] = variable.get_format_instructions()
+ elif is_instance_of_list_or_document(variable):
+ format_kwargs = format_document(variable, input_variable, format_kwargs)
+ if needs_handle_keys(variable):
+ format_kwargs = add_handle_keys(input_variable, format_kwargs)
+ return format_kwargs
+
+
+def is_instance_of_list_or_document(variable):
+ return (
+ isinstance(variable, List)
+ and all(isinstance(item, Document) for item in variable)
+ or isinstance(variable, Document)
+ )
+
+
+def format_document(variable, input_variable: str, format_kwargs: Dict):
+ variable = variable if isinstance(variable, List) else [variable]
+ content = format_content(variable)
+ format_kwargs[input_variable] = content
+ return format_kwargs
+
+
+def format_content(variable):
+ if len(variable) > 1:
+ return "\n".join([item.page_content for item in variable if item.page_content])
+ content = variable[0].page_content
+ return try_to_load_json(content)
+
+
+def try_to_load_json(content):
+ with contextlib.suppress(json.JSONDecodeError):
+ content = json.loads(content)
+ if isinstance(content, list):
+ content = ",".join([str(item) for item in content])
+ return content
+
+
+def needs_handle_keys(variable):
+ return is_instance_of_list_or_document(variable) or (
+ isinstance(variable, BaseOutputParser)
+ and hasattr(variable, "get_format_instructions")
+ )
+
+
+def add_handle_keys(input_variable: str, format_kwargs: Dict):
+ if "handle_keys" not in format_kwargs:
+ format_kwargs["handle_keys"] = []
+ format_kwargs["handle_keys"].append(input_variable)
+ return format_kwargs
diff --git a/src/backend/langflow/interface/listing.py b/src/backend/langflow/interface/listing.py
index 0893f855a..fe3090f65 100644
--- a/src/backend/langflow/interface/listing.py
+++ b/src/backend/langflow/interface/listing.py
@@ -13,6 +13,7 @@ from langflow.interface.vector_store.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator
from langflow.interface.output_parsers.base import output_parser_creator
from langflow.interface.retrievers.base import retriever_creator
+from langflow.interface.custom.base import custom_component_creator
def get_type_dict():
@@ -32,6 +33,7 @@ def get_type_dict():
"utilities": utility_creator.to_list(),
"outputParsers": output_parser_creator.to_list(),
"retrievers": retriever_creator.to_list(),
+ "custom_components": custom_component_creator.to_list(),
}
diff --git a/src/backend/langflow/interface/tools/base.py b/src/backend/langflow/interface/tools/base.py
index 027224a3a..f8965134d 100644
--- a/src/backend/langflow/interface/tools/base.py
+++ b/src/backend/langflow/interface/tools/base.py
@@ -55,7 +55,7 @@ TOOL_INPUTS = {
show=True,
value="",
suffixes=[".json", ".yaml", ".yml"],
- fileTypes=["json", "yaml", "yml"],
+ file_types=["json", "yaml", "yml"],
),
}
diff --git a/src/backend/langflow/interface/tools/constants.py b/src/backend/langflow/interface/tools/constants.py
index fea3c5237..dc1bfe0c1 100644
--- a/src/backend/langflow/interface/tools/constants.py
+++ b/src/backend/langflow/interface/tools/constants.py
@@ -9,7 +9,10 @@ from langchain.agents.load_tools import (
from langchain.tools.json.tool import JsonSpec
from langflow.interface.importing.utils import import_class
-from langflow.interface.tools.custom import PythonFunctionTool, PythonFunction
+from langflow.interface.tools.custom import (
+ PythonFunctionTool,
+ PythonFunction,
+)
FILE_TOOLS = {"JsonSpec": JsonSpec}
CUSTOM_TOOLS = {
diff --git a/src/backend/langflow/interface/tools/custom.py b/src/backend/langflow/interface/tools/custom.py
index 0e2e5ff57..321298e34 100644
--- a/src/backend/langflow/interface/tools/custom.py
+++ b/src/backend/langflow/interface/tools/custom.py
@@ -34,8 +34,6 @@ class Function(BaseModel):
class PythonFunctionTool(Function, Tool):
- """Python function"""
-
name: str = "Custom Tool"
description: str
code: str
@@ -49,6 +47,4 @@ class PythonFunctionTool(Function, Tool):
class PythonFunction(Function):
- """Python function"""
-
code: str
diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py
index 72ecb6775..46fa781d6 100644
--- a/src/backend/langflow/interface/types.py
+++ b/src/backend/langflow/interface/types.py
@@ -1,7 +1,10 @@
+from typing import Any
from langflow.interface.agents.base import agent_creator
from langflow.interface.chains.base import chain_creator
+from langflow.interface.custom.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES
from langflow.interface.document_loaders.base import documentloader_creator
from langflow.interface.embeddings.base import embedding_creator
+from langflow.interface.importing.utils import get_function_custom
from langflow.interface.llms.base import llm_creator
from langflow.interface.memories.base import memory_creator
from langflow.interface.prompts.base import prompt_creator
@@ -12,9 +15,28 @@ from langflow.interface.utilities.base import utility_creator
from langflow.interface.vector_store.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator
from langflow.interface.output_parsers.base import output_parser_creator
+from langflow.interface.custom.base import custom_component_creator
+from langflow.interface.custom.custom_component import CustomComponent
+
+from langflow.template.field.base import TemplateField
+from langflow.template.frontend_node.constants import CLASSES_TO_REMOVE
+from langflow.template.frontend_node.custom_components import (
+ CustomComponentFrontendNode,
+)
from langflow.interface.retrievers.base import retriever_creator
+from langflow.interface.custom.directory_reader import DirectoryReader
+from langflow.utils.logger import logger
+from langflow.utils.util import get_base_classes
+from langflow.api.utils import merge_nested_dicts
+import re
+import warnings
+import traceback
+from fastapi import HTTPException
+
+
+# Used to get the base_classes list
def get_type_list():
"""Get a list of all langchain types"""
all_types = build_langchain_types_dict()
@@ -29,7 +51,6 @@ def get_type_list():
def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union
"""Build a dictionary of all langchain types"""
-
all_types = {}
creators = [
@@ -48,6 +69,7 @@ def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union
utility_creator,
output_parser_creator,
retriever_creator,
+ custom_component_creator,
]
all_types = {}
@@ -55,7 +77,315 @@ def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union
created_types = creator.to_dict()
if created_types[creator.type_name].values():
all_types.update(created_types)
+
return all_types
-langchain_types_dict = build_langchain_types_dict()
+def process_type(field_type: str):
+ return "prompt" if field_type == "Prompt" else field_type
+
+
+# TODO: Move to correct place
+def add_new_custom_field(
+ template,
+ field_name: str,
+ field_type: str,
+ field_value: Any,
+ field_required: bool,
+ field_config: dict,
+):
+ # Check field_config if any of the keys are in it
+ # if it is, update the value
+ display_name = field_config.pop("display_name", field_name)
+ field_type = field_config.pop("field_type", field_type)
+ field_type = process_type(field_type)
+ field_value = field_config.pop("value", field_value)
+ field_advanced = field_config.pop("advanced", False)
+
+ if field_type == "bool" and field_value is None:
+ field_value = False
+
+ # If options is a list, then it's a dropdown
+ # If options is None, then it's a list of strings
+ is_list = isinstance(field_config.get("options"), list)
+ field_config["is_list"] = is_list or field_config.get("is_list", False)
+
+ if "name" in field_config:
+ warnings.warn(
+ "The 'name' key in field_config is used to build the object and can't be changed."
+ )
+ field_config.pop("name", None)
+
+ required = field_config.pop("required", field_required)
+ placeholder = field_config.pop("placeholder", "")
+
+ new_field = TemplateField(
+ name=field_name,
+ field_type=field_type,
+ value=field_value,
+ show=True,
+ required=required,
+ advanced=field_advanced,
+ placeholder=placeholder,
+ display_name=display_name,
+ **field_config,
+ )
+ template.get("template")[field_name] = new_field.to_dict()
+ template.get("custom_fields")[field_name] = None
+
+ return template
+
+
+# TODO: Move to correct place
+def add_code_field(template, raw_code, field_config):
+ # Field with the Python code to allow update
+
+ code_field = {
+ "code": {
+ "dynamic": True,
+ "required": True,
+ "placeholder": "",
+ "show": True,
+ "multiline": True,
+ "value": raw_code,
+ "password": False,
+ "name": "code",
+ "advanced": field_config.pop("advanced", False),
+ "type": "code",
+ "list": False,
+ }
+ }
+ template.get("template")["code"] = code_field.get("code")
+
+ return template
+
+
+def extract_type_from_optional(field_type):
+ """
+ Extract the type from a string formatted as "Optional[]".
+
+ Parameters:
+ field_type (str): The string from which to extract the type.
+
+ Returns:
+ str: The extracted type, or an empty string if no type was found.
+ """
+ match = re.search(r"\[(.*?)\]", field_type)
+ return match[1] if match else None
+
+
+def build_frontend_node(custom_component: CustomComponent):
+ """Build a frontend node for a custom component"""
+ try:
+ return (
+ CustomComponentFrontendNode().to_dict().get(type(custom_component).__name__)
+ )
+
+ except Exception as exc:
+ logger.error(f"Error while building base frontend node: {exc}")
+ return None
+
+
+def update_display_name_and_description(frontend_node, template_config):
+ """Update the display name and description of a frontend node"""
+ if "display_name" in template_config:
+ frontend_node["display_name"] = template_config["display_name"]
+
+ if "description" in template_config:
+ frontend_node["description"] = template_config["description"]
+
+
+def build_field_config(custom_component: CustomComponent):
+ """Build the field configuration for a custom component"""
+
+ try:
+ custom_class = get_function_custom(custom_component.code)
+ except Exception as exc:
+ logger.error(f"Error while getting custom function: {str(exc)}")
+ return {}
+
+ try:
+ return custom_class().build_config()
+ except Exception as exc:
+ logger.error(f"Error while building field config: {str(exc)}")
+ return {}
+
+
+def add_extra_fields(frontend_node, field_config, function_args):
+ """Add extra fields to the frontend node"""
+ if function_args is None or function_args == "":
+ return
+
+ # sort function_args which is a list of dicts
+ function_args.sort(key=lambda x: x["name"])
+
+ for extra_field in function_args:
+ if "name" not in extra_field or extra_field["name"] == "self":
+ continue
+
+ field_name, field_type, field_value, field_required = get_field_properties(
+ extra_field
+ )
+ config = field_config.get(field_name, {})
+ frontend_node = add_new_custom_field(
+ frontend_node,
+ field_name,
+ field_type,
+ field_value,
+ field_required,
+ config,
+ )
+
+
+def get_field_properties(extra_field):
+ """Get the properties of an extra field"""
+ field_name = extra_field["name"]
+ field_type = extra_field.get("type", "str")
+ field_value = extra_field.get("default", "")
+ field_required = "optional" not in field_type.lower()
+
+ if not field_required:
+ field_type = extract_type_from_optional(field_type)
+
+ return field_name, field_type, field_value, field_required
+
+
+def add_base_classes(frontend_node, return_type):
+ """Add base classes to the frontend node"""
+ if return_type not in CUSTOM_COMPONENT_SUPPORTED_TYPES or return_type is None:
+ raise HTTPException(
+ status_code=400,
+ detail={
+ "error": (
+ "Invalid return type should be one of: "
+ f"{list(CUSTOM_COMPONENT_SUPPORTED_TYPES.keys())}"
+ ),
+ "traceback": traceback.format_exc(),
+ },
+ )
+
+ return_type_instance = CUSTOM_COMPONENT_SUPPORTED_TYPES.get(return_type)
+ base_classes = get_base_classes(return_type_instance)
+
+ for base_class in base_classes:
+ if base_class not in CLASSES_TO_REMOVE:
+ frontend_node.get("base_classes").append(base_class)
+
+
+def build_langchain_template_custom_component(custom_component: CustomComponent):
+ """Build a custom component template for the langchain"""
+ frontend_node = build_frontend_node(custom_component)
+
+ if frontend_node is None:
+ return None
+
+ template_config = custom_component.build_template_config
+
+ update_display_name_and_description(frontend_node, template_config)
+
+ field_config = build_field_config(custom_component)
+ add_extra_fields(
+ frontend_node, field_config, custom_component.get_function_entrypoint_args
+ )
+
+ frontend_node = add_code_field(
+ frontend_node, custom_component.code, field_config.get("code", {})
+ )
+
+ add_base_classes(
+ frontend_node, custom_component.get_function_entrypoint_return_type
+ )
+
+ return frontend_node
+
+
+def load_files_from_path(path: str):
+ """Load all files from a given path"""
+ reader = DirectoryReader(path, False)
+
+ return reader.get_files()
+
+
+def build_and_validate_all_files(reader, file_list):
+ """Build and validate all files"""
+ data = reader.build_component_menu_list(file_list)
+
+ valid_components = reader.filter_loaded_components(data=data, with_errors=False)
+ invalid_components = reader.filter_loaded_components(data=data, with_errors=True)
+
+ return valid_components, invalid_components
+
+
+def build_valid_menu(valid_components):
+ """Build the valid menu"""
+ valid_menu = {}
+ for menu_item in valid_components["menu"]:
+ menu_name = menu_item["name"]
+ valid_menu[menu_name] = {}
+
+ for component in menu_item["components"]:
+ try:
+ component_name = component["name"]
+ component_code = component["code"]
+
+ component_extractor = CustomComponent(code=component_code)
+ component_extractor.is_check_valid()
+ component_template = build_langchain_template_custom_component(
+ component_extractor
+ )
+
+ valid_menu[menu_name][component_name] = component_template
+
+ except Exception as exc:
+ logger.error(f"Error while building custom component: {exc}")
+
+ return valid_menu
+
+
+def build_invalid_menu(invalid_components):
+ """Build the invalid menu"""
+ invalid_menu = {}
+ for menu_item in invalid_components["menu"]:
+ menu_name = menu_item["name"]
+ invalid_menu[menu_name] = {}
+
+ for component in menu_item["components"]:
+ try:
+ component_name = component["name"]
+ component_code = component["code"]
+
+ component_template = (
+ CustomComponentFrontendNode(
+ description="ERROR - Check your Python Code",
+ display_name=f"ERROR - {component_name}",
+ )
+ .to_dict()
+ .get(type(CustomComponent()).__name__)
+ )
+
+ component_template["error"] = component.get("error", None)
+ component_template.get("template").get("code")["value"] = component_code
+
+ invalid_menu[menu_name][component_name] = component_template
+
+ except Exception as exc:
+ logger.error(
+ f"Error while creating custom component [{component_name}]: {str(exc)}"
+ )
+
+ return invalid_menu
+
+
+def build_langchain_custom_component_list_from_path(path: str):
+ """Build a list of custom components for the langchain from a given path"""
+ file_list = load_files_from_path(path)
+ reader = DirectoryReader(path, False)
+
+ valid_components, invalid_components = build_and_validate_all_files(
+ reader, file_list
+ )
+
+ valid_menu = build_valid_menu(valid_components)
+ invalid_menu = build_invalid_menu(invalid_components)
+
+ return merge_nested_dicts(valid_menu, invalid_menu)
diff --git a/src/backend/langflow/main.py b/src/backend/langflow/main.py
index 31878f851..43a63d564 100644
--- a/src/backend/langflow/main.py
+++ b/src/backend/langflow/main.py
@@ -8,10 +8,12 @@ from fastapi.staticfiles import StaticFiles
from langflow.api import router
from langflow.database.base import create_db_and_tables
from langflow.interface.utils import setup_llm_caching
+from langflow.utils.logger import configure
def create_app():
"""Create the FastAPI app and include the router."""
+ configure()
app = FastAPI()
@@ -78,10 +80,16 @@ def setup_app(static_files_dir: Optional[Path] = None) -> FastAPI:
return app
-app = create_app()
-
-
if __name__ == "__main__":
import uvicorn
+ from langflow.utils.util import get_number_of_workers
- uvicorn.run(app, host="127.0.0.1", port=7860)
+ configure()
+ uvicorn.run(
+ create_app,
+ host="127.0.0.1",
+ port=7860,
+ workers=get_number_of_workers(),
+ log_level="debug",
+ reload=True,
+ )
diff --git a/src/backend/langflow/processing/base.py b/src/backend/langflow/processing/base.py
index f8690bbdf..f1d7b6e56 100644
--- a/src/backend/langflow/processing/base.py
+++ b/src/backend/langflow/processing/base.py
@@ -22,7 +22,7 @@ async def get_result_and_steps(langchain_object, inputs: Union[dict, str], **kwa
try:
fix_memory_inputs(langchain_object)
except Exception as exc:
- logger.error(exc)
+ logger.error(f"Error fixing memory inputs: {exc}")
try:
async_callbacks = [AsyncStreamingLLMCallbackHandler(**kwargs)]
diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py
index 03e6e4c35..8cefb1f44 100644
--- a/src/backend/langflow/processing/process.py
+++ b/src/backend/langflow/processing/process.py
@@ -85,12 +85,17 @@ def get_input_str_if_only_one_input(inputs: dict) -> Optional[str]:
return list(inputs.values())[0] if len(inputs) == 1 else None
-def process_graph_cached(data_graph: Dict[str, Any], inputs: Optional[dict] = None):
+def process_graph_cached(
+ data_graph: Dict[str, Any], inputs: Optional[dict] = None, clear_cache=False
+):
"""
Process graph by extracting input variables and replacing ZeroShotPrompt
with PromptTemplate,then run the graph and return the result and thought.
"""
# Load langchain object
+ if clear_cache:
+ build_sorted_vertices_with_caching.clear_cache()
+ logger.debug("Cleared cache")
langchain_object, artifacts = build_sorted_vertices_with_caching(data_graph)
logger.debug("Loaded LangChain object")
if inputs is None:
diff --git a/src/backend/langflow/settings.py b/src/backend/langflow/settings.py
index 9e6c60082..08400a811 100644
--- a/src/backend/langflow/settings.py
+++ b/src/backend/langflow/settings.py
@@ -1,10 +1,13 @@
import os
-from typing import Optional
+from typing import Optional, List
+from pathlib import Path
import yaml
from pydantic import BaseSettings, root_validator
from langflow.utils.logger import logger
+BASE_COMPONENTS_PATH = Path(__file__).parent / "components"
+
class Settings(BaseSettings):
chains: dict = {}
@@ -22,13 +25,16 @@ class Settings(BaseSettings):
textsplitters: dict = {}
utilities: dict = {}
output_parsers: dict = {}
+ custom_components: dict = {}
+
dev: bool = False
database_url: Optional[str] = None
cache: str = "InMemoryCache"
remove_api_keys: bool = False
+ components_path: List[Path]
@root_validator(pre=True)
- def set_database_url(cls, values):
+ def set_env_variables(cls, values):
if "database_url" not in values:
logger.debug(
"No database_url provided, trying LANGFLOW_DATABASE_URL env variable"
@@ -38,6 +44,23 @@ class Settings(BaseSettings):
else:
logger.debug("No DATABASE_URL env variable, using sqlite database")
values["database_url"] = "sqlite:///./langflow.db"
+
+ if not values.get("components_path"):
+ values["components_path"] = [BASE_COMPONENTS_PATH]
+ logger.debug("No components_path provided, using default components path")
+ elif BASE_COMPONENTS_PATH not in values["components_path"]:
+ values["components_path"].append(BASE_COMPONENTS_PATH)
+ logger.debug("Adding default components path to components_path")
+
+ if os.getenv("LANGFLOW_COMPONENTS_PATH"):
+ logger.debug("Adding LANGFLOW_COMPONENTS_PATH to components_path")
+ langflow_component_path = Path(os.getenv("LANGFLOW_COMPONENTS_PATH"))
+ if (
+ langflow_component_path.exists()
+ and langflow_component_path not in values["components_path"]
+ ):
+ values["components_path"].append(langflow_component_path)
+ logger.debug(f"Adding {langflow_component_path} to components_path")
return values
class Config:
@@ -68,12 +91,20 @@ class Settings(BaseSettings):
self.documentloaders = new_settings.documentloaders or {}
self.retrievers = new_settings.retrievers or {}
self.output_parsers = new_settings.output_parsers or {}
+ self.custom_components = new_settings.custom_components or {}
+ self.components_path = new_settings.components_path or []
self.dev = dev
def update_settings(self, **kwargs):
for key, value in kwargs.items():
if hasattr(self, key):
- setattr(self, key, value)
+ if isinstance(getattr(self, key), list):
+ if isinstance(value, list):
+ getattr(self, key).extend(value)
+ else:
+ getattr(self, key).append(value)
+ else:
+ setattr(self, key, value)
def save_settings_to_yaml(settings: Settings, file_path: str):
diff --git a/src/backend/langflow/template/field/base.py b/src/backend/langflow/template/field/base.py
index a747ad322..31c68d094 100644
--- a/src/backend/langflow/template/field/base.py
+++ b/src/backend/langflow/template/field/base.py
@@ -6,23 +6,58 @@ from pydantic import BaseModel
class TemplateFieldCreator(BaseModel, ABC):
field_type: str = "str"
+ """The type of field this is. Default is a string."""
+
required: bool = False
+ """Specifies if the field is required. Defaults to False."""
+
placeholder: str = ""
+ """A placeholder string for the field. Default is an empty string."""
+
is_list: bool = False
+ """Defines if the field is a list. Default is False."""
+
show: bool = True
+ """Should the field be shown. Defaults to True."""
+
multiline: bool = False
+ """Defines if the field will allow the user to open a text editor. Default is False."""
+
value: Any = None
+ """The value of the field. Default is None."""
+
suffixes: list[str] = []
- fileTypes: list[str] = []
+ """List of suffixes for a file field. Default is an empty list."""
+
file_types: list[str] = []
+ """List of file types associated with the field. Default is an empty list. (duplicate)"""
+
file_path: Union[str, None] = None
+ """The file path of the field if it is a file. Defaults to None."""
+
password: bool = False
+ """Specifies if the field is a password. Defaults to False."""
+
options: list[str] = []
+ """List of options for the field. Only used when is_list=True. Default is an empty list."""
+
name: str = ""
+ """Name of the field. Default is an empty string."""
+
display_name: Optional[str] = None
+ """Display name of the field. Defaults to None."""
+
advanced: bool = False
+ """Specifies if the field will an advanced parameter (hidden). Defaults to False."""
+
input_types: list[str] = []
+ """List of input types for the handle when the field has more than one type. Default is an empty list."""
+
+ dynamic: bool = False
+ """Specifies if the field is dynamic. Defaults to False."""
+
info: Optional[str] = ""
+ """Additional information about the field to be shown in the tooltip. Defaults to an empty string."""
def to_dict(self):
result = self.dict()
diff --git a/src/backend/langflow/template/frontend_node/__init__.py b/src/backend/langflow/template/frontend_node/__init__.py
index c36234364..e13aa1ded 100644
--- a/src/backend/langflow/template/frontend_node/__init__.py
+++ b/src/backend/langflow/template/frontend_node/__init__.py
@@ -9,6 +9,7 @@ from langflow.template.frontend_node import (
vectorstores,
documentloaders,
textsplitters,
+ custom_components,
)
__all__ = [
@@ -22,4 +23,5 @@ __all__ = [
"vectorstores",
"documentloaders",
"textsplitters",
+ "custom_components",
]
diff --git a/src/backend/langflow/template/frontend_node/agents.py b/src/backend/langflow/template/frontend_node/agents.py
index 02aea78b9..63c8a4d5e 100644
--- a/src/backend/langflow/template/frontend_node/agents.py
+++ b/src/backend/langflow/template/frontend_node/agents.py
@@ -145,7 +145,7 @@ class CSVAgentNode(FrontendNode):
name="path",
value="",
suffixes=[".csv"],
- fileTypes=["csv"],
+ file_types=["csv"],
),
TemplateField(
field_type="BaseLanguageModel",
diff --git a/src/backend/langflow/template/frontend_node/base.py b/src/backend/langflow/template/frontend_node/base.py
index 7dae45463..fe19b5652 100644
--- a/src/backend/langflow/template/frontend_node/base.py
+++ b/src/backend/langflow/template/frontend_node/base.py
@@ -5,13 +5,14 @@ from typing import List, Optional
from pydantic import BaseModel, Field
from langflow.template.frontend_node.formatter import field_formatters
-from langflow.template.frontend_node.constants import FORCE_SHOW_FIELDS
+from langflow.template.frontend_node.constants import (
+ CLASSES_TO_REMOVE,
+ FORCE_SHOW_FIELDS,
+)
from langflow.template.field.base import TemplateField
from langflow.template.template.base import Template
from langflow.utils import constants
-CLASSES_TO_REMOVE = ["Serializable", "BaseModel", "object"]
-
class FieldFormatters(BaseModel):
formatters = {
@@ -51,14 +52,8 @@ class FrontendNode(BaseModel):
custom_fields: defaultdict = defaultdict(list)
output_types: List[str] = []
field_formatters: FieldFormatters = Field(default_factory=FieldFormatters)
-
- def process_base_classes(self) -> None:
- """Removes unwanted base classes from the list of base classes."""
- self.base_classes = [
- base_class
- for base_class in self.base_classes
- if base_class not in CLASSES_TO_REMOVE
- ]
+ beta: bool = False
+ error: Optional[str] = None
# field formatters is an instance attribute but it is not used in the class
# so we need to create a method to get it
@@ -70,6 +65,14 @@ class FrontendNode(BaseModel):
"""Sets the documentation of the frontend node."""
self.documentation = documentation
+ def process_base_classes(self) -> None:
+ """Removes unwanted base classes from the list of base classes."""
+ self.base_classes = [
+ base_class
+ for base_class in self.base_classes
+ if base_class not in CLASSES_TO_REMOVE
+ ]
+
def to_dict(self) -> dict:
"""Returns a dict representation of the frontend node."""
self.process_base_classes()
@@ -82,6 +85,8 @@ class FrontendNode(BaseModel):
"custom_fields": self.custom_fields,
"output_types": self.output_types,
"documentation": self.documentation,
+ "beta": self.beta,
+ "error": self.error,
},
}
diff --git a/src/backend/langflow/template/frontend_node/constants.py b/src/backend/langflow/template/frontend_node/constants.py
index 513ccd1ef..8800a3755 100644
--- a/src/backend/langflow/template/frontend_node/constants.py
+++ b/src/backend/langflow/template/frontend_node/constants.py
@@ -63,3 +63,6 @@ You can change this to use other APIs like JinaChat, LocalAI and Prem.
INPUT_KEY_INFO = """The variable to be used as Chat Input when more than one variable is available."""
OUTPUT_KEY_INFO = """The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)"""
+
+
+CLASSES_TO_REMOVE = ["Serializable", "BaseModel", "object", "Runnable", "Generic"]
diff --git a/src/backend/langflow/template/frontend_node/custom_components.py b/src/backend/langflow/template/frontend_node/custom_components.py
new file mode 100644
index 000000000..4f36a1c9f
--- /dev/null
+++ b/src/backend/langflow/template/frontend_node/custom_components.py
@@ -0,0 +1,31 @@
+from langflow.template.field.base import TemplateField
+from langflow.template.frontend_node.base import FrontendNode
+from langflow.template.template.base import Template
+from langflow.interface.custom.constants import DEFAULT_CUSTOM_COMPONENT_CODE
+
+
+class CustomComponentFrontendNode(FrontendNode):
+ name: str = "CustomComponent"
+ display_name: str = "Custom Component"
+ beta: bool = True
+ template: Template = Template(
+ type_name="CustomComponent",
+ fields=[
+ TemplateField(
+ field_type="code",
+ required=True,
+ placeholder="",
+ is_list=False,
+ show=True,
+ value=DEFAULT_CUSTOM_COMPONENT_CODE,
+ name="code",
+ advanced=False,
+ dynamic=True,
+ )
+ ],
+ )
+ description: str = "Create any custom component you want!"
+ base_classes: list[str] = []
+
+ def to_dict(self):
+ return super().to_dict()
diff --git a/src/backend/langflow/template/frontend_node/documentloaders.py b/src/backend/langflow/template/frontend_node/documentloaders.py
index d775d8736..bb78d8855 100644
--- a/src/backend/langflow/template/frontend_node/documentloaders.py
+++ b/src/backend/langflow/template/frontend_node/documentloaders.py
@@ -14,7 +14,7 @@ def build_file_field(
name=name,
value="",
suffixes=suffixes,
- fileTypes=fileTypes,
+ file_types=fileTypes,
)
diff --git a/src/backend/langflow/template/frontend_node/llms.py b/src/backend/langflow/template/frontend_node/llms.py
index de0fa3c0b..a6a128cfe 100644
--- a/src/backend/langflow/template/frontend_node/llms.py
+++ b/src/backend/langflow/template/frontend_node/llms.py
@@ -19,7 +19,7 @@ class LLMFrontendNode(FrontendNode):
name="credentials",
value="",
suffixes=[".json"],
- fileTypes=["json"],
+ file_types=["json"],
)
)
diff --git a/src/backend/langflow/template/frontend_node/memories.py b/src/backend/langflow/template/frontend_node/memories.py
index 374d36ff0..019dc0fa8 100644
--- a/src/backend/langflow/template/frontend_node/memories.py
+++ b/src/backend/langflow/template/frontend_node/memories.py
@@ -94,6 +94,14 @@ class MemoryFrontendNode(FrontendNode):
field.show = False
field.required = False
+ if name == "MotorheadMemory":
+ if field.name == "chat_memory":
+ field.show = False
+ field.required = False
+ elif field.name == "client_id":
+ field.show = True
+ field.advanced = False
+
class PostgresChatMessageHistoryFrontendNode(MemoryFrontendNode):
name: str = "PostgresChatMessageHistory"
diff --git a/src/backend/langflow/template/frontend_node/tools.py b/src/backend/langflow/template/frontend_node/tools.py
index ece765ed7..579b32da3 100644
--- a/src/backend/langflow/template/frontend_node/tools.py
+++ b/src/backend/langflow/template/frontend_node/tools.py
@@ -1,7 +1,9 @@
from langflow.template.field.base import TemplateField
from langflow.template.frontend_node.base import FrontendNode
from langflow.template.template.base import Template
-from langflow.utils.constants import DEFAULT_PYTHON_FUNCTION
+from langflow.utils.constants import (
+ DEFAULT_PYTHON_FUNCTION,
+)
class ToolNode(FrontendNode):
diff --git a/src/backend/langflow/utils/constants.py b/src/backend/langflow/utils/constants.py
index 44103c2b7..e473d855b 100644
--- a/src/backend/langflow/utils/constants.py
+++ b/src/backend/langflow/utils/constants.py
@@ -17,18 +17,29 @@ CHAT_OPENAI_MODELS = [
]
ANTHROPIC_MODELS = [
- "claude-v1", # largest model, ideal for a wide range of more complex tasks.
- "claude-v1-100k", # An enhanced version of claude-v1 with a 100,000 token (roughly 75,000 word) context window.
- "claude-instant-v1", # A smaller model with far lower latency, sampling at roughly 40 words/sec!
- "claude-instant-v1-100k", # Like claude-instant-v1 with a 100,000 token context window but retains its performance.
+ # largest model, ideal for a wide range of more complex tasks.
+ "claude-v1",
+ # An enhanced version of claude-v1 with a 100,000 token (roughly 75,000 word) context window.
+ "claude-v1-100k",
+ # A smaller model with far lower latency, sampling at roughly 40 words/sec!
+ "claude-instant-v1",
+ # Like claude-instant-v1 with a 100,000 token context window but retains its performance.
+ "claude-instant-v1-100k",
# Specific sub-versions of the above models:
- "claude-v1.3", # Vs claude-v1.2: better instruction-following, code, and non-English dialogue and writing.
- "claude-v1.3-100k", # An enhanced version of claude-v1.3 with a 100,000 token (roughly 75,000 word) context window.
- "claude-v1.2", # Vs claude-v1.1: small adv in general helpfulness, instruction following, coding, and other tasks.
- "claude-v1.0", # An earlier version of claude-v1.
- "claude-instant-v1.1", # Latest version of claude-instant-v1. Better than claude-instant-v1.0 at most tasks.
- "claude-instant-v1.1-100k", # Version of claude-instant-v1.1 with a 100K token context window.
- "claude-instant-v1.0", # An earlier version of claude-instant-v1.
+ # Vs claude-v1.2: better instruction-following, code, and non-English dialogue and writing.
+ "claude-v1.3",
+ # An enhanced version of claude-v1.3 with a 100,000 token (roughly 75,000 word) context window.
+ "claude-v1.3-100k",
+ # Vs claude-v1.1: small adv in general helpfulness, instruction following, coding, and other tasks.
+ "claude-v1.2",
+ # An earlier version of claude-v1.
+ "claude-v1.0",
+ # Latest version of claude-instant-v1. Better than claude-instant-v1.0 at most tasks.
+ "claude-instant-v1.1",
+ # Version of claude-instant-v1.1 with a 100K token context window.
+ "claude-instant-v1.1-100k",
+ # An earlier version of claude-instant-v1.
+ "claude-instant-v1.0",
]
DEFAULT_PYTHON_FUNCTION = """
@@ -36,4 +47,5 @@ def python_function(text: str) -> str:
\"\"\"This is a default python function that returns the input text\"\"\"
return text
"""
+
DIRECT_TYPES = ["str", "bool", "code", "int", "float", "Any", "prompt"]
diff --git a/src/backend/langflow/utils/logger.py b/src/backend/langflow/utils/logger.py
index b70a451d4..deb0f75ca 100644
--- a/src/backend/langflow/utils/logger.py
+++ b/src/backend/langflow/utils/logger.py
@@ -6,7 +6,7 @@ from rich.logging import RichHandler
logger = logging.getLogger("langflow")
-def configure(log_level: str = "INFO", log_file: Path = None): # type: ignore
+def configure(log_level: str = "DEBUG", log_file: Path = None): # type: ignore
log_format = "%(asctime)s - %(levelname)s - %(message)s"
log_level_value = getattr(logging, log_level.upper(), logging.INFO)
diff --git a/src/backend/langflow/utils/types.py b/src/backend/langflow/utils/types.py
new file mode 100644
index 000000000..3657d550e
--- /dev/null
+++ b/src/backend/langflow/utils/types.py
@@ -0,0 +1,2 @@
+class Prompt:
+ pass
diff --git a/src/backend/langflow/utils/util.py b/src/backend/langflow/utils/util.py
index c5db6052e..f68c9dbe2 100644
--- a/src/backend/langflow/utils/util.py
+++ b/src/backend/langflow/utils/util.py
@@ -1,13 +1,15 @@
-import importlib
-import inspect
import re
+import inspect
+import importlib
from functools import wraps
-from typing import Dict, Optional
+from typing import Optional, Dict, Any, Union
from docstring_parser import parse # type: ignore
from langflow.template.frontend_node.constants import FORCE_SHOW_FIELDS
from langflow.utils import constants
+from langflow.utils.logger import logger
+from multiprocess import cpu_count # type: ignore
def build_template_from_function(
@@ -214,111 +216,6 @@ def get_default_factory(module: str, function: str):
return None
-def format_dict(d, name: Optional[str] = None):
- """
- Formats a dictionary by removing certain keys and modifying the
- values of other keys.
-
- Args:
- d: the dictionary to format
- name: the name of the class to format
-
- Returns:
- A new dictionary with the desired modifications applied.
- """
-
- # Process remaining keys
- for key, value in d.items():
- if key == "_type":
- continue
-
- _type = value["type"]
-
- if not isinstance(_type, str):
- _type = _type.__name__
-
- # Remove 'Optional' wrapper
- if "Optional" in _type:
- _type = _type.replace("Optional[", "")[:-1]
-
- # Check for list type
- if "List" in _type or "Sequence" in _type or "Set" in _type:
- _type = (
- _type.replace("List[", "")
- .replace("Sequence[", "")
- .replace("Set[", "")[:-1]
- )
- value["list"] = True
- else:
- value["list"] = False
-
- # Replace 'Mapping' with 'dict'
- if "Mapping" in _type:
- _type = _type.replace("Mapping", "dict")
-
- # Change type from str to Tool
- value["type"] = "Tool" if key in ["allowed_tools"] else _type
-
- value["type"] = "int" if key in ["max_value_length"] else value["type"]
-
- # Show or not field
- value["show"] = bool(
- (value["required"] and key not in ["input_variables"])
- or key in FORCE_SHOW_FIELDS
- or "api_key" in key
- )
-
- # Add password field
- value["password"] = any(
- text in key.lower() for text in ["password", "token", "api", "key"]
- )
-
- # Add multline
- value["multiline"] = key in [
- "suffix",
- "prefix",
- "template",
- "examples",
- "code",
- "headers",
- "format_instructions",
- ]
-
- # Replace dict type with str
- if "dict" in value["type"].lower():
- value["type"] = "code"
-
- if key == "dict_":
- value["type"] = "file"
- value["suffixes"] = [".json", ".yaml", ".yml"]
- value["fileTypes"] = ["json", "yaml", "yml"]
-
- # Replace default value with actual value
- if "default" in value:
- value["value"] = value["default"]
- value.pop("default")
-
- if key == "headers":
- value[
- "value"
- ] = """{'Authorization':
- 'Bearer '}"""
- # Add options to openai
- if name == "OpenAI" and key == "model_name":
- value["options"] = constants.OPENAI_MODELS
- value["list"] = True
- value["value"] = constants.OPENAI_MODELS[0]
- elif name == "ChatOpenAI" and key == "model_name":
- value["options"] = constants.CHAT_OPENAI_MODELS
- value["list"] = True
- value["value"] = constants.CHAT_OPENAI_MODELS[0]
- elif (name == "Anthropic" or name == "ChatAnthropic") and key == "model_name":
- value["options"] = constants.ANTHROPIC_MODELS
- value["list"] = True
- value["value"] = constants.ANTHROPIC_MODELS[0]
- return d
-
-
def update_verbose(d: dict, new_value: bool) -> dict:
"""
Recursively updates the value of the 'verbose' key in a dictionary.
@@ -349,3 +246,219 @@ def sync_to_async(func):
return func(*args, **kwargs)
return async_wrapper
+
+
+def format_dict(
+ dictionary: Dict[str, Any], class_name: Optional[str] = None
+) -> Dict[str, Any]:
+ """
+ Formats a dictionary by removing certain keys and modifying the
+ values of other keys.
+
+ Returns:
+ A new dictionary with the desired modifications applied.
+ """
+
+ for key, value in dictionary.items():
+ if key == "_type":
+ continue
+
+ _type: Union[str, type] = get_type(value)
+
+ _type = remove_optional_wrapper(_type)
+ _type = check_list_type(_type, value)
+ _type = replace_mapping_with_dict(_type)
+
+ value["type"] = get_formatted_type(key, _type)
+ value["show"] = should_show_field(value, key)
+ value["password"] = is_password_field(key)
+ value["multiline"] = is_multiline_field(key)
+
+ replace_dict_type_with_code(value)
+
+ if key == "dict_":
+ set_dict_file_attributes(value)
+
+ replace_default_value_with_actual(value)
+
+ if key == "headers":
+ set_headers_value(value)
+
+ add_options_to_field(value, class_name, key)
+
+ return dictionary
+
+
+def get_type(value: Any) -> Union[str, type]:
+ """
+ Retrieves the type value from the dictionary.
+
+ Returns:
+ The type value.
+ """
+ _type = value["type"]
+
+ return _type if isinstance(_type, str) else _type.__name__
+
+
+def remove_optional_wrapper(_type: Union[str, type]) -> str:
+ """
+ Removes the 'Optional' wrapper from the type string.
+
+ Returns:
+ The type string with the 'Optional' wrapper removed.
+ """
+ if isinstance(_type, type):
+ _type = str(_type)
+ if "Optional" in _type:
+ _type = _type.replace("Optional[", "")[:-1]
+
+ return _type
+
+
+def check_list_type(_type: str, value: Dict[str, Any]) -> str:
+ """
+ Checks if the type is a list type and modifies the value accordingly.
+
+ Returns:
+ The modified type string.
+ """
+ if any(list_type in _type for list_type in ["List", "Sequence", "Set"]):
+ _type = (
+ _type.replace("List[", "").replace("Sequence[", "").replace("Set[", "")[:-1]
+ )
+ value["list"] = True
+ else:
+ value["list"] = False
+
+ return _type
+
+
+def replace_mapping_with_dict(_type: str) -> str:
+ """
+ Replaces 'Mapping' with 'dict' in the type string.
+
+ Returns:
+ The modified type string.
+ """
+ if "Mapping" in _type:
+ _type = _type.replace("Mapping", "dict")
+
+ return _type
+
+
+def get_formatted_type(key: str, _type: str) -> str:
+ """
+ Formats the type value based on the given key.
+
+ Returns:
+ The formatted type value.
+ """
+ if key == "allowed_tools":
+ return "Tool"
+
+ elif key == "max_value_length":
+ return "int"
+
+ return _type
+
+
+def should_show_field(value: Dict[str, Any], key: str) -> bool:
+ """
+ Determines if the field should be shown or not.
+
+ Returns:
+ True if the field should be shown, False otherwise.
+ """
+ return (
+ (value["required"] and key != "input_variables")
+ or key in FORCE_SHOW_FIELDS
+ or any(text in key.lower() for text in ["password", "token", "api", "key"])
+ )
+
+
+def is_password_field(key: str) -> bool:
+ """
+ Determines if the field is a password field.
+
+ Returns:
+ True if the field is a password field, False otherwise.
+ """
+ return any(text in key.lower() for text in ["password", "token", "api", "key"])
+
+
+def is_multiline_field(key: str) -> bool:
+ """
+ Determines if the field is a multiline field.
+
+ Returns:
+ True if the field is a multiline field, False otherwise.
+ """
+ return key in {
+ "suffix",
+ "prefix",
+ "template",
+ "examples",
+ "code",
+ "headers",
+ "format_instructions",
+ }
+
+
+def replace_dict_type_with_code(value: Dict[str, Any]) -> None:
+ """
+ Replaces the type value with 'code' if the type is a dict.
+ """
+ if "dict" in value["type"].lower():
+ value["type"] = "code"
+
+
+def set_dict_file_attributes(value: Dict[str, Any]) -> None:
+ """
+ Sets the file attributes for the 'dict_' key.
+ """
+ value["type"] = "file"
+ value["suffixes"] = [".json", ".yaml", ".yml"]
+ value["fileTypes"] = ["json", "yaml", "yml"]
+
+
+def replace_default_value_with_actual(value: Dict[str, Any]) -> None:
+ """
+ Replaces the default value with the actual value.
+ """
+ if "default" in value:
+ value["value"] = value["default"]
+ value.pop("default")
+
+
+def set_headers_value(value: Dict[str, Any]) -> None:
+ """
+ Sets the value for the 'headers' key.
+ """
+ value["value"] = """{'Authorization': 'Bearer '}"""
+
+
+def add_options_to_field(
+ value: Dict[str, Any], class_name: Optional[str], key: str
+) -> None:
+ """
+ Adds options to the field based on the class name and key.
+ """
+ options_map = {
+ "OpenAI": constants.OPENAI_MODELS,
+ "ChatOpenAI": constants.CHAT_OPENAI_MODELS,
+ "Anthropic": constants.ANTHROPIC_MODELS,
+ "ChatAnthropic": constants.ANTHROPIC_MODELS,
+ }
+
+ if class_name in options_map and key == "model_name":
+ value["options"] = options_map[class_name]
+ value["list"] = True
+ value["value"] = options_map[class_name][0]
+
+
+def get_number_of_workers(workers=None):
+ if workers == -1 or workers is None:
+ workers = (cpu_count() * 2) + 1
+ logger.debug(f"Number of workers: {workers}")
+ return workers
diff --git a/src/backend/langflow/utils/validate.py b/src/backend/langflow/utils/validate.py
index 905b9dd44..f8a9c1d1d 100644
--- a/src/backend/langflow/utils/validate.py
+++ b/src/backend/langflow/utils/validate.py
@@ -163,9 +163,77 @@ def create_function(code, function_name):
return wrapped_function
+def create_class(code, class_name):
+ if not hasattr(ast, "TypeIgnore"):
+
+ class TypeIgnore(ast.AST):
+ _fields = ()
+
+ ast.TypeIgnore = TypeIgnore
+
+ module = ast.parse(code)
+ exec_globals = globals().copy()
+
+ for node in module.body:
+ if isinstance(node, ast.Import):
+ for alias in node.names:
+ try:
+ exec_globals[alias.asname or alias.name] = importlib.import_module(
+ alias.name
+ )
+ except ModuleNotFoundError as e:
+ raise ModuleNotFoundError(
+ f"Module {alias.name} not found. Please install it and try again."
+ ) from e
+ elif isinstance(node, ast.ImportFrom):
+ try:
+ imported_module = importlib.import_module(node.module)
+ for alias in node.names:
+ exec_globals[alias.name] = getattr(imported_module, alias.name)
+ except ModuleNotFoundError as e:
+ raise ModuleNotFoundError(
+ f"Module {node.module} not found. Please install it and try again."
+ ) from e
+
+ class_code = next(
+ node
+ for node in module.body
+ if isinstance(node, ast.ClassDef) and node.name == class_name
+ )
+ class_code.parent = None
+ code_obj = compile(
+ ast.Module(body=[class_code], type_ignores=[]), "", "exec"
+ )
+ # This suppresses import errors
+ # with contextlib.suppress(Exception):
+ exec(code_obj, exec_globals, locals())
+ exec_globals[class_name] = locals()[class_name]
+
+ # Return a function that imports necessary modules and creates an instance of the target class
+ def build_my_class(*args, **kwargs):
+ for module_name, module in exec_globals.items():
+ if isinstance(module, type(importlib)):
+ globals()[module_name] = module
+
+ instance = exec_globals[class_name](*args, **kwargs)
+ return instance
+
+ build_my_class.__globals__.update(exec_globals)
+
+ return build_my_class
+
+
def extract_function_name(code):
module = ast.parse(code)
for node in module.body:
if isinstance(node, ast.FunctionDef):
return node.name
raise ValueError("No function definition found in the code string")
+
+
+def extract_class_name(code):
+ module = ast.parse(code)
+ for node in module.body:
+ if isinstance(node, ast.ClassDef):
+ return node.name
+ raise ValueError("No class definition found in the code string")
diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json
index 6ac6b625c..ed3eacd4f 100644
--- a/src/frontend/package-lock.json
+++ b/src/frontend/package-lock.json
@@ -20,6 +20,7 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-menubar": "^1.0.3",
+ "@radix-ui/react-popover": "^1.0.6",
"@radix-ui/react-progress": "^1.0.3",
"@radix-ui/react-separator": "^1.0.3",
"@radix-ui/react-slot": "^1.0.2",
@@ -29,6 +30,7 @@
"@tabler/icons-react": "^2.18.0",
"@tailwindcss/forms": "^0.5.3",
"@tailwindcss/line-clamp": "^0.4.4",
+ "@types/axios": "^0.14.0",
"accordion": "^3.0.2",
"ace-builds": "^1.16.0",
"add": "^2.0.6",
@@ -94,14 +96,12 @@
},
"node_modules/@adobe/css-tools": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz",
- "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -111,8 +111,7 @@
},
"node_modules/@ampproject/remapping": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -123,8 +122,7 @@
},
"node_modules/@antfu/ni": {
"version": "0.21.4",
- "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-0.21.4.tgz",
- "integrity": "sha512-O0Uv9LbLDSoEg26fnMDdDRiPwFJnQSoD4WnrflDwKCJm8Cx/0mV4cGxwBLXan5mGIrpK4Dd7vizf4rQm0QCEAA==",
+ "license": "MIT",
"bin": {
"na": "bin/na.mjs",
"nci": "bin/nci.mjs",
@@ -137,8 +135,7 @@
},
"node_modules/@babel/code-frame": {
"version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
- "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
+ "license": "MIT",
"dependencies": {
"@babel/highlight": "^7.18.6"
},
@@ -147,17 +144,17 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.22.6",
+ "version": "7.22.9",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
"integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.22.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz",
- "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==",
+ "license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.22.5",
@@ -185,8 +182,7 @@
},
"node_modules/@babel/core/node_modules/@babel/code-frame": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
- "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "license": "MIT",
"dependencies": {
"@babel/highlight": "^7.22.5"
},
@@ -194,10 +190,16 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/core/node_modules/@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/generator": {
- "version": "7.22.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz",
- "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==",
+ "version": "7.22.9",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5",
"@jridgewell/gen-mapping": "^0.3.2",
@@ -209,15 +211,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
- "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+ "version": "7.22.9",
+ "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.22.6",
+ "@babel/compat-data": "^7.22.9",
"@babel/helper-validator-option": "^7.22.5",
- "@nicolo-ribaudo/semver-v6": "^6.3.3",
"browserslist": "^4.21.9",
- "lru-cache": "^5.1.1"
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -226,18 +227,23 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-environment-visitor": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
- "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "license": "MIT",
"dependencies": {
"@babel/template": "^7.22.5",
"@babel/types": "^7.22.5"
@@ -248,8 +254,7 @@
},
"node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -259,8 +264,7 @@
},
"node_modules/@babel/helper-module-imports": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -269,27 +273,25 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
- "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+ "version": "7.22.9",
+ "license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-module-imports": "^7.22.5",
"@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
- "@babel/template": "^7.22.5",
- "@babel/traverse": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -299,8 +301,7 @@
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -310,32 +311,28 @@
},
"node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
- "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
+ "license": "MIT",
"dependencies": {
"@babel/template": "^7.22.5",
"@babel/traverse": "^7.22.6",
@@ -347,8 +344,7 @@
},
"node_modules/@babel/highlight": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
- "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.5",
"chalk": "^2.0.0",
@@ -360,8 +356,7 @@
},
"node_modules/@babel/parser": {
"version": "7.22.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
- "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
+ "license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -371,8 +366,7 @@
},
"node_modules/@babel/runtime": {
"version": "7.20.13",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
- "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@@ -382,8 +376,7 @@
},
"node_modules/@babel/template": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
- "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.5",
"@babel/parser": "^7.22.5",
@@ -395,8 +388,7 @@
},
"node_modules/@babel/template/node_modules/@babel/code-frame": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
- "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "license": "MIT",
"dependencies": {
"@babel/highlight": "^7.22.5"
},
@@ -406,8 +398,7 @@
},
"node_modules/@babel/traverse": {
"version": "7.22.8",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz",
- "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==",
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.5",
"@babel/generator": "^7.22.7",
@@ -426,8 +417,7 @@
},
"node_modules/@babel/traverse/node_modules/@babel/code-frame": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
- "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "license": "MIT",
"dependencies": {
"@babel/highlight": "^7.22.5"
},
@@ -437,8 +427,7 @@
},
"node_modules/@babel/types": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
- "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+ "license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5",
@@ -450,8 +439,7 @@
},
"node_modules/@emotion/babel-plugin": {
"version": "11.11.0",
- "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
- "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
+ "license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.16.7",
"@babel/runtime": "^7.18.3",
@@ -468,8 +456,7 @@
},
"node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -479,16 +466,14 @@
},
"node_modules/@emotion/babel-plugin/node_modules/source-map": {
"version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@emotion/cache": {
"version": "11.11.0",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
- "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
+ "license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.8.1",
"@emotion/sheet": "^1.2.2",
@@ -499,26 +484,22 @@
},
"node_modules/@emotion/hash": {
"version": "0.9.1",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
- "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
+ "license": "MIT"
},
"node_modules/@emotion/is-prop-valid": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
- "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==",
+ "license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.8.1"
}
},
"node_modules/@emotion/memoize": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
- "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+ "license": "MIT"
},
"node_modules/@emotion/react": {
"version": "11.10.5",
- "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz",
- "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.5",
@@ -544,8 +525,7 @@
},
"node_modules/@emotion/serialize": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz",
- "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==",
+ "license": "MIT",
"dependencies": {
"@emotion/hash": "^0.9.1",
"@emotion/memoize": "^0.8.1",
@@ -556,13 +536,11 @@
},
"node_modules/@emotion/sheet": {
"version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
- "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
+ "license": "MIT"
},
"node_modules/@emotion/styled": {
"version": "11.10.5",
- "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz",
- "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.5",
@@ -587,79 +565,29 @@
},
"node_modules/@emotion/unitless": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
- "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ "license": "MIT"
},
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
- "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "license": "MIT",
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/@emotion/utils": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
- "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
+ "license": "MIT"
},
"node_modules/@emotion/weak-memoize": {
"version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
- "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
+ "license": "MIT"
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
"cpu": [
"arm64"
],
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -668,293 +596,20 @@
"node": ">=12"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
- "cpu": [
- "loong64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
- "cpu": [
- "mips64el"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
- "cpu": [
- "riscv64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
- "cpu": [
- "s390x"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/@floating-ui/core": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz",
- "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g=="
+ "license": "MIT"
},
"node_modules/@floating-ui/dom": {
"version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.2.tgz",
- "integrity": "sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==",
+ "license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.3.1"
}
},
"node_modules/@floating-ui/react-dom": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.1.tgz",
- "integrity": "sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==",
+ "license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.3.0"
},
@@ -965,8 +620,7 @@
},
"node_modules/@headlessui/react": {
"version": "1.7.10",
- "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.10.tgz",
- "integrity": "sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==",
+ "license": "MIT",
"dependencies": {
"client-only": "^0.0.1"
},
@@ -980,16 +634,14 @@
},
"node_modules/@heroicons/react": {
"version": "2.0.15",
- "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.15.tgz",
- "integrity": "sha512-CZ2dGWgWG3/z5LEoD5D3MEr1syn45JM/OB2aDpw531Ryecgkz2V7TWQ808P0lva7zP003PVW6WlwbofsYyga3A==",
+ "license": "MIT",
"peerDependencies": {
"react": ">= 16"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1001,29 +653,25 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.18",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
- "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
@@ -1031,14 +679,12 @@
},
"node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ "license": "MIT"
},
"node_modules/@mole-inc/bin-wrapper": {
"version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz",
- "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bin-check": "^4.1.0",
"bin-version-check": "^5.0.0",
@@ -1055,8 +701,7 @@
},
"node_modules/@mui/base": {
"version": "5.0.0-alpha.118",
- "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.118.tgz",
- "integrity": "sha512-GAEpqhnuHjRaAZLdxFNuOf2GDTp9sUawM46oHZV4VnYPFjXJDkIYFWfIQLONb0nga92OiqS5DD/scGzVKCL0Mw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.13",
"@emotion/is-prop-valid": "^1.2.0",
@@ -1087,13 +732,11 @@
},
"node_modules/@mui/base/node_modules/react-is": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ "license": "MIT"
},
"node_modules/@mui/core-downloads-tracker": {
"version": "5.13.4",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz",
- "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
@@ -1101,8 +744,7 @@
},
"node_modules/@mui/material": {
"version": "5.11.9",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.9.tgz",
- "integrity": "sha512-Wb3WzjzYyi/WKSl/XlF7aC8kk2NE21IoHMF7hNQMkPb0GslbWwR4OUjlBpxtG+RSZn44wMZkEDNB9Hw0TDsd8g==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.13",
"@mui/base": "5.0.0-alpha.118",
@@ -1145,16 +787,14 @@
},
"node_modules/@mui/material/node_modules/react-is": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ "license": "MIT"
},
"node_modules/@mui/private-theming": {
- "version": "5.13.1",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz",
- "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==",
+ "version": "5.13.7",
+ "license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.21.0",
- "@mui/utils": "^5.13.1",
+ "@babel/runtime": "^7.22.5",
+ "@mui/utils": "^5.13.7",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1175,9 +815,8 @@
}
},
"node_modules/@mui/private-theming/node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "version": "7.22.6",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@@ -1185,10 +824,34 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@mui/private-theming/node_modules/@mui/utils": {
+ "version": "5.13.7",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.22.5",
+ "@types/prop-types": "^15.7.5",
+ "@types/react-is": "^18.2.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@mui/private-theming/node_modules/react-is": {
+ "version": "18.2.0",
+ "license": "MIT"
+ },
"node_modules/@mui/styled-engine": {
"version": "5.13.2",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz",
- "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.21.0",
"@emotion/cache": "^11.11.0",
@@ -1217,9 +880,8 @@
}
},
"node_modules/@mui/styled-engine/node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "version": "7.22.6",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@@ -1229,13 +891,11 @@
},
"node_modules/@mui/styled-engine/node_modules/csstype": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "license": "MIT"
},
"node_modules/@mui/system": {
"version": "5.13.6",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz",
- "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.22.5",
"@mui/private-theming": "^5.13.1",
@@ -1272,9 +932,8 @@
}
},
"node_modules/@mui/system/node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "version": "7.22.6",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@@ -1284,13 +943,11 @@
},
"node_modules/@mui/system/node_modules/csstype": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "license": "MIT"
},
"node_modules/@mui/types": {
"version": "7.2.4",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
- "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*"
},
@@ -1302,8 +959,7 @@
},
"node_modules/@mui/utils": {
"version": "5.13.6",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz",
- "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.22.5",
"@types/prop-types": "^15.7.5",
@@ -1323,9 +979,8 @@
}
},
"node_modules/@mui/utils/node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "version": "7.22.6",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@@ -1335,21 +990,11 @@
},
"node_modules/@mui/utils/node_modules/react-is": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
- },
- "node_modules/@nicolo-ribaudo/semver-v6": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
- "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
- "bin": {
- "semver": "bin/semver.js"
- }
+ "license": "MIT"
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -1360,16 +1005,14 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -1380,8 +1023,7 @@
},
"node_modules/@popperjs/core": {
"version": "2.11.8",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
- "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
@@ -1389,16 +1031,14 @@
},
"node_modules/@radix-ui/primitive": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
- "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
}
},
"node_modules/@radix-ui/react-accordion": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz",
- "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1428,8 +1068,7 @@
},
"node_modules/@radix-ui/react-arrow": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz",
- "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-primitive": "1.0.3"
@@ -1451,8 +1090,7 @@
},
"node_modules/@radix-ui/react-checkbox": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.0.4.tgz",
- "integrity": "sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1481,8 +1119,7 @@
},
"node_modules/@radix-ui/react-collapsible": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz",
- "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1511,8 +1148,7 @@
},
"node_modules/@radix-ui/react-collection": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz",
- "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-compose-refs": "1.0.1",
@@ -1537,8 +1173,7 @@
},
"node_modules/@radix-ui/react-compose-refs": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
- "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -1554,8 +1189,7 @@
},
"node_modules/@radix-ui/react-context": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
- "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -1571,8 +1205,7 @@
},
"node_modules/@radix-ui/react-dialog": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.4.tgz",
- "integrity": "sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1607,8 +1240,7 @@
},
"node_modules/@radix-ui/react-direction": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz",
- "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -1624,8 +1256,7 @@
},
"node_modules/@radix-ui/react-dismissable-layer": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz",
- "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1651,8 +1282,7 @@
},
"node_modules/@radix-ui/react-dropdown-menu": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.5.tgz",
- "integrity": "sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1680,8 +1310,7 @@
},
"node_modules/@radix-ui/react-focus-guards": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz",
- "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -1697,8 +1326,7 @@
},
"node_modules/@radix-ui/react-focus-scope": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz",
- "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-compose-refs": "1.0.1",
@@ -1722,16 +1350,14 @@
},
"node_modules/@radix-ui/react-icons": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz",
- "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==",
+ "license": "MIT",
"peerDependencies": {
"react": "^16.x || ^17.x || ^18.x"
}
},
"node_modules/@radix-ui/react-id": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz",
- "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-use-layout-effect": "1.0.1"
@@ -1748,8 +1374,7 @@
},
"node_modules/@radix-ui/react-label": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz",
- "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-primitive": "1.0.3"
@@ -1771,8 +1396,7 @@
},
"node_modules/@radix-ui/react-menu": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.5.tgz",
- "integrity": "sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1811,8 +1435,7 @@
},
"node_modules/@radix-ui/react-menubar": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.0.3.tgz",
- "integrity": "sha512-GqjdxzYCjjKhcgEODDP8SrYfbWNh/Hm3lyuFkP5Q5IbX0QfXklLF1o1AqA3oTV2kulUgN/kOZVS92hIIShEgpA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -1841,10 +1464,46 @@
}
}
},
+ "node_modules/@radix-ui/react-popover": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.6.tgz",
+ "integrity": "sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.4",
+ "@radix-ui/react-focus-guards": "1.0.1",
+ "@radix-ui/react-focus-scope": "1.0.3",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-popper": "1.1.2",
+ "@radix-ui/react-portal": "1.0.3",
+ "@radix-ui/react-presence": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.5"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-popper": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz",
- "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@floating-ui/react-dom": "^2.0.0",
@@ -1875,8 +1534,7 @@
},
"node_modules/@radix-ui/react-portal": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz",
- "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-primitive": "1.0.3"
@@ -1898,8 +1556,7 @@
},
"node_modules/@radix-ui/react-presence": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz",
- "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-compose-refs": "1.0.1",
@@ -1922,8 +1579,7 @@
},
"node_modules/@radix-ui/react-primitive": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
- "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-slot": "1.0.2"
@@ -1945,8 +1601,7 @@
},
"node_modules/@radix-ui/react-progress": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.0.3.tgz",
- "integrity": "sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-context": "1.0.1",
@@ -1969,8 +1624,7 @@
},
"node_modules/@radix-ui/react-roving-focus": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz",
- "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -2000,8 +1654,7 @@
},
"node_modules/@radix-ui/react-separator": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz",
- "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-primitive": "1.0.3"
@@ -2023,8 +1676,7 @@
},
"node_modules/@radix-ui/react-slot": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
- "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-compose-refs": "1.0.1"
@@ -2041,8 +1693,7 @@
},
"node_modules/@radix-ui/react-switch": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.3.tgz",
- "integrity": "sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -2070,8 +1721,7 @@
},
"node_modules/@radix-ui/react-tabs": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz",
- "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -2100,8 +1750,7 @@
},
"node_modules/@radix-ui/react-tooltip": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.6.tgz",
- "integrity": "sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
@@ -2134,8 +1783,7 @@
},
"node_modules/@radix-ui/react-use-callback-ref": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
- "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -2151,8 +1799,7 @@
},
"node_modules/@radix-ui/react-use-controllable-state": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
- "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-use-callback-ref": "1.0.1"
@@ -2169,8 +1816,7 @@
},
"node_modules/@radix-ui/react-use-escape-keydown": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
- "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-use-callback-ref": "1.0.1"
@@ -2187,8 +1833,7 @@
},
"node_modules/@radix-ui/react-use-layout-effect": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
- "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -2204,8 +1849,7 @@
},
"node_modules/@radix-ui/react-use-previous": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz",
- "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
},
@@ -2221,8 +1865,7 @@
},
"node_modules/@radix-ui/react-use-rect": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz",
- "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/rect": "1.0.1"
@@ -2239,8 +1882,7 @@
},
"node_modules/@radix-ui/react-use-size": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz",
- "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-use-layout-effect": "1.0.1"
@@ -2257,8 +1899,7 @@
},
"node_modules/@radix-ui/react-visually-hidden": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
- "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/react-primitive": "1.0.3"
@@ -2280,16 +1921,14 @@
},
"node_modules/@radix-ui/rect": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz",
- "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.13.10"
}
},
"node_modules/@reactflow/background": {
"version": "11.1.7",
- "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.1.7.tgz",
- "integrity": "sha512-ur7MznpW9T/YgvnOekPU1SAYguxuoMk9CTspUXbgL6cVP+U7mv4CWvd0EatgtwK1jDCRQzpVqCs0o5e/pBAvpA==",
+ "license": "MIT",
"dependencies": {
"@reactflow/core": "11.5.4",
"classcat": "^5.0.3",
@@ -2302,8 +1941,7 @@
},
"node_modules/@reactflow/controls": {
"version": "11.1.7",
- "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.1.7.tgz",
- "integrity": "sha512-MM4Gq9vlAJ5eiPbLBmbAm/DMhpc5gIDdkI3OuvMwQ5CHg4sK3S8N1LpwiOCIjLodYUBdinFP4jZdYp452oNHgw==",
+ "license": "MIT",
"dependencies": {
"@reactflow/core": "11.5.4",
"classcat": "^5.0.3"
@@ -2315,8 +1953,7 @@
},
"node_modules/@reactflow/core": {
"version": "11.5.4",
- "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.5.4.tgz",
- "integrity": "sha512-nrYISMkCa7CdXV2VKqefAQ26hmQCjLfF/K6FBDr2DYM/YvuA7Us3DU1JnxlUB8PU2OmjBW9eU8HXGXSTYX7y8A==",
+ "license": "MIT",
"dependencies": {
"@types/d3": "^7.4.0",
"@types/d3-drag": "^3.0.1",
@@ -2335,8 +1972,7 @@
},
"node_modules/@reactflow/minimap": {
"version": "11.3.7",
- "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.3.7.tgz",
- "integrity": "sha512-WpwnjYGUuV6I1WJF5YavFudk+G+wJkRvW9OCmmwI+L9fvn/QD6Xe6YAZeuB7nvaMkl0zBYTLPuFJqPvKpYHypQ==",
+ "license": "MIT",
"dependencies": {
"@reactflow/core": "11.5.4",
"@types/d3-selection": "^3.0.3",
@@ -2353,8 +1989,7 @@
},
"node_modules/@reactflow/node-toolbar": {
"version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.1.7.tgz",
- "integrity": "sha512-RGpKDWCoZQmgDO9NYUiooIf9PjhZIeK6hsFc/2CpNr8mc6KNvZN3bWlUdB1tFzvH4NTGrj0JILozz10UQo6gIg==",
+ "license": "MIT",
"dependencies": {
"@reactflow/core": "11.5.4",
"classcat": "^5.0.3",
@@ -2367,16 +2002,14 @@
},
"node_modules/@remix-run/router": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.2.tgz",
- "integrity": "sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==",
+ "license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/@rollup/pluginutils": {
"version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
- "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
@@ -2396,9 +2029,8 @@
},
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
- "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -2408,8 +2040,7 @@
},
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz",
- "integrity": "sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2423,8 +2054,7 @@
},
"node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz",
- "integrity": "sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2438,8 +2068,7 @@
},
"node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz",
- "integrity": "sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2453,8 +2082,7 @@
},
"node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz",
- "integrity": "sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2468,8 +2096,7 @@
},
"node_modules/@svgr/babel-plugin-svg-dynamic-title": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz",
- "integrity": "sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2483,8 +2110,7 @@
},
"node_modules/@svgr/babel-plugin-svg-em-dimensions": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz",
- "integrity": "sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2498,8 +2124,7 @@
},
"node_modules/@svgr/babel-plugin-transform-react-native-svg": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz",
- "integrity": "sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ==",
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -2513,8 +2138,7 @@
},
"node_modules/@svgr/babel-plugin-transform-svg-component": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz",
- "integrity": "sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -2528,8 +2152,7 @@
},
"node_modules/@svgr/babel-preset": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-7.0.0.tgz",
- "integrity": "sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ==",
+ "license": "MIT",
"dependencies": {
"@svgr/babel-plugin-add-jsx-attribute": "^7.0.0",
"@svgr/babel-plugin-remove-jsx-attribute": "^7.0.0",
@@ -2553,8 +2176,7 @@
},
"node_modules/@svgr/core": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/core/-/core-7.0.0.tgz",
- "integrity": "sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw==",
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "^7.0.0",
@@ -2571,8 +2193,7 @@
},
"node_modules/@svgr/core/node_modules/cosmiconfig": {
"version": "8.2.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
- "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "license": "MIT",
"dependencies": {
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -2588,8 +2209,7 @@
},
"node_modules/@svgr/hast-util-to-babel-ast": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz",
- "integrity": "sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ==",
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.21.3",
"entities": "^4.4.0"
@@ -2604,8 +2224,7 @@
},
"node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
@@ -2615,8 +2234,7 @@
},
"node_modules/@svgr/plugin-jsx": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz",
- "integrity": "sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw==",
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "^7.0.0",
@@ -2633,9 +2251,8 @@
},
"node_modules/@swc/cli": {
"version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@mole-inc/bin-wrapper": "^8.0.1",
"commander": "^7.1.0",
@@ -2664,19 +2281,17 @@
},
"node_modules/@swc/cli/node_modules/commander": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/@swc/core": {
"version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
- "integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
"dev": true,
"hasInstallScript": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=10"
},
@@ -2707,12 +2322,11 @@
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
- "integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
@@ -2721,155 +2335,10 @@
"node": ">=10"
}
},
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
- "integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
- "integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
- "integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
- "integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
- "integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
- "integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
- "integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
- "integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.3.62",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
- "integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"defer-to-connect": "^2.0.0"
},
@@ -2879,8 +2348,7 @@
},
"node_modules/@tabler/icons": {
"version": "2.18.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-2.18.0.tgz",
- "integrity": "sha512-N7a20mwbhrFXNqvd8Rxa0Btwu1Li5rQbqdIi3mzt5HRjP25PbyYuTU2BXbu8yMEnUk018Gi13gpS/jlMgXFuOw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/codecalm"
@@ -2888,8 +2356,7 @@
},
"node_modules/@tabler/icons-react": {
"version": "2.18.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-2.18.0.tgz",
- "integrity": "sha512-F4HyBIoC3DvIPmjP9ienurvSWhQOajDuTc3C5F7UfjhBkom3cAuJfDWH2tqGAfNrhjvG4X3ERR2dxOWLpegsiA==",
+ "license": "MIT",
"dependencies": {
"@tabler/icons": "2.18.0",
"prop-types": "^15.7.2"
@@ -2904,8 +2371,7 @@
},
"node_modules/@tailwindcss/forms": {
"version": "0.5.3",
- "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
- "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+ "license": "MIT",
"dependencies": {
"mini-svg-data-uri": "^1.2.3"
},
@@ -2915,17 +2381,15 @@
},
"node_modules/@tailwindcss/line-clamp": {
"version": "0.4.4",
- "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz",
- "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==",
+ "license": "MIT",
"peerDependencies": {
"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
}
},
"node_modules/@tailwindcss/typography": {
"version": "0.5.9",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
- "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash.castarray": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
@@ -2938,9 +2402,8 @@
},
"node_modules/@testing-library/dom": {
"version": "8.20.1",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz",
- "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -2957,9 +2420,8 @@
},
"node_modules/@testing-library/dom/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -2972,18 +2434,16 @@
},
"node_modules/@testing-library/dom/node_modules/aria-query": {
"version": "5.1.3",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
- "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"deep-equal": "^2.0.5"
}
},
"node_modules/@testing-library/dom/node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -2997,9 +2457,8 @@
},
"node_modules/@testing-library/dom/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -3009,24 +2468,21 @@
},
"node_modules/@testing-library/dom/node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@testing-library/dom/node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@testing-library/dom/node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3036,9 +2492,8 @@
},
"node_modules/@testing-library/jest-dom": {
"version": "5.16.5",
- "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
- "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@adobe/css-tools": "^4.0.1",
"@babel/runtime": "^7.9.2",
@@ -3058,9 +2513,8 @@
},
"node_modules/@testing-library/jest-dom/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -3073,9 +2527,8 @@
},
"node_modules/@testing-library/jest-dom/node_modules/chalk": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -3086,9 +2539,8 @@
},
"node_modules/@testing-library/jest-dom/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -3098,24 +2550,21 @@
},
"node_modules/@testing-library/jest-dom/node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@testing-library/jest-dom/node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@testing-library/jest-dom/node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3125,9 +2574,8 @@
},
"node_modules/@testing-library/react": {
"version": "13.4.0",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz",
- "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5",
"@testing-library/dom": "^8.5.0",
@@ -3143,9 +2591,8 @@
},
"node_modules/@testing-library/user-event": {
"version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz",
- "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5"
},
@@ -3159,22 +2606,19 @@
},
"node_modules/@tokenizer/token": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@tootallnate/once": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/@ts-morph/common": {
"version": "0.19.0",
- "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz",
- "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==",
+ "license": "MIT",
"dependencies": {
"fast-glob": "^3.2.12",
"minimatch": "^7.4.3",
@@ -3184,16 +2628,14 @@
},
"node_modules/@ts-morph/common/node_modules/brace-expansion": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@ts-morph/common/node_modules/minimatch": {
"version": "7.4.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
- "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -3206,15 +2648,22 @@
},
"node_modules/@types/aria-query": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz",
- "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/axios": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
+ "integrity": "sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==",
+ "deprecated": "This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed!",
+ "dependencies": {
+ "axios": "*"
+ }
},
"node_modules/@types/cacheable-request": {
"version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
- "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/http-cache-semantics": "*",
"@types/keyv": "^3.1.4",
@@ -3224,13 +2673,11 @@
},
"node_modules/@types/cookie": {
"version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz",
- "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
+ "license": "MIT"
},
"node_modules/@types/d3": {
"version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz",
- "integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-array": "*",
"@types/d3-axis": "*",
@@ -3266,39 +2713,33 @@
},
"node_modules/@types/d3-array": {
"version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz",
- "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A=="
+ "license": "MIT"
},
"node_modules/@types/d3-axis": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz",
- "integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-brush": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz",
- "integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-chord": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz",
- "integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw=="
+ "license": "MIT"
},
"node_modules/@types/d3-color": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz",
- "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA=="
+ "license": "MIT"
},
"node_modules/@types/d3-contour": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz",
- "integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==",
+ "license": "MIT",
"dependencies": {
"@types/d3-array": "*",
"@types/geojson": "*"
@@ -3306,144 +2747,120 @@
},
"node_modules/@types/d3-delaunay": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
- "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ=="
+ "license": "MIT"
},
"node_modules/@types/d3-dispatch": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz",
- "integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg=="
+ "license": "MIT"
},
"node_modules/@types/d3-drag": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz",
- "integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==",
+ "license": "MIT",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-dsv": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz",
- "integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw=="
+ "license": "MIT"
},
"node_modules/@types/d3-ease": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
- "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA=="
+ "license": "MIT"
},
"node_modules/@types/d3-fetch": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz",
- "integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-dsv": "*"
}
},
"node_modules/@types/d3-force": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz",
- "integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw=="
+ "license": "MIT"
},
"node_modules/@types/d3-format": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
- "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg=="
+ "license": "MIT"
},
"node_modules/@types/d3-geo": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz",
- "integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==",
+ "license": "MIT",
"dependencies": {
"@types/geojson": "*"
}
},
"node_modules/@types/d3-hierarchy": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
- "integrity": "sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A=="
+ "license": "MIT"
},
"node_modules/@types/d3-interpolate": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
- "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==",
+ "license": "MIT",
"dependencies": {
"@types/d3-color": "*"
}
},
"node_modules/@types/d3-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz",
- "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg=="
+ "license": "MIT"
},
"node_modules/@types/d3-polygon": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz",
- "integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw=="
+ "license": "MIT"
},
"node_modules/@types/d3-quadtree": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz",
- "integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw=="
+ "license": "MIT"
},
"node_modules/@types/d3-random": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz",
- "integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ=="
+ "license": "MIT"
},
"node_modules/@types/d3-scale": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
- "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
+ "license": "MIT",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-scale-chromatic": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
- "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw=="
+ "license": "MIT"
},
"node_modules/@types/d3-selection": {
"version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.5.tgz",
- "integrity": "sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w=="
+ "license": "MIT"
},
"node_modules/@types/d3-shape": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz",
- "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==",
+ "license": "MIT",
"dependencies": {
"@types/d3-path": "*"
}
},
"node_modules/@types/d3-time": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
- "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
+ "license": "MIT"
},
"node_modules/@types/d3-time-format": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz",
- "integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw=="
+ "license": "MIT"
},
"node_modules/@types/d3-timer": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz",
- "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g=="
+ "license": "MIT"
},
"node_modules/@types/d3-transition": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz",
- "integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-zoom": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.3.tgz",
- "integrity": "sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==",
+ "license": "MIT",
"dependencies": {
"@types/d3-interpolate": "*",
"@types/d3-selection": "*"
@@ -3451,34 +2868,29 @@
},
"node_modules/@types/debug": {
"version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
- "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
+ "license": "MIT",
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
+ "license": "MIT"
},
"node_modules/@types/geojson": {
"version": "7946.0.10",
- "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
- "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
+ "license": "MIT"
},
"node_modules/@types/hast": {
"version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
},
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
- "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "license": "MIT",
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
@@ -3486,15 +2898,13 @@
},
"node_modules/@types/http-cache-semantics": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/jest": {
"version": "27.5.2",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz",
- "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"jest-matcher-utils": "^27.0.0",
"pretty-format": "^27.0.0"
@@ -3502,62 +2912,52 @@
},
"node_modules/@types/katex": {
"version": "0.16.0",
- "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.0.tgz",
- "integrity": "sha512-hz+S3nV6Mym5xPbT9fnO8dDhBFQguMYpY0Ipxv06JMi1ORgnEM4M1ymWDUhUNer3ElLmT583opRo4RzxKmh9jw=="
+ "license": "MIT"
},
"node_modules/@types/keyv": {
"version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
- "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/lodash": {
"version": "4.14.194",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz",
- "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/mathjax": {
"version": "0.0.37",
- "resolved": "https://registry.npmjs.org/@types/mathjax/-/mathjax-0.0.37.tgz",
- "integrity": "sha512-y0WSZBtBNQwcYipTU/BhgeFu1EZNlFvUNCmkMXV9kBQZq7/o5z82dNVyH3yy2Xv5zzeNeQoHSL4Xm06+EQiH+g=="
+ "license": "MIT"
},
"node_modules/@types/mdast": {
"version": "3.0.11",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
- "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "*"
}
},
"node_modules/@types/ms": {
"version": "0.7.31",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
- "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
+ "license": "MIT"
},
"node_modules/@types/node": {
"version": "16.18.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz",
- "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==",
- "devOptional": true
+ "devOptional": true,
+ "license": "MIT"
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ "license": "MIT"
},
"node_modules/@types/prop-types": {
"version": "15.7.5",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
- "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ "license": "MIT"
},
"node_modules/@types/react": {
"version": "18.2.6",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz",
- "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==",
+ "license": "MIT",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -3566,73 +2966,63 @@
},
"node_modules/@types/react-dom": {
"version": "18.2.4",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz",
- "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==",
"devOptional": true,
+ "license": "MIT",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-is": {
"version": "18.2.1",
- "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz",
- "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==",
+ "license": "MIT",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-transition-group": {
"version": "4.4.6",
- "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz",
- "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==",
+ "license": "MIT",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/responselike": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/scheduler": {
"version": "0.16.3",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
- "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ "license": "MIT"
},
"node_modules/@types/testing-library__jest-dom": {
"version": "5.14.6",
- "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.6.tgz",
- "integrity": "sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/jest": "*"
}
},
"node_modules/@types/unist": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
+ "license": "MIT"
},
"node_modules/@types/uuid": {
"version": "9.0.1",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/web": {
"version": "0.0.46",
- "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.46.tgz",
- "integrity": "sha512-ki0OmbjSdAEfvmy5AYWFpMkRsPW+6h4ibQ4tzk8SJsS9dkrrD3B/U1eVvdNNWxAzntjq6o2sjSia6UBCoPH+Yg=="
+ "license": "MIT"
},
"node_modules/@vitejs/plugin-react-swc": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.1.tgz",
- "integrity": "sha512-ZoYjGxMniXP7X+5ry/W1tpY7w0OeLUEsBF5RHFPmAhpgwwNWie8OF4056MRXRi9QgvYYoZPDzdOXGK3wlCoTfQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@swc/core": "^1.3.56"
},
@@ -3642,23 +3032,19 @@
},
"node_modules/abab": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
+ "license": "BSD-3-Clause"
},
"node_modules/accordion": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/accordion/-/accordion-3.0.2.tgz",
- "integrity": "sha512-jbQfFaw+57OBwPt7qSNHuW+RA8smmRwkWRS1Ozh6K/QxUspBgBV/LpdSzlY7vee8TomS6j3D33B9rIeH1qMwsA=="
+ "version": "v3.0.2",
+ "license": "ISC"
},
"node_modules/ace-builds": {
"version": "1.16.0",
- "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.16.0.tgz",
- "integrity": "sha512-EriMhoxdfhh0zKm7icSt8EXekODAOVsYh9fpnlru9ALwf0Iw7J7bpuqLjhi3QRxvVKR7P0teQdJwTvjVMcYHuw=="
+ "license": "BSD-3-Clause"
},
"node_modules/acorn": {
"version": "8.9.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
- "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -3668,8 +3054,7 @@
},
"node_modules/acorn-globals": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "license": "MIT",
"dependencies": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
@@ -3677,8 +3062,7 @@
},
"node_modules/acorn-globals/node_modules/acorn": {
"version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -3688,21 +3072,18 @@
},
"node_modules/acorn-walk": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/add": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz",
- "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="
+ "license": "MIT"
},
"node_modules/agent-base": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
"dependencies": {
"debug": "4"
},
@@ -3712,8 +3093,7 @@
},
"node_modules/ajv": {
"version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -3727,16 +3107,14 @@
},
"node_modules/ansi-regex": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -3746,8 +3124,7 @@
},
"node_modules/ansi-to-html": {
"version": "0.7.2",
- "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz",
- "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==",
+ "license": "MIT",
"dependencies": {
"entities": "^2.2.0"
},
@@ -3760,13 +3137,11 @@
},
"node_modules/any-promise": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ "license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3777,8 +3152,6 @@
},
"node_modules/arch": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
"dev": true,
"funding": [
{
@@ -3793,22 +3166,20 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/arg": {
"version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ "license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "license": "Python-2.0"
},
"node_modules/aria-hidden": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz",
- "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==",
+ "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -3818,18 +3189,16 @@
},
"node_modules/aria-query": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"dequal": "^2.0.3"
}
},
"node_modules/array-buffer-byte-length": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"is-array-buffer": "^3.0.1"
@@ -3840,21 +3209,17 @@
},
"node_modules/astral-regex": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ "license": "MIT"
},
"node_modules/autoprefixer": {
"version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
"dev": true,
"funding": [
{
@@ -3866,6 +3231,7 @@
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
],
+ "license": "MIT",
"dependencies": {
"browserslist": "^4.21.5",
"caniuse-lite": "^1.0.30001464",
@@ -3886,9 +3252,8 @@
},
"node_modules/available-typed-arrays": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -3898,8 +3263,7 @@
},
"node_modules/axios": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.2.tgz",
- "integrity": "sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==",
+ "license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -3908,8 +3272,7 @@
},
"node_modules/babel-plugin-macros": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5",
"cosmiconfig": "^7.0.0",
@@ -3922,8 +3285,7 @@
},
"node_modules/bail": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -3931,13 +3293,10 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ "license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -3951,13 +3310,13 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/bin-check": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
- "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"execa": "^0.7.0",
"executable": "^4.1.0"
@@ -3968,9 +3327,8 @@
},
"node_modules/bin-check/node_modules/cross-spawn": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
@@ -3979,9 +3337,8 @@
},
"node_modules/bin-check/node_modules/execa": {
"version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -3997,27 +3354,24 @@
},
"node_modules/bin-check/node_modules/get-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-check/node_modules/is-stream": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/bin-check/node_modules/lru-cache": {
"version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
@@ -4025,9 +3379,8 @@
},
"node_modules/bin-check/node_modules/npm-run-path": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^2.0.0"
},
@@ -4037,18 +3390,16 @@
},
"node_modules/bin-check/node_modules/path-key": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-check/node_modules/shebang-command": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^1.0.0"
},
@@ -4058,18 +3409,16 @@
},
"node_modules/bin-check/node_modules/shebang-regex": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/bin-check/node_modules/which": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -4079,15 +3428,13 @@
},
"node_modules/bin-check/node_modules/yallist": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/bin-version": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz",
- "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"execa": "^5.0.0",
"find-versions": "^5.0.0"
@@ -4101,9 +3448,8 @@
},
"node_modules/bin-version-check": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz",
- "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bin-version": "^6.0.0",
"semver": "^7.5.3",
@@ -4118,9 +3464,8 @@
},
"node_modules/bin-version/node_modules/execa": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
@@ -4141,18 +3486,16 @@
},
"node_modules/bin-version/node_modules/human-signals": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=10.17.0"
}
},
"node_modules/bin-version/node_modules/is-stream": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -4162,18 +3505,16 @@
},
"node_modules/bin-version/node_modules/mimic-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/bin-version/node_modules/npm-run-path": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
},
@@ -4183,9 +3524,8 @@
},
"node_modules/bin-version/node_modules/onetime": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -4198,25 +3538,22 @@
},
"node_modules/bin-version/node_modules/strip-final-newline": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/bl": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
- "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+ "license": "MIT",
"dependencies": {
"buffer": "^6.0.3",
"inherits": "^2.0.4",
@@ -4225,8 +3562,7 @@
},
"node_modules/brace-expansion": {
"version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -4234,8 +3570,7 @@
},
"node_modules/braces": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "license": "MIT",
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -4245,13 +3580,10 @@
},
"node_modules/browser-process-hrtime": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
+ "license": "BSD-2-Clause"
},
"node_modules/browserslist": {
"version": "4.21.9",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
- "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
"funding": [
{
"type": "opencollective",
@@ -4266,6 +3598,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001503",
"electron-to-chromium": "^1.4.431",
@@ -4281,8 +3614,6 @@
},
"node_modules/buffer": {
"version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"funding": [
{
"type": "github",
@@ -4297,6 +3628,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
@@ -4304,18 +3636,16 @@
},
"node_modules/cacheable-lookup": {
"version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.6.0"
}
},
"node_modules/cacheable-request": {
"version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
- "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
@@ -4331,9 +3661,8 @@
},
"node_modules/cacheable-request/node_modules/get-stream": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pump": "^3.0.0"
},
@@ -4346,9 +3675,8 @@
},
"node_modules/call-bind": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@@ -4359,16 +3687,14 @@
},
"node_modules/callsites": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -4378,16 +3704,13 @@
},
"node_modules/camelcase-css": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001513",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001513.tgz",
- "integrity": "sha512-pnjGJo7SOOjAGytZZ203Em95MRM8Cr6jhCXNF/FAXTpCTRTECnqQWLpiTRqrFtdYcth8hf4WECUpkezuYsMVww==",
"funding": [
{
"type": "opencollective",
@@ -4401,12 +3724,12 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/ccount": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4414,8 +3737,7 @@
},
"node_modules/chalk": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -4427,8 +3749,7 @@
},
"node_modules/character-entities": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4436,8 +3757,7 @@
},
"node_modules/character-entities-legacy": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4445,8 +3765,7 @@
},
"node_modules/character-reference-invalid": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4454,14 +3773,13 @@
},
"node_modules/chokidar": {
"version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -4480,8 +3798,6 @@
},
"node_modules/class-variance-authority": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.0.tgz",
- "integrity": "sha512-qdRDgfjx3GRb9fpwpSvn+YaidnT7IUJNe4wt5/SWwM+PmUwJUhQRk/8zAyNro0PmVfmen2635UboTjIBXXxy5A==",
"dependencies": {
"clsx": "1.2.1"
},
@@ -4499,18 +3815,15 @@
},
"node_modules/classcat": {
"version": "5.0.4",
- "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz",
- "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g=="
+ "license": "MIT"
},
"node_modules/classnames": {
"version": "2.3.2",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
- "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
+ "license": "MIT"
},
"node_modules/cli-cursor": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
- "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "license": "MIT",
"dependencies": {
"restore-cursor": "^4.0.0"
},
@@ -4523,8 +3836,7 @@
},
"node_modules/cli-spinners": {
"version": "2.9.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz",
- "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==",
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -4534,22 +3846,19 @@
},
"node_modules/client-only": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ "license": "MIT"
},
"node_modules/clone": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/clone-response": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
- "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-response": "^1.0.0"
},
@@ -4559,40 +3868,34 @@
},
"node_modules/clsx": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/code-block-writer": {
"version": "12.0.0",
- "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
- "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w=="
+ "license": "MIT"
},
"node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ "license": "MIT"
},
"node_modules/colord": {
"version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/combined-stream": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -4602,8 +3905,7 @@
},
"node_modules/comma-separated-tokens": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
- "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4611,22 +3913,19 @@
},
"node_modules/commander": {
"version": "9.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
- "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || >=14"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ "license": "MIT"
},
"node_modules/content-disposition": {
"version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
},
@@ -4636,21 +3935,18 @@
},
"node_modules/convert-source-map": {
"version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ "license": "MIT"
},
"node_modules/cookie": {
"version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cosmiconfig": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "license": "MIT",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
@@ -4664,8 +3960,7 @@
},
"node_modules/cross-spawn": {
"version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -4677,9 +3972,8 @@
},
"node_modules/css-selector-tokenizer": {
"version": "0.8.0",
- "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
- "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"fastparse": "^1.1.2"
@@ -4687,14 +3981,12 @@
},
"node_modules/css.escape": {
"version": "1.5.1",
- "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
- "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cssesc": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -4704,13 +3996,11 @@
},
"node_modules/cssom": {
"version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
+ "license": "MIT"
},
"node_modules/cssstyle": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "license": "MIT",
"dependencies": {
"cssom": "~0.3.6"
},
@@ -4720,34 +4010,29 @@
},
"node_modules/cssstyle/node_modules/cssom": {
"version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ "license": "MIT"
},
"node_modules/csstype": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
- "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
+ "license": "MIT"
},
"node_modules/d3-color": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
- "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-dispatch": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
- "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-drag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
- "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
"d3-selection": "3"
@@ -4758,16 +4043,14 @@
},
"node_modules/d3-ease": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
- "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-interpolate": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
- "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
"dependencies": {
"d3-color": "1 - 3"
},
@@ -4777,24 +4060,21 @@
},
"node_modules/d3-selection": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
- "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-timer": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
- "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-transition": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
- "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "license": "ISC",
"dependencies": {
"d3-color": "1 - 3",
"d3-dispatch": "1 - 3",
@@ -4811,8 +4091,7 @@
},
"node_modules/d3-zoom": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
- "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
"d3-drag": "2 - 3",
@@ -4826,9 +4105,8 @@
},
"node_modules/daisyui": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.1.1.tgz",
- "integrity": "sha512-+SPwlCvbk/dQd40Op3jv+C8s5pL/Ix4z/U+Q8KDKnF7oXNmvDYZlZ9e2RkouoevaW/Jta4e/iLTj5ve2WBoSkw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"colord": "^2.9",
"css-selector-tokenizer": "^0.8",
@@ -4848,16 +4126,14 @@
},
"node_modules/data-uri-to-buffer": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
- "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/data-urls": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
- "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "license": "MIT",
"dependencies": {
"abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
@@ -4869,8 +4145,7 @@
},
"node_modules/data-urls/node_modules/whatwg-url": {
"version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "license": "MIT",
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
@@ -4881,8 +4156,7 @@
},
"node_modules/debug": {
"version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
@@ -4897,13 +4171,11 @@
},
"node_modules/decimal.js": {
"version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ "license": "MIT"
},
"node_modules/decode-named-character-reference": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
- "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "license": "MIT",
"dependencies": {
"character-entities": "^2.0.0"
},
@@ -4914,9 +4186,8 @@
},
"node_modules/decompress-response": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-response": "^3.1.0"
},
@@ -4929,9 +4200,8 @@
},
"node_modules/decompress-response/node_modules/mimic-response": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -4941,9 +4211,8 @@
},
"node_modules/deep-equal": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz",
- "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
"call-bind": "^1.0.2",
@@ -4970,13 +4239,11 @@
},
"node_modules/deep-is": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ "license": "MIT"
},
"node_modules/defaults": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
- "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+ "license": "MIT",
"dependencies": {
"clone": "^1.0.2"
},
@@ -4986,18 +4253,16 @@
},
"node_modules/defer-to-connect": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/define-properties": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
@@ -5011,67 +4276,57 @@
},
"node_modules/delayed-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/dequal": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/detect-node-es": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+ "license": "MIT"
},
"node_modules/didyoumean": {
"version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ "license": "Apache-2.0"
},
"node_modules/diff": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/diff-match-patch": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
- "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
+ "license": "Apache-2.0"
},
"node_modules/diff-sequences": {
"version": "27.5.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz",
- "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/dlv": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ "license": "MIT"
},
"node_modules/dom-accessibility-api": {
"version": "0.5.16",
- "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
- "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/dom-helpers": {
"version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
@@ -5079,8 +4334,7 @@
},
"node_modules/domexception": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
- "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "license": "MIT",
"dependencies": {
"webidl-conversions": "^7.0.0"
},
@@ -5090,49 +4344,42 @@
},
"node_modules/dompurify": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.4.tgz",
- "integrity": "sha512-ae0mA+Qiqp6C29pqZX3fQgK+F91+F7wobM/v8DRzDqJdZJELXiFUx4PP4pK/mzUS0xkiSEx3Ncd9gr69jg3YsQ=="
+ "license": "(MPL-2.0 OR Apache-2.0)"
},
"node_modules/electron-to-chromium": {
- "version": "1.4.440",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz",
- "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw=="
+ "version": "1.4.457",
+ "license": "ISC"
},
"node_modules/emoji-regex": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "license": "MIT"
},
"node_modules/end-of-stream": {
"version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/entities": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "license": "BSD-2-Clause",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/error-ex": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/es-get-iterator": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
- "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
@@ -5150,9 +4397,8 @@
},
"node_modules/esbuild": {
"version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
"hasInstallScript": true,
+ "license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
@@ -5186,24 +4432,21 @@
},
"node_modules/escalade": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/escodegen": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "license": "BSD-2-Clause",
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
@@ -5223,8 +4466,7 @@
},
"node_modules/escodegen/node_modules/source-map": {
"version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
@@ -5232,16 +4474,14 @@
},
"node_modules/esm": {
"version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/esprima": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -5252,29 +4492,25 @@
},
"node_modules/estraverse": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "license": "MIT"
},
"node_modules/esutils": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/execa": {
"version": "7.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
- "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.1",
@@ -5295,9 +4531,8 @@
},
"node_modules/executable": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pify": "^2.2.0"
},
@@ -5307,9 +4542,8 @@
},
"node_modules/ext-list": {
"version": "2.2.2",
- "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
- "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mime-db": "^1.28.0"
},
@@ -5319,9 +4553,8 @@
},
"node_modules/ext-name": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
- "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ext-list": "^2.0.0",
"sort-keys-length": "^1.0.0"
@@ -5332,18 +4565,15 @@
},
"node_modules/extend": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "license": "MIT"
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -5357,27 +4587,23 @@
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ "license": "MIT"
},
"node_modules/fastparse": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
- "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fastq": {
"version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
"node_modules/fault": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
- "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+ "license": "MIT",
"dependencies": {
"format": "^0.2.0"
},
@@ -5388,8 +4614,6 @@
},
"node_modules/fetch-blob": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
- "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
"funding": [
{
"type": "github",
@@ -5400,6 +4624,7 @@
"url": "https://paypal.me/jimmywarting"
}
],
+ "license": "MIT",
"dependencies": {
"node-domexception": "^1.0.0",
"web-streams-polyfill": "^3.0.3"
@@ -5410,9 +4635,8 @@
},
"node_modules/file-type": {
"version": "17.1.6",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz",
- "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-web-to-node-stream": "^3.0.2",
"strtok3": "^7.0.0-alpha.9",
@@ -5427,9 +4651,8 @@
},
"node_modules/filename-reserved-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
- "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -5439,9 +4662,8 @@
},
"node_modules/filenamify": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
- "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"filename-reserved-regex": "^3.0.0",
"strip-outer": "^2.0.0",
@@ -5456,8 +4678,7 @@
},
"node_modules/fill-range": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -5467,14 +4688,12 @@
},
"node_modules/find-root": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ "license": "MIT"
},
"node_modules/find-versions": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz",
- "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"semver-regex": "^4.0.5"
},
@@ -5487,14 +4706,13 @@
},
"node_modules/follow-redirects": {
"version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
+ "license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -5506,17 +4724,15 @@
},
"node_modules/for-each": {
"version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-callable": "^1.1.3"
}
},
"node_modules/form-data": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -5528,16 +4744,13 @@
},
"node_modules/format": {
"version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
"engines": {
"node": ">=0.4.x"
}
},
"node_modules/formdata-polyfill": {
"version": "4.0.10",
- "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
- "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
"dependencies": {
"fetch-blob": "^3.1.2"
},
@@ -5547,9 +4760,8 @@
},
"node_modules/fraction.js": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
- "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
},
@@ -5560,8 +4772,7 @@
},
"node_modules/fs-extra": {
"version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -5573,22 +4784,18 @@
},
"node_modules/fs-extra/node_modules/universalify": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ "license": "ISC"
},
"node_modules/fsevents": {
"version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -5599,31 +4806,27 @@
},
"node_modules/function-bind": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "license": "MIT"
},
"node_modules/functions-have-names": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-intrinsic": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -5636,16 +4839,14 @@
},
"node_modules/get-nonce": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
- "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/get-stream": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -5655,8 +4856,7 @@
},
"node_modules/glob": {
"version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -5674,8 +4874,7 @@
},
"node_modules/glob-parent": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -5685,17 +4884,15 @@
},
"node_modules/globals": {
"version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/gopd": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -5705,9 +4902,8 @@
},
"node_modules/got": {
"version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@sindresorhus/is": "^4.0.0",
"@szmarczak/http-timer": "^4.0.5",
@@ -5730,13 +4926,11 @@
},
"node_modules/graceful-fs": {
"version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ "license": "ISC"
},
"node_modules/has": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1"
},
@@ -5746,26 +4940,23 @@
},
"node_modules/has-bigints": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.1"
},
@@ -5775,9 +4966,8 @@
},
"node_modules/has-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -5787,9 +4977,8 @@
},
"node_modules/has-symbols": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -5799,9 +4988,8 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -5814,8 +5002,7 @@
},
"node_modules/hast-util-from-dom": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-4.2.0.tgz",
- "integrity": "sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==",
+ "license": "ISC",
"dependencies": {
"hastscript": "^7.0.0",
"web-namespaces": "^2.0.0"
@@ -5827,8 +5014,7 @@
},
"node_modules/hast-util-from-dom/node_modules/hast-util-parse-selector": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz",
- "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0"
},
@@ -5839,8 +5025,7 @@
},
"node_modules/hast-util-from-dom/node_modules/hastscript": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz",
- "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"comma-separated-tokens": "^2.0.0",
@@ -5855,8 +5040,7 @@
},
"node_modules/hast-util-is-element": {
"version": "2.1.3",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz",
- "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/unist": "^2.0.0"
@@ -5868,8 +5052,7 @@
},
"node_modules/hast-util-parse-selector": {
"version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
@@ -5877,8 +5060,7 @@
},
"node_modules/hast-util-to-text": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz",
- "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/unist": "^2.0.0",
@@ -5892,8 +5074,7 @@
},
"node_modules/hast-util-whitespace": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
- "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
@@ -5901,8 +5082,7 @@
},
"node_modules/hastscript": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"comma-separated-tokens": "^1.0.0",
@@ -5917,8 +5097,7 @@
},
"node_modules/hastscript/node_modules/comma-separated-tokens": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -5926,8 +5105,7 @@
},
"node_modules/hastscript/node_modules/property-information": {
"version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
"dependencies": {
"xtend": "^4.0.0"
},
@@ -5938,8 +5116,7 @@
},
"node_modules/hastscript/node_modules/space-separated-tokens": {
"version": "1.1.5",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
- "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -5947,29 +5124,25 @@
},
"node_modules/highlight.js": {
"version": "10.7.3",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
- "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/hoist-non-react-statics/node_modules/react-is": {
"version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ "license": "MIT"
},
"node_modules/html-encoding-sniffer": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "license": "MIT",
"dependencies": {
"whatwg-encoding": "^2.0.0"
},
@@ -5979,14 +5152,12 @@
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
+ "dev": true,
+ "license": "BSD-2-Clause"
},
"node_modules/http-proxy-agent": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "license": "MIT",
"dependencies": {
"@tootallnate/once": "2",
"agent-base": "6",
@@ -5998,9 +5169,8 @@
},
"node_modules/http2-wrapper": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"quick-lru": "^5.1.1",
"resolve-alpn": "^1.0.0"
@@ -6011,8 +5181,7 @@
},
"node_modules/https-proxy-agent": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
"dependencies": {
"agent-base": "6",
"debug": "4"
@@ -6023,16 +5192,14 @@
},
"node_modules/human-signals": {
"version": "4.3.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
- "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=14.18.0"
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -6042,188 +5209,6 @@
},
"node_modules/ieee754": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/inline-style-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
- "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
- },
- "node_modules/internal-slot": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
- "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
- "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
"funding": [
{
"type": "github",
@@ -6238,15 +5223,179 @@
"url": "https://feross.org/support"
}
],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "license": "ISC"
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "license": "MIT"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "license": "MIT"
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/is-callable": {
"version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -6256,8 +5405,7 @@
},
"node_modules/is-core-module": {
"version": "2.12.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "license": "MIT",
"dependencies": {
"has": "^1.0.3"
},
@@ -6267,9 +5415,8 @@
},
"node_modules/is-date-object": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6282,8 +5429,7 @@
},
"node_modules/is-decimal": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -6291,24 +5437,21 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -6318,8 +5461,7 @@
},
"node_modules/is-hexadecimal": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -6327,8 +5469,7 @@
},
"node_modules/is-interactive": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
- "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -6338,26 +5479,23 @@
},
"node_modules/is-map": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-number": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-number-object": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6370,23 +5508,20 @@
},
"node_modules/is-plain-obj": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ "license": "MIT"
},
"node_modules/is-regex": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -6400,18 +5535,16 @@
},
"node_modules/is-set": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -6421,8 +5554,7 @@
},
"node_modules/is-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -6432,9 +5564,8 @@
},
"node_modules/is-string": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6447,9 +5578,8 @@
},
"node_modules/is-symbol": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -6462,9 +5592,8 @@
},
"node_modules/is-typed-array": {
"version": "1.1.10",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
- "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -6481,8 +5610,7 @@
},
"node_modules/is-unicode-supported": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
- "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -6492,18 +5620,16 @@
},
"node_modules/is-weakmap": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakset": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
@@ -6514,20 +5640,17 @@
},
"node_modules/isarray": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ "license": "ISC"
},
"node_modules/jest-diff": {
"version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz",
- "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^27.5.1",
@@ -6540,9 +5663,8 @@
},
"node_modules/jest-diff/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -6555,9 +5677,8 @@
},
"node_modules/jest-diff/node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -6571,9 +5692,8 @@
},
"node_modules/jest-diff/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -6583,24 +5703,21 @@
},
"node_modules/jest-diff/node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/jest-diff/node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/jest-diff/node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -6610,18 +5727,16 @@
},
"node_modules/jest-get-type": {
"version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz",
- "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-matcher-utils": {
"version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz",
- "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^27.5.1",
@@ -6634,9 +5749,8 @@
},
"node_modules/jest-matcher-utils/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -6649,9 +5763,8 @@
},
"node_modules/jest-matcher-utils/node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -6665,9 +5778,8 @@
},
"node_modules/jest-matcher-utils/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -6677,24 +5789,21 @@
},
"node_modules/jest-matcher-utils/node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/jest-matcher-utils/node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/jest-matcher-utils/node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -6704,21 +5813,18 @@
},
"node_modules/jiti": {
"version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
+ "license": "MIT",
"bin": {
"jiti": "bin/jiti.js"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "license": "MIT"
},
"node_modules/js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -6728,8 +5834,7 @@
},
"node_modules/jsdom": {
"version": "18.1.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.1.1.tgz",
- "integrity": "sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw==",
+ "license": "MIT",
"dependencies": {
"abab": "^2.0.5",
"acorn": "^8.5.0",
@@ -6773,8 +5878,7 @@
},
"node_modules/jsesc": {
"version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -6784,24 +5888,20 @@
},
"node_modules/json-buffer": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ "license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ "license": "MIT"
},
"node_modules/json5": {
"version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
@@ -6811,8 +5911,7 @@
},
"node_modules/jsonfile": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
@@ -6822,20 +5921,18 @@
},
"node_modules/jsonfile/node_modules/universalify": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/katex": {
"version": "0.16.8",
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.8.tgz",
- "integrity": "sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==",
"funding": [
"https://opencollective.com/katex",
"https://github.com/sponsors/katex"
],
+ "license": "MIT",
"dependencies": {
"commander": "^8.3.0"
},
@@ -6845,33 +5942,29 @@
},
"node_modules/katex/node_modules/commander": {
"version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/keyv": {
"version": "4.5.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
- "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
},
"node_modules/kleur": {
"version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/levn": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
@@ -6882,59 +5975,49 @@
},
"node_modules/lilconfig": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ "license": "MIT"
},
"node_modules/lodash": {
"version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "license": "MIT"
},
"node_modules/lodash.castarray": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
- "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.get": {
"version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ "license": "MIT"
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+ "license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.truncate": {
"version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw=="
+ "license": "MIT"
},
"node_modules/log-symbols": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
- "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+ "license": "MIT",
"dependencies": {
"chalk": "^5.0.0",
"is-unicode-supported": "^1.1.0"
@@ -6948,8 +6031,7 @@
},
"node_modules/log-symbols/node_modules/chalk": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
@@ -6959,8 +6041,7 @@
},
"node_modules/longest-streak": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -6968,8 +6049,7 @@
},
"node_modules/loose-envify": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
@@ -6979,17 +6059,15 @@
},
"node_modules/lowercase-keys": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/lowlight": {
"version": "1.20.0",
- "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
- "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
+ "license": "MIT",
"dependencies": {
"fault": "^1.0.0",
"highlight.js": "~10.7.0"
@@ -7001,33 +6079,29 @@
},
"node_modules/lru-cache": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/lucide-react": {
"version": "0.233.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.233.0.tgz",
- "integrity": "sha512-r0jMHF0vPDq2wBbZ0B3rtIcBjDyWDKpHu+vAjD2OHn2WLUr3HN5IHovtO0EMgQXuSI7YrMZbjsEZWC2uBHr8nQ==",
+ "license": "ISC",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/lz-string": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
- "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"dev": true,
+ "license": "MIT",
"bin": {
"lz-string": "bin/bin.js"
}
},
"node_modules/markdown-table": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
- "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -7035,8 +6109,7 @@
},
"node_modules/mathjax-full": {
"version": "3.2.2",
- "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
- "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==",
+ "license": "Apache-2.0",
"dependencies": {
"esm": "^3.2.25",
"mhchemparser": "^4.1.0",
@@ -7046,8 +6119,7 @@
},
"node_modules/mdast-util-definitions": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
- "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0",
@@ -7060,8 +6132,7 @@
},
"node_modules/mdast-util-find-and-replace": {
"version": "2.2.2",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz",
- "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"escape-string-regexp": "^5.0.0",
@@ -7075,8 +6146,7 @@
},
"node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -7086,8 +6156,7 @@
},
"node_modules/mdast-util-from-markdown": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
- "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0",
@@ -7109,8 +6178,7 @@
},
"node_modules/mdast-util-gfm": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz",
- "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==",
+ "license": "MIT",
"dependencies": {
"mdast-util-from-markdown": "^1.0.0",
"mdast-util-gfm-autolink-literal": "^1.0.0",
@@ -7127,8 +6195,7 @@
},
"node_modules/mdast-util-gfm-autolink-literal": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz",
- "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"ccount": "^2.0.0",
@@ -7142,8 +6209,7 @@
},
"node_modules/mdast-util-gfm-footnote": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz",
- "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-to-markdown": "^1.3.0",
@@ -7156,8 +6222,7 @@
},
"node_modules/mdast-util-gfm-strikethrough": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz",
- "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-to-markdown": "^1.3.0"
@@ -7169,8 +6234,7 @@
},
"node_modules/mdast-util-gfm-table": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz",
- "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"markdown-table": "^3.0.0",
@@ -7184,8 +6248,7 @@
},
"node_modules/mdast-util-gfm-task-list-item": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz",
- "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-to-markdown": "^1.3.0"
@@ -7197,8 +6260,7 @@
},
"node_modules/mdast-util-math": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-2.0.2.tgz",
- "integrity": "sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"longest-streak": "^3.0.0",
@@ -7211,8 +6273,7 @@
},
"node_modules/mdast-util-phrasing": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
- "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"unist-util-is": "^5.0.0"
@@ -7224,8 +6285,7 @@
},
"node_modules/mdast-util-to-hast": {
"version": "12.3.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
- "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/mdast": "^3.0.0",
@@ -7243,8 +6303,7 @@
},
"node_modules/mdast-util-to-markdown": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
- "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0",
@@ -7262,8 +6321,7 @@
},
"node_modules/mdast-util-to-string": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
- "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0"
},
@@ -7274,26 +6332,21 @@
},
"node_modules/merge-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/mhchemparser": {
"version": "4.2.1",
- "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz",
- "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ=="
+ "license": "Apache-2.0"
},
"node_modules/micromark": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz",
- "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7304,6 +6357,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"@types/debug": "^4.0.0",
"debug": "^4.0.0",
@@ -7326,8 +6380,6 @@
},
"node_modules/micromark-core-commonmark": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz",
- "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7338,6 +6390,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-factory-destination": "^1.0.0",
@@ -7359,8 +6412,7 @@
},
"node_modules/micromark-extension-gfm": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz",
- "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==",
+ "license": "MIT",
"dependencies": {
"micromark-extension-gfm-autolink-literal": "^1.0.0",
"micromark-extension-gfm-footnote": "^1.0.0",
@@ -7378,8 +6430,7 @@
},
"node_modules/micromark-extension-gfm-autolink-literal": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz",
- "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==",
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-sanitize-uri": "^1.0.0",
@@ -7393,8 +6444,7 @@
},
"node_modules/micromark-extension-gfm-footnote": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz",
- "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==",
+ "license": "MIT",
"dependencies": {
"micromark-core-commonmark": "^1.0.0",
"micromark-factory-space": "^1.0.0",
@@ -7412,8 +6462,7 @@
},
"node_modules/micromark-extension-gfm-strikethrough": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz",
- "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==",
+ "license": "MIT",
"dependencies": {
"micromark-util-chunked": "^1.0.0",
"micromark-util-classify-character": "^1.0.0",
@@ -7429,8 +6478,7 @@
},
"node_modules/micromark-extension-gfm-table": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz",
- "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==",
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0",
@@ -7445,8 +6493,7 @@
},
"node_modules/micromark-extension-gfm-tagfilter": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz",
- "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==",
+ "license": "MIT",
"dependencies": {
"micromark-util-types": "^1.0.0"
},
@@ -7457,8 +6504,7 @@
},
"node_modules/micromark-extension-gfm-task-list-item": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz",
- "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==",
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0",
@@ -7473,8 +6519,7 @@
},
"node_modules/micromark-extension-math": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-2.1.2.tgz",
- "integrity": "sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==",
+ "license": "MIT",
"dependencies": {
"@types/katex": "^0.16.0",
"katex": "^0.16.0",
@@ -7491,8 +6536,6 @@
},
"node_modules/micromark-factory-destination": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz",
- "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7503,6 +6546,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0",
@@ -7511,8 +6555,6 @@
},
"node_modules/micromark-factory-label": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz",
- "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7523,6 +6565,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0",
@@ -7532,8 +6575,6 @@
},
"node_modules/micromark-factory-space": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
- "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7544,6 +6585,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-types": "^1.0.0"
@@ -7551,8 +6593,6 @@
},
"node_modules/micromark-factory-title": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz",
- "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7563,6 +6603,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0",
@@ -7572,8 +6613,6 @@
},
"node_modules/micromark-factory-whitespace": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz",
- "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7584,6 +6623,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0",
@@ -7593,8 +6633,6 @@
},
"node_modules/micromark-util-character": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz",
- "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7605,6 +6643,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^1.0.0",
"micromark-util-types": "^1.0.0"
@@ -7612,8 +6651,6 @@
},
"node_modules/micromark-util-chunked": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz",
- "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7624,14 +6661,13 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/micromark-util-classify-character": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz",
- "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7642,6 +6678,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0",
@@ -7650,8 +6687,6 @@
},
"node_modules/micromark-util-combine-extensions": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz",
- "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7662,6 +6697,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-chunked": "^1.0.0",
"micromark-util-types": "^1.0.0"
@@ -7669,8 +6705,6 @@
},
"node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
- "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7681,14 +6715,13 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/micromark-util-decode-string": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
- "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7699,6 +6732,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
@@ -7708,38 +6742,6 @@
},
"node_modules/micromark-util-encode": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz",
- "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-html-tag-name": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz",
- "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-normalize-identifier": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz",
- "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7750,14 +6752,41 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "1.2.0",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "1.1.0",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/micromark-util-resolve-all": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz",
- "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7768,14 +6797,13 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-types": "^1.0.0"
}
},
"node_modules/micromark-util-sanitize-uri": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz",
- "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7786,6 +6814,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-encode": "^1.0.0",
@@ -7794,8 +6823,6 @@
},
"node_modules/micromark-util-subtokenize": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz",
- "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7806,6 +6833,7 @@
"url": "https://opencollective.com/unified"
}
],
+ "license": "MIT",
"dependencies": {
"micromark-util-chunked": "^1.0.0",
"micromark-util-symbol": "^1.0.0",
@@ -7815,8 +6843,6 @@
},
"node_modules/micromark-util-symbol": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz",
- "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7826,12 +6852,11 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromark-util-types": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
- "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -7841,12 +6866,12 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/micromatch": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "license": "MIT",
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -7857,16 +6882,14 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -7876,8 +6899,7 @@
},
"node_modules/mimic-fn": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -7887,34 +6909,30 @@
},
"node_modules/mimic-response": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/min-indent": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/mini-svg-data-uri": {
"version": "1.4.4",
- "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
- "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "license": "MIT",
"bin": {
"mini-svg-data-uri": "cli.js"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -7924,21 +6942,18 @@
},
"node_modules/minimist": {
"version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/mj-context-menu": {
"version": "0.6.1",
- "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz",
- "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA=="
+ "license": "Apache-2.0"
},
"node_modules/mkdirp": {
"version": "2.1.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
- "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
+ "license": "MIT",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
@@ -7951,21 +6966,18 @@
},
"node_modules/mri": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
- "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/ms": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "license": "MIT"
},
"node_modules/mz": {
"version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "license": "MIT",
"dependencies": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
@@ -7974,14 +6986,13 @@
},
"node_modules/nanoid": {
"version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -7991,8 +7002,6 @@
},
"node_modules/node-domexception": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
"funding": [
{
"type": "github",
@@ -8003,14 +7012,14 @@
"url": "https://paypal.me/jimmywarting"
}
],
+ "license": "MIT",
"engines": {
"node": ">=10.5.0"
}
},
"node_modules/node-fetch": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz",
- "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==",
+ "license": "MIT",
"dependencies": {
"data-uri-to-buffer": "^4.0.0",
"fetch-blob": "^3.1.4",
@@ -8025,32 +7034,28 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
- "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ=="
+ "version": "2.0.13",
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-range": {
"version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -8060,8 +7065,7 @@
},
"node_modules/npm-run-path": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
- "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "license": "MIT",
"dependencies": {
"path-key": "^4.0.0"
},
@@ -8074,8 +7078,7 @@
},
"node_modules/npm-run-path/node_modules/path-key": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -8085,39 +7088,34 @@
},
"node_modules/nwsapi": {
"version": "2.2.5",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz",
- "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ=="
+ "license": "MIT"
},
"node_modules/object-assign": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-hash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/object-inspect": {
"version": "1.12.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-is": {
"version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
@@ -8131,18 +7129,16 @@
},
"node_modules/object-keys": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.assign": {
"version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -8158,16 +7154,14 @@
},
"node_modules/once": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^4.0.0"
},
@@ -8180,8 +7174,7 @@
},
"node_modules/optionator": {
"version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "license": "MIT",
"dependencies": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
@@ -8196,8 +7189,7 @@
},
"node_modules/ora": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz",
- "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==",
+ "license": "MIT",
"dependencies": {
"chalk": "^5.0.0",
"cli-cursor": "^4.0.0",
@@ -8218,8 +7210,7 @@
},
"node_modules/ora/node_modules/chalk": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
@@ -8229,9 +7220,8 @@
},
"node_modules/os-filter-obj": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
- "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arch": "^2.1.0"
},
@@ -8241,26 +7231,23 @@
},
"node_modules/p-cancelable": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/p-finally": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -8270,8 +7257,7 @@
},
"node_modules/parse-entities": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
+ "license": "MIT",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
@@ -8287,8 +7273,7 @@
},
"node_modules/parse-entities/node_modules/character-entities": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -8296,8 +7281,7 @@
},
"node_modules/parse-json": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -8313,48 +7297,41 @@
},
"node_modules/parse5": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
+ "license": "MIT"
},
"node_modules/path-browserify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
+ "license": "MIT"
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-key": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ "license": "MIT"
},
"node_modules/path-type": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/peek-readable": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
- "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -8365,13 +7342,11 @@
},
"node_modules/picocolors": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -8381,24 +7356,20 @@
},
"node_modules/pify": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/pirates": {
"version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/postcss": {
"version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
"funding": [
{
"type": "opencollective",
@@ -8413,6 +7384,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
@@ -8424,8 +7396,7 @@
},
"node_modules/postcss-import": {
"version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@@ -8440,8 +7411,7 @@
},
"node_modules/postcss-js": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "license": "MIT",
"dependencies": {
"camelcase-css": "^2.0.1"
},
@@ -8458,8 +7428,7 @@
},
"node_modules/postcss-load-config": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "license": "MIT",
"dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^2.1.1"
@@ -8486,16 +7455,14 @@
},
"node_modules/postcss-load-config/node_modules/yaml": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
- "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
+ "license": "ISC",
"engines": {
"node": ">= 14"
}
},
"node_modules/postcss-nested": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
- "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.11"
},
@@ -8512,8 +7479,7 @@
},
"node_modules/postcss-nested/node_modules/postcss-selector-parser": {
"version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -8524,9 +7490,8 @@
},
"node_modules/postcss-selector-parser": {
"version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -8537,22 +7502,18 @@
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ "license": "MIT"
},
"node_modules/prelude-ls": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/prettier": {
"version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
+ "license": "MIT",
"bin": {
"prettier": "bin-prettier.js"
},
@@ -8565,9 +7526,8 @@
},
"node_modules/prettier-plugin-organize-imports": {
"version": "3.2.2",
- "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.2.tgz",
- "integrity": "sha512-e97lE6odGSiHonHJMTYC0q0iLXQyw0u5z/PJpvP/3vRy6/Zi9kLBwFAbEGjDzIowpjQv8b+J04PDamoUSQbzGA==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"@volar/vue-language-plugin-pug": "^1.0.4",
"@volar/vue-typescript": "^1.0.4",
@@ -8585,9 +7545,8 @@
},
"node_modules/prettier-plugin-tailwindcss": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.3.0.tgz",
- "integrity": "sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.17.0"
},
@@ -8659,9 +7618,8 @@
},
"node_modules/pretty-format": {
"version": "27.5.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
- "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -8673,9 +7631,8 @@
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -8685,16 +7642,14 @@
},
"node_modules/prismjs": {
"version": "1.29.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
- "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/prompts": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
@@ -8705,16 +7660,14 @@
},
"node_modules/prompts/node_modules/kleur": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/prop-types": {
"version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
@@ -8723,13 +7676,11 @@
},
"node_modules/prop-types/node_modules/react-is": {
"version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ "license": "MIT"
},
"node_modules/property-information": {
"version": "6.2.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz",
- "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -8737,25 +7688,21 @@
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "license": "MIT"
},
"node_modules/pseudomap": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/psl": {
"version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ "license": "MIT"
},
"node_modules/pump": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -8763,21 +7710,17 @@
},
"node_modules/punycode": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/querystringify": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ "license": "MIT"
},
"node_modules/queue-microtask": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"funding": [
{
"type": "github",
@@ -8791,13 +7734,13 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/quick-lru": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -8807,8 +7750,7 @@
},
"node_modules/react": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -8818,8 +7760,7 @@
},
"node_modules/react-ace": {
"version": "10.1.0",
- "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-10.1.0.tgz",
- "integrity": "sha512-VkvUjZNhdYTuKOKQpMIZi7uzZZVgzCjM7cLYu6F64V0mejY8a2XTyPUIMszC6A4trbeMIHbK5fYFcT/wkP/8VA==",
+ "license": "MIT",
"dependencies": {
"ace-builds": "^1.4.14",
"diff-match-patch": "^1.0.5",
@@ -8834,8 +7775,7 @@
},
"node_modules/react-cookie": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.1.1.tgz",
- "integrity": "sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A==",
+ "license": "MIT",
"dependencies": {
"@types/hoist-non-react-statics": "^3.0.1",
"hoist-non-react-statics": "^3.0.0",
@@ -8847,8 +7787,7 @@
},
"node_modules/react-dom": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
@@ -8859,8 +7798,7 @@
},
"node_modules/react-error-boundary": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.2.tgz",
- "integrity": "sha512-/h21OS80hQ1m/s5UVOp1JKkC8XmUo0rOTRUliGSmWtvswkbbijuQ074K0QLEHwxwwesTt7ksR74/9EHImqWo+A==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5"
},
@@ -8870,22 +7808,19 @@
},
"node_modules/react-icons": {
"version": "4.8.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz",
- "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==",
+ "license": "MIT",
"peerDependencies": {
"react": "*"
}
},
"node_modules/react-is": {
"version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/react-laag": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/react-laag/-/react-laag-2.0.5.tgz",
- "integrity": "sha512-RCvublJhdcgGRHU1wMYJ8kRtnYsKUgYusLvVhMuftg65POnnOB4+fwXvnETm6adc0cMnc1spujlrK6bGIz6aug==",
+ "license": "MIT",
"dependencies": {
"tiny-warning": "^1.0.3"
},
@@ -8896,8 +7831,7 @@
},
"node_modules/react-markdown": {
"version": "8.0.7",
- "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz",
- "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/prop-types": "^15.0.0",
@@ -8926,13 +7860,11 @@
},
"node_modules/react-markdown/node_modules/react-is": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ "license": "MIT"
},
"node_modules/react-remove-scroll": {
"version": "2.5.5",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
- "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==",
+ "license": "MIT",
"dependencies": {
"react-remove-scroll-bar": "^2.3.3",
"react-style-singleton": "^2.2.1",
@@ -8955,8 +7887,7 @@
},
"node_modules/react-remove-scroll-bar": {
"version": "2.3.4",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
- "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
+ "license": "MIT",
"dependencies": {
"react-style-singleton": "^2.2.1",
"tslib": "^2.0.0"
@@ -8976,8 +7907,7 @@
},
"node_modules/react-router": {
"version": "6.8.1",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.1.tgz",
- "integrity": "sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==",
+ "license": "MIT",
"dependencies": {
"@remix-run/router": "1.3.2"
},
@@ -8990,8 +7920,7 @@
},
"node_modules/react-router-dom": {
"version": "6.8.1",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.1.tgz",
- "integrity": "sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==",
+ "license": "MIT",
"dependencies": {
"@remix-run/router": "1.3.2",
"react-router": "6.8.1"
@@ -9006,8 +7935,7 @@
},
"node_modules/react-style-singleton": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
- "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "license": "MIT",
"dependencies": {
"get-nonce": "^1.0.0",
"invariant": "^2.2.4",
@@ -9028,8 +7956,7 @@
},
"node_modules/react-syntax-highlighter": {
"version": "15.5.0",
- "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
- "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.3.1",
"highlight.js": "^10.4.1",
@@ -9043,8 +7970,7 @@
},
"node_modules/react-tabs": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.0.0.tgz",
- "integrity": "sha512-8jKLKrlwxmn5/+xsa76yi27ZdB8E/WhlhQZw739O5UlOeUGtVoVeWnpqIewv/KbjTw7gQf/uA51zWUNt4IVygQ==",
+ "license": "MIT",
"dependencies": {
"clsx": "^1.1.0",
"prop-types": "^15.5.0"
@@ -9055,8 +7981,7 @@
},
"node_modules/react-tooltip": {
"version": "5.13.1",
- "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.13.1.tgz",
- "integrity": "sha512-9NstDFdjyy6cIH9zjeT70zXTHlW/TIGCOWQmhkAyqLFeQioLg1FXvb9ec7AxSpn0zyFUkFSLdFYxZRuewti3Aw==",
+ "license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.0.0",
"classnames": "^2.3.0"
@@ -9068,8 +7993,7 @@
},
"node_modules/react-transition-group": {
"version": "4.4.5",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
- "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
"dependencies": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
@@ -9083,8 +8007,7 @@
},
"node_modules/reactflow": {
"version": "11.5.5",
- "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.5.5.tgz",
- "integrity": "sha512-ExOljG5ErSB8r5Dokto6hFYQq0TNnHl39ZLc19eSGDLXvZcHbBTefMmet9Z5Qlof1h9pB0/NdX8HD+fPwv98Fg==",
+ "license": "MIT",
"dependencies": {
"@reactflow/background": "11.1.7",
"@reactflow/controls": "11.1.7",
@@ -9099,16 +8022,14 @@
},
"node_modules/read-cache": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "license": "MIT",
"dependencies": {
"pify": "^2.3.0"
}
},
"node_modules/readable-stream": {
"version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -9120,9 +8041,8 @@
},
"node_modules/readable-web-to-node-stream": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "^3.6.0"
},
@@ -9136,8 +8056,7 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -9147,9 +8066,8 @@
},
"node_modules/redent": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"indent-string": "^4.0.0",
"strip-indent": "^3.0.0"
@@ -9160,8 +8078,7 @@
},
"node_modules/refractor": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
- "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
+ "license": "MIT",
"dependencies": {
"hastscript": "^6.0.0",
"parse-entities": "^2.0.0",
@@ -9174,22 +8091,19 @@
},
"node_modules/refractor/node_modules/prismjs": {
"version": "1.27.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
- "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/regenerator-runtime": {
"version": "0.13.11",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ "license": "MIT"
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
- "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -9204,8 +8118,7 @@
},
"node_modules/rehype-mathjax": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/rehype-mathjax/-/rehype-mathjax-4.0.2.tgz",
- "integrity": "sha512-9q4Q4icTIbM5RtvQ4XquvEApGV2oDMaSVa5G3DwXomWU4fAPWYcOOt+iQRNaIH3RBMbFF239QbE5K7hm7rxMPQ==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/mathjax": "^0.0.37",
@@ -9224,8 +8137,7 @@
},
"node_modules/remark-gfm": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
- "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-gfm": "^2.0.0",
@@ -9239,8 +8151,7 @@
},
"node_modules/remark-math": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-5.1.1.tgz",
- "integrity": "sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-math": "^2.0.0",
@@ -9254,8 +8165,7 @@
},
"node_modules/remark-parse": {
"version": "10.0.2",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz",
- "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^3.0.0",
"mdast-util-from-markdown": "^1.0.0",
@@ -9268,8 +8178,7 @@
},
"node_modules/remark-rehype": {
"version": "10.1.0",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
- "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"@types/mdast": "^3.0.0",
@@ -9283,21 +8192,18 @@
},
"node_modules/require-from-string": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ "license": "MIT"
},
"node_modules/resolve": {
"version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "license": "MIT",
"dependencies": {
"is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
@@ -9312,23 +8218,20 @@
},
"node_modules/resolve-alpn": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/resolve-from": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/responselike": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
- "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lowercase-keys": "^2.0.0"
},
@@ -9338,8 +8241,7 @@
},
"node_modules/restore-cursor": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
- "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
@@ -9353,16 +8255,14 @@
},
"node_modules/restore-cursor/node_modules/mimic-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/restore-cursor/node_modules/onetime": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -9375,8 +8275,7 @@
},
"node_modules/reusify": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -9384,8 +8283,7 @@
},
"node_modules/rollup": {
"version": "3.25.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz",
- "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==",
+ "license": "MIT",
"bin": {
"rollup": "dist/bin/rollup"
},
@@ -9399,8 +8297,6 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"funding": [
{
"type": "github",
@@ -9415,14 +8311,14 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
"node_modules/sade": {
"version": "1.8.1",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
- "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "license": "MIT",
"dependencies": {
"mri": "^1.1.0"
},
@@ -9432,8 +8328,6 @@
},
"node_modules/safe-buffer": {
"version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
@@ -9447,17 +8341,16 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/safer-buffer": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "license": "MIT"
},
"node_modules/saxes": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
@@ -9467,17 +8360,15 @@
},
"node_modules/scheduler": {
"version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"node_modules/semver": {
"version": "7.5.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
- "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -9490,9 +8381,8 @@
},
"node_modules/semver-regex": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz",
- "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -9502,9 +8392,8 @@
},
"node_modules/semver-truncate": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz",
- "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"semver": "^7.3.5"
},
@@ -9517,9 +8406,8 @@
},
"node_modules/semver/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
@@ -9529,14 +8417,12 @@
},
"node_modules/semver/node_modules/yallist": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/shadcn-ui": {
"version": "0.2.2",
- "resolved": "https://registry.npmjs.org/shadcn-ui/-/shadcn-ui-0.2.2.tgz",
- "integrity": "sha512-T76EeZymSB45Yz63gkYOv9P0Ke+UA9IZenysx+975nyNzXxU7HRBgfwuHiMcrcubtOLrzRVedTLX3lcOMqDeRQ==",
+ "license": "MIT",
"dependencies": {
"@antfu/ni": "^0.21.4",
"chalk": "5.2.0",
@@ -9559,8 +8445,7 @@
},
"node_modules/shadcn-ui/node_modules/agent-base": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
- "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
@@ -9570,8 +8455,7 @@
},
"node_modules/shadcn-ui/node_modules/chalk": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
- "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
@@ -9581,16 +8465,14 @@
},
"node_modules/shadcn-ui/node_modules/commander": {
"version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/shadcn-ui/node_modules/cosmiconfig": {
"version": "8.2.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
- "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "license": "MIT",
"dependencies": {
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -9606,8 +8488,7 @@
},
"node_modules/shadcn-ui/node_modules/https-proxy-agent": {
"version": "6.2.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz",
- "integrity": "sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==",
+ "license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
@@ -9618,8 +8499,7 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -9629,16 +8509,14 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/short-unique-id": {
"version": "4.4.4",
- "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz",
- "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==",
+ "license": "Apache-2.0",
"bin": {
"short-unique-id": "bin/short-unique-id",
"suid": "bin/short-unique-id"
@@ -9646,9 +8524,8 @@
},
"node_modules/side-channel": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
@@ -9660,27 +8537,23 @@
},
"node_modules/signal-exit": {
"version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ "license": "ISC"
},
"node_modules/sisteransi": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ "license": "MIT"
},
"node_modules/slash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/slice-ansi": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -9695,8 +8568,7 @@
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -9709,8 +8581,7 @@
},
"node_modules/slice-ansi/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -9720,14 +8591,12 @@
},
"node_modules/slice-ansi/node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "license": "MIT"
},
"node_modules/sort-keys": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-obj": "^1.0.0"
},
@@ -9737,9 +8606,8 @@
},
"node_modules/sort-keys-length": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
- "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sort-keys": "^1.0.0"
},
@@ -9749,25 +8617,22 @@
},
"node_modules/source-map": {
"version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/space-separated-tokens": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
- "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -9775,8 +8640,7 @@
},
"node_modules/speech-rule-engine": {
"version": "4.0.7",
- "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz",
- "integrity": "sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==",
+ "license": "Apache-2.0",
"dependencies": {
"commander": "9.2.0",
"wicked-good-xpath": "1.3.0",
@@ -9788,8 +8652,7 @@
},
"node_modules/stdin-discarder": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
- "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==",
+ "license": "MIT",
"dependencies": {
"bl": "^5.0.0"
},
@@ -9802,9 +8665,8 @@
},
"node_modules/stop-iteration-iterator": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
- "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"internal-slot": "^1.0.4"
},
@@ -9814,16 +8676,14 @@
},
"node_modules/string_decoder": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/string-width": {
"version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -9835,8 +8695,7 @@
},
"node_modules/string-width/node_modules/strip-ansi": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -9846,8 +8705,7 @@
},
"node_modules/strip-ansi": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -9860,8 +8718,7 @@
},
"node_modules/strip-ansi/node_modules/ansi-regex": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -9871,25 +8728,22 @@
},
"node_modules/strip-bom": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/strip-eof": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/strip-final-newline": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -9899,9 +8753,8 @@
},
"node_modules/strip-indent": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"min-indent": "^1.0.0"
},
@@ -9911,9 +8764,8 @@
},
"node_modules/strip-outer": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
- "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -9923,9 +8775,8 @@
},
"node_modules/strtok3": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
- "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@tokenizer/token": "^0.3.0",
"peek-readable": "^5.0.0"
@@ -9940,21 +8791,18 @@
},
"node_modules/style-to-object": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz",
- "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==",
+ "license": "MIT",
"dependencies": {
"inline-style-parser": "0.1.1"
}
},
"node_modules/stylis": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
- "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+ "license": "MIT"
},
"node_modules/sucrase": {
"version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
@@ -9974,16 +8822,14 @@
},
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -9993,8 +8839,7 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -10004,23 +8849,18 @@
},
"node_modules/svg-parser": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
- "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
+ "license": "MIT"
},
"node_modules/switch": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/switch/-/switch-0.0.0.tgz",
- "integrity": "sha512-Pvi4hlAXWHEIT+4XlQEPPIQ02hRzvn38K/cnZ5sZeM11FsDPoXvBD6i/zyVxFK6cgqSlS8sA5/sIwUGp9+ZMhw=="
+ "version": "0.0.0"
},
"node_modules/symbol-tree": {
"version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ "license": "MIT"
},
"node_modules/table": {
"version": "6.8.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
- "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+ "license": "BSD-3-Clause",
"dependencies": {
"ajv": "^8.0.1",
"lodash.truncate": "^4.4.2",
@@ -10034,8 +8874,7 @@
},
"node_modules/table/node_modules/strip-ansi": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -10045,8 +8884,7 @@
},
"node_modules/tailwind-merge": {
"version": "1.13.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.13.0.tgz",
- "integrity": "sha512-mUTmDbcU+IhOvJ0c42eLQ/nRkvolTqfpVaVQRSxfJAv9TabS6Y2zW/1wKpKLdKzyL3Gh8j6NTLl6MWNmvOM6kA==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/dcastil"
@@ -10054,8 +8892,7 @@
},
"node_modules/tailwindcss": {
"version": "3.3.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
- "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
+ "license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -10091,16 +8928,14 @@
},
"node_modules/tailwindcss-animate": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.5.tgz",
- "integrity": "sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==",
+ "license": "MIT",
"peerDependencies": {
"tailwindcss": ">=3.0.0 || insiders"
}
},
"node_modules/tailwindcss/node_modules/glob-parent": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -10110,8 +8945,7 @@
},
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
"version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -10122,16 +8956,14 @@
},
"node_modules/thenify": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
"dependencies": {
"any-promise": "^1.0.0"
}
},
"node_modules/thenify-all": {
"version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
"dependencies": {
"thenify": ">= 3.1.0 < 4"
},
@@ -10141,21 +8973,18 @@
},
"node_modules/tiny-warning": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ "license": "MIT"
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -10165,9 +8994,8 @@
},
"node_modules/token-types": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
- "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@tokenizer/token": "^0.3.0",
"ieee754": "^1.2.1"
@@ -10182,8 +9010,7 @@
},
"node_modules/tough-cookie": {
"version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "license": "BSD-3-Clause",
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -10196,8 +9023,7 @@
},
"node_modules/tr46": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "license": "MIT",
"dependencies": {
"punycode": "^2.1.1"
},
@@ -10207,8 +9033,7 @@
},
"node_modules/trim-lines": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
- "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -10216,9 +9041,8 @@
},
"node_modules/trim-repeated": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
- "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^5.0.0"
},
@@ -10228,9 +9052,8 @@
},
"node_modules/trim-repeated/node_modules/escape-string-regexp": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -10240,8 +9063,7 @@
},
"node_modules/trough": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
- "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -10249,13 +9071,11 @@
},
"node_modules/ts-interface-checker": {
"version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ "license": "Apache-2.0"
},
"node_modules/ts-morph": {
"version": "18.0.0",
- "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz",
- "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==",
+ "license": "MIT",
"dependencies": {
"@ts-morph/common": "~0.19.0",
"code-block-writer": "^12.0.0"
@@ -10263,8 +9083,7 @@
},
"node_modules/tsconfig-paths": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
- "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
+ "license": "MIT",
"dependencies": {
"json5": "^2.2.2",
"minimist": "^1.2.6",
@@ -10276,13 +9095,11 @@
},
"node_modules/tslib": {
"version": "2.5.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
- "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w=="
+ "license": "0BSD"
},
"node_modules/type-check": {
"version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2"
},
@@ -10292,9 +9109,8 @@
},
"node_modules/typescript": {
"version": "5.0.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
- "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
"devOptional": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -10305,8 +9121,7 @@
},
"node_modules/unified": {
"version": "10.1.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
- "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"bail": "^2.0.0",
@@ -10323,8 +9138,7 @@
},
"node_modules/unified/node_modules/is-plain-obj": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -10334,8 +9148,7 @@
},
"node_modules/unist-util-find-after": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz",
- "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"unist-util-is": "^5.0.0"
@@ -10347,8 +9160,7 @@
},
"node_modules/unist-util-generated": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
- "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
@@ -10356,8 +9168,7 @@
},
"node_modules/unist-util-is": {
"version": "5.2.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
- "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0"
},
@@ -10368,8 +9179,7 @@
},
"node_modules/unist-util-position": {
"version": "4.0.4",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
- "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0"
},
@@ -10380,8 +9190,7 @@
},
"node_modules/unist-util-stringify-position": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
- "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0"
},
@@ -10392,8 +9201,7 @@
},
"node_modules/unist-util-visit": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"unist-util-is": "^5.0.0",
@@ -10406,8 +9214,7 @@
},
"node_modules/unist-util-visit-parents": {
"version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"unist-util-is": "^5.0.0"
@@ -10419,8 +9226,7 @@
},
"node_modules/universal-cookie": {
"version": "4.0.4",
- "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz",
- "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==",
+ "license": "MIT",
"dependencies": {
"@types/cookie": "^0.3.3",
"cookie": "^0.4.0"
@@ -10428,16 +9234,13 @@
},
"node_modules/universalify": {
"version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/update-browserslist-db": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
"funding": [
{
"type": "opencollective",
@@ -10452,6 +9255,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -10465,16 +9269,14 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/url-parse": {
"version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "license": "MIT",
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -10482,8 +9284,7 @@
},
"node_modules/use-callback-ref": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz",
- "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==",
+ "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -10502,8 +9303,7 @@
},
"node_modules/use-sidecar": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
- "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "license": "MIT",
"dependencies": {
"detect-node-es": "^1.1.0",
"tslib": "^2.0.0"
@@ -10523,29 +9323,25 @@
},
"node_modules/use-sync-external-store": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ "license": "MIT"
},
"node_modules/uuid": {
"version": "9.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
- "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
+ "license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/uvu": {
"version": "0.5.6",
- "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
- "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
+ "license": "MIT",
"dependencies": {
"dequal": "^2.0.0",
"diff": "^5.0.0",
@@ -10561,8 +9357,7 @@
},
"node_modules/vfile": {
"version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
@@ -10576,8 +9371,7 @@
},
"node_modules/vfile-message": {
"version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0"
@@ -10589,8 +9383,7 @@
},
"node_modules/vite": {
"version": "4.3.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
- "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+ "license": "MIT",
"dependencies": {
"esbuild": "^0.17.5",
"postcss": "^8.4.23",
@@ -10636,8 +9429,7 @@
},
"node_modules/vite-plugin-svgr": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz",
- "integrity": "sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw==",
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.2",
"@svgr/core": "^7.0.0",
@@ -10649,17 +9441,14 @@
},
"node_modules/w3c-hr-time": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
+ "license": "MIT",
"dependencies": {
"browser-process-hrtime": "^1.0.0"
}
},
"node_modules/w3c-xmlserializer": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
- "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "license": "MIT",
"dependencies": {
"xml-name-validator": "^4.0.0"
},
@@ -10669,16 +9458,14 @@
},
"node_modules/wcwidth": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/web-namespaces": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -10686,29 +9473,25 @@
},
"node_modules/web-streams-polyfill": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
- "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/web-vitals": {
"version": "2.1.4",
- "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz",
- "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg=="
+ "license": "Apache-2.0"
},
"node_modules/webidl-conversions": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
}
},
"node_modules/whatwg-encoding": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
@@ -10718,16 +9501,14 @@
},
"node_modules/whatwg-mimetype": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/whatwg-url": {
"version": "10.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+ "license": "MIT",
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
@@ -10738,8 +9519,7 @@
},
"node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -10752,9 +9532,8 @@
},
"node_modules/which-boxed-primitive": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
@@ -10768,9 +9547,8 @@
},
"node_modules/which-collection": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
- "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-map": "^2.0.1",
"is-set": "^2.0.1",
@@ -10783,9 +9561,8 @@
},
"node_modules/which-typed-array": {
"version": "1.1.9",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
- "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -10803,26 +9580,23 @@
},
"node_modules/wicked-good-xpath": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz",
- "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw=="
+ "license": "MIT"
},
"node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ "license": "ISC"
},
"node_modules/ws": {
"version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
},
@@ -10841,58 +9615,50 @@
},
"node_modules/xml-name-validator": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=12"
}
},
"node_modules/xmlchars": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ "license": "MIT"
},
"node_modules/xmldom-sre": {
"version": "0.1.31",
- "resolved": "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz",
- "integrity": "sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==",
+ "license": "(LGPL-2.0 or MIT)",
"engines": {
"node": ">=0.1"
}
},
"node_modules/xtend": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/yallist": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ "license": "ISC"
},
"node_modules/yaml": {
"version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
"engines": {
"node": ">= 6"
}
},
"node_modules/zod": {
"version": "3.21.4",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
- "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zustand": {
"version": "4.3.8",
- "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz",
- "integrity": "sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==",
+ "license": "MIT",
"dependencies": {
"use-sync-external-store": "1.2.0"
},
@@ -10914,8 +9680,7 @@
},
"node_modules/zwitch": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
- "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
diff --git a/src/frontend/package.json b/src/frontend/package.json
index 323a9a7be..e3814c1ad 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -15,6 +15,7 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-menubar": "^1.0.3",
+ "@radix-ui/react-popover": "^1.0.6",
"@radix-ui/react-progress": "^1.0.3",
"@radix-ui/react-separator": "^1.0.3",
"@radix-ui/react-slot": "^1.0.2",
@@ -24,6 +25,7 @@
"@tabler/icons-react": "^2.18.0",
"@tailwindcss/forms": "^0.5.3",
"@tailwindcss/line-clamp": "^0.4.4",
+ "@types/axios": "^0.14.0",
"accordion": "^3.0.2",
"ace-builds": "^1.16.0",
"add": "^2.0.6",
diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx
index a3e3e6357..e91d65a3e 100644
--- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx
+++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx
@@ -1,10 +1,11 @@
-import { Info } from "lucide-react";
+import { cloneDeep } from "lodash";
import React, { useContext, useEffect, useRef, useState } from "react";
import { Handle, Position, useUpdateNodeInternals } from "reactflow";
import ShadTooltip from "../../../../components/ShadTooltipComponent";
import CodeAreaComponent from "../../../../components/codeAreaComponent";
import Dropdown from "../../../../components/dropdownComponent";
import FloatComponent from "../../../../components/floatComponent";
+import IconComponent from "../../../../components/genericIconComponent";
import InputComponent from "../../../../components/inputComponent";
import InputFileComponent from "../../../../components/inputFileComponent";
import InputListComponent from "../../../../components/inputListComponent";
@@ -12,26 +13,23 @@ import IntComponent from "../../../../components/intComponent";
import PromptAreaComponent from "../../../../components/promptComponent";
import TextAreaComponent from "../../../../components/textAreaComponent";
import ToggleShadComponent from "../../../../components/toggleShadComponent";
-import { MAX_LENGTH_TO_SCROLL_TOOLTIP } from "../../../../constants";
-import { PopUpContext } from "../../../../contexts/popUpContext";
+import { TOOLTIP_EMPTY } from "../../../../constants/constants";
import { TabsContext } from "../../../../contexts/tabsContext";
import { typesContext } from "../../../../contexts/typesContext";
import { ParameterComponentType } from "../../../../types/components";
-import { cleanEdges } from "../../../../util/reactflowUtils";
+import { isValidConnection } from "../../../../utils/reactflowUtils";
import {
- classNames,
- getRandomKeyByssmm,
- groupByFamily,
- isValidConnection,
nodeColors,
nodeIconsLucide,
nodeNames,
-} from "../../../../utils";
+} from "../../../../utils/styleUtils";
+import { classNames, groupByFamily } from "../../../../utils/utils";
export default function ParameterComponent({
left,
id,
data,
+ setData,
tooltipTitle,
title,
color,
@@ -43,13 +41,14 @@ export default function ParameterComponent({
}: ParameterComponentType) {
const ref = useRef(null);
const refHtml = useRef(null);
- const refNumberComponents = useRef(0);
const infoHtml = useRef(null);
const updateNodeInternals = useUpdateNodeInternals();
const [position, setPosition] = useState(0);
- const { closePopUp } = useContext(PopUpContext);
- const { setTabsState, tabId, save } = useContext(TabsContext);
+ const { setTabsState, tabId, save, flows } = useContext(TabsContext);
+ const flow = flows.find((f) => f.id === tabId).data?.nodes ?? null;
+
+ // Update component position
useEffect(() => {
if (ref.current && ref.current.offsetTop && ref.current.clientHeight) {
setPosition(ref.current.offsetTop + ref.current.clientHeight / 2);
@@ -61,15 +60,16 @@ export default function ParameterComponent({
updateNodeInternals(data.id);
}, [data.id, position, updateNodeInternals]);
- useEffect(() => {}, [closePopUp, data.node.template]);
-
const { reactFlowInstance } = useContext(typesContext);
let disabled =
reactFlowInstance?.getEdges().some((e) => e.targetHandle === id) ?? false;
- const [myData, setMyData] = useState(useContext(typesContext).data);
+
+ const { data: myData } = useContext(typesContext);
const handleOnNewValue = (newValue: any) => {
- data.node.template[name].value = newValue;
+ let newData = cloneDeep(data);
+ newData.node.template[name].value = newValue;
+ setData(newData);
// Set state to pending
setTabsState((prev) => {
return {
@@ -77,12 +77,15 @@ export default function ParameterComponent({
[tabId]: {
...prev[tabId],
isPending: true,
+ formKeysData: prev[tabId].formKeysData,
},
};
});
+ renderTooltips();
};
useEffect(() => {
+ if (name === "openai_api_base") console.log(info);
infoHtml.current = (
{info.split("\n").map((line, i) => (
@@ -94,57 +97,64 @@ export default function ParameterComponent({
);
}, [info]);
- useEffect(() => {
- const groupedObj = groupByFamily(myData, tooltipTitle, left, data.type);
+ function renderTooltips() {
+ let groupedObj = groupByFamily(myData, tooltipTitle, left, flow);
- refNumberComponents.current = groupedObj[0]?.type?.length;
+ if (groupedObj && groupedObj.length > 0) {
+ refHtml.current = groupedObj.map((item, i) => {
+ const Icon: any =
+ nodeIconsLucide[item.family] ?? nodeIconsLucide["unknown"];
- refHtml.current = groupedObj.map((item, i) => {
- const Icon: any = nodeIconsLucide[item.family];
-
- return (
-
0 ? "mt-2 flex items-center" : "flex items-center"
- )}
- >
- 0 ? "mt-2 flex items-center" : "flex items-center"
+ )}
>
-
-
-
- {nodeNames[item.family] ?? ""}{" "}
-
- {" "}
- {item.type === "" ? "" : " - "}
- {item.type.split(", ").length > 2
- ? item.type.split(", ").map((el, i) => (
-
-
- {i === item.type.split(", ").length - 1
- ? el
- : (el += `, `)}
-
-
- ))
- : item.type}
+ >
+
+
+
+ {nodeNames[item.family] ?? "Other"}
+
+ {" "}
+ {item.type === "" ? "" : " - "}
+ {item.type.split(", ").length > 2
+ ? item.type.split(", ").map((el, i) => (
+
+
+ {i === item.type.split(", ").length - 1
+ ? el
+ : (el += `, `)}
+
+
+ ))
+ : item.type}
+
-
- );
- });
- }, [tooltipTitle]);
+ );
+ });
+ } else {
+ refHtml.current = {TOOLTIP_EMPTY} ;
+ }
+ }
+
+ useEffect(() => {
+ renderTooltips();
+ }, [tooltipTitle, flow]);
return (
{info !== "" && (
-
+ {/* put div to avoid bug that does not display tooltip */}
+
+
+
)}
@@ -181,11 +197,7 @@ export default function ParameterComponent({
<>>
) : (
MAX_LENGTH_TO_SCROLL_TOOLTIP
- ? "tooltip-fixed-width custom-scroll overflow-y-scroll nowheel"
- : "tooltip-fixed-width"
- }
+ styleClasses={"tooltip-fixed-width custom-scroll nowheel"}
delayDuration={0}
content={refHtml.current}
side={left ? "left" : "right"}
@@ -233,7 +245,6 @@ export default function ParameterComponent({
) : (
{
handleOnNewValue(t);
}}
@@ -255,7 +266,6 @@ export default function ParameterComponent({
@@ -273,6 +283,7 @@ export default function ParameterComponent({
) : left === true && type === "code" ? (
{
data.node = nodeClass;
}}
@@ -300,7 +311,6 @@ export default function ParameterComponent({
@@ -311,15 +321,6 @@ export default function ParameterComponent({
field_name={name}
setNodeClass={(nodeClass) => {
data.node = nodeClass;
- if (reactFlowInstance) {
- cleanEdges({
- flow: {
- edges: reactFlowInstance.getEdges(),
- nodes: reactFlowInstance.getNodes(),
- },
- updateEdge: (edge) => reactFlowInstance.setEdges(edge),
- });
- }
}}
nodeClass={data.node}
disabled={disabled}
diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx
index ee62461bd..d72e46d23 100644
--- a/src/frontend/src/CustomNodes/GenericNode/index.tsx
+++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx
@@ -1,48 +1,54 @@
-import { Zap } from "lucide-react";
-import { useContext, useEffect, useRef, useState } from "react";
-import { NodeToolbar } from "reactflow";
+import { cloneDeep } from "lodash";
+import { useContext, useEffect, useState } from "react";
+import { NodeToolbar, useUpdateNodeInternals } from "reactflow";
import ShadTooltip from "../../components/ShadTooltipComponent";
import Tooltip from "../../components/TooltipComponent";
+import IconComponent from "../../components/genericIconComponent";
import { useSSE } from "../../contexts/SSEContext";
-import { alertContext } from "../../contexts/alertContext";
-import { PopUpContext } from "../../contexts/popUpContext";
+import { TabsContext } from "../../contexts/tabsContext";
import { typesContext } from "../../contexts/typesContext";
-import NodeModal from "../../modals/NodeModal";
import NodeToolbarComponent from "../../pages/FlowPage/components/nodeToolbarComponent";
import { NodeDataType } from "../../types/flow";
-import {
- classNames,
- nodeColors,
- nodeIconsLucide,
- toTitleCase,
-} from "../../utils";
+import { cleanEdges } from "../../utils/reactflowUtils";
+import { nodeColors, nodeIconsLucide } from "../../utils/styleUtils";
+import { classNames, toTitleCase } from "../../utils/utils";
import ParameterComponent from "./components/parameterComponent";
export default function GenericNode({
- data,
+ data: olddata,
selected,
}: {
data: NodeDataType;
selected: boolean;
}) {
- const { setErrorData } = useContext(alertContext);
- const showError = useRef(true);
- const { types, deleteNode } = useContext(typesContext);
-
- const { closePopUp, openPopUp } = useContext(PopUpContext);
- // any to avoid type conflict
- const Icon: any =
- nodeIconsLucide[data.type] || nodeIconsLucide[types[data.type]];
+ const [data, setData] = useState(olddata);
+ const { updateFlow, flows, tabId } = useContext(TabsContext);
+ const updateNodeInternals = useUpdateNodeInternals();
+ const { types, deleteNode, reactFlowInstance } = useContext(typesContext);
+ const name = nodeIconsLucide[data.type] ? data.type : types[data.type];
const [validationStatus, setValidationStatus] = useState(null);
// State for outline color
const { sseData, isBuilding } = useSSE();
- const refHtml = useRef(null);
-
- // useEffect(() => {
- // if (reactFlowInstance) {
- // setParams(Object.values(reactFlowInstance.toObject()));
- // }
- // }, [save]);
+ useEffect(() => {
+ olddata.node = data.node;
+ let myFlow = flows.find((flow) => flow.id === tabId);
+ if (reactFlowInstance && myFlow) {
+ let flow = cloneDeep(myFlow);
+ flow.data = reactFlowInstance.toObject();
+ cleanEdges({
+ flow: {
+ edges: flow.data.edges,
+ nodes: flow.data.nodes,
+ },
+ updateEdge: (edge) => {
+ flow.data.edges = edge;
+ reactFlowInstance.setEdges(edge);
+ updateNodeInternals(data.id);
+ },
+ });
+ updateFlow(flow);
+ }
+ }, [data]);
// New useEffect to watch for changes in sseData and update validation status
useEffect(() => {
@@ -55,25 +61,12 @@ export default function GenericNode({
}
}, [sseData, data.id]);
- if (!Icon) {
- if (showError.current) {
- setErrorData({
- title: data.type
- ? `The ${data.type} node could not be rendered, please review your json file`
- : "There was a node that can't be rendered, please review your json file",
- });
- showError.current = false;
- }
- deleteNode(data.id);
- return;
- }
- useEffect(() => {}, [closePopUp, data.node.template]);
return (
<>
@@ -84,14 +77,17 @@ export default function GenericNode({
"generic-node-div"
)}
>
+ {data.node.beta && (
+
+ )}
-
@@ -101,15 +97,6 @@ export default function GenericNode({
-
- {
- event.preventDefault();
- openPopUp( );
- }}
- >
-
Build{" "}
- {" "}
flow to validate status.
) : (
- {validationStatus.params
+ {typeof validationStatus.params === "string"
? validationStatus.params
.split("\n")
.map((line, index) =>
{line}
)
@@ -175,29 +162,19 @@ export default function GenericNode({
.filter((t) => t.charAt(0) !== "_")
.map((t: string, idx) => (
- {/* {idx === 0 ? (
-
- !key.startsWith("_") &&
- data.node.template[key].show &&
- !data.node.template[key].advanced
- ).length === 0
- ? "hidden"
- : ""
- )}
- >
- Inputs
-
- ) : (
- <>>
- )} */}
{data.node.template[t].show &&
!data.node.template[t].advanced ? (
{" "}
- {/*
- Output
-
*/}
0
diff --git a/src/frontend/src/alerts/alertDropDown/components/singleAlertComponent/index.tsx b/src/frontend/src/alerts/alertDropDown/components/singleAlertComponent/index.tsx
index 18475b039..9a94db7d5 100644
--- a/src/frontend/src/alerts/alertDropDown/components/singleAlertComponent/index.tsx
+++ b/src/frontend/src/alerts/alertDropDown/components/singleAlertComponent/index.tsx
@@ -1,7 +1,7 @@
import { Transition } from "@headlessui/react";
-import { CheckCircle2, Info, X, XCircle } from "lucide-react";
import { useState } from "react";
import { Link } from "react-router-dom";
+import IconComponent from "../../../../components/genericIconComponent";
import { SingleAlertComponentType } from "../../../../types/alerts";
export default function SingleAlert({
@@ -29,7 +29,11 @@ export default function SingleAlert({
key={dropItem.id}
>
-
+
@@ -62,7 +66,8 @@ export default function SingleAlert({
className="inline-flex rounded-md p-1.5 text-status-red"
>
Dismiss
-
@@ -76,7 +81,11 @@ export default function SingleAlert({
key={dropItem.id}
>
-
+
@@ -108,7 +117,8 @@ export default function SingleAlert({
className="inline-flex rounded-md p-1.5 text-info-foreground"
>
Dismiss
-
@@ -122,7 +132,8 @@ export default function SingleAlert({
key={dropItem.id}
>
-
@@ -145,7 +156,8 @@ export default function SingleAlert({
className="inline-flex rounded-md p-1.5 text-status-green"
>
Dismiss
-
diff --git a/src/frontend/src/alerts/alertDropDown/index.tsx b/src/frontend/src/alerts/alertDropDown/index.tsx
index c14c1806d..90838d693 100644
--- a/src/frontend/src/alerts/alertDropDown/index.tsx
+++ b/src/frontend/src/alerts/alertDropDown/index.tsx
@@ -1,66 +1,72 @@
-import { Trash2, X } from "lucide-react";
-import { useContext, useRef } from "react";
+import { useContext, useState } from "react";
+import IconComponent from "../../components/genericIconComponent";
+import {
+ Popover,
+ PopoverContent,
+ PopoverTrigger,
+} from "../../components/ui/popover";
import { alertContext } from "../../contexts/alertContext";
-import { PopUpContext } from "../../contexts/popUpContext";
import { AlertDropdownType } from "../../types/alerts";
-import { useOnClickOutside } from "../hooks/useOnClickOutside";
import SingleAlert from "./components/singleAlertComponent";
-export default function AlertDropdown({}: AlertDropdownType) {
- const { closePopUp } = useContext(PopUpContext);
- const componentRef = useRef
(null);
-
- // Use the custom hook
- useOnClickOutside(componentRef, () => {
- closePopUp();
- });
-
+export default function AlertDropdown({ children }: AlertDropdownType) {
const {
notificationList,
clearNotificationList,
removeFromNotificationList,
+ setNotificationCenter,
} = useContext(alertContext);
+ const [open, setOpen] = useState(false);
+
return (
- {
+ setOpen(k);
+ if (k) setNotificationCenter(false);
+ }}
>
-
- Notifications
-
- {
- closePopUp();
- setTimeout(clearNotificationList, 100);
- }}
- >
-
-
-
-
-
-
-
-
- {notificationList.length !== 0 ? (
- notificationList.map((alertItem, index) => (
-
- ))
- ) : (
-
- No new notifications
+
{children}
+
+
+ Notifications
+
+ {
+ setOpen(false);
+ setTimeout(clearNotificationList, 100);
+ }}
+ >
+
+
+ {
+ setOpen(false);
+ }}
+ >
+
+
- )}
-
-
+
+
+ {notificationList.length !== 0 ? (
+ notificationList.map((alertItem, index) => (
+
+ ))
+ ) : (
+
+ No new notifications
+
+ )}
+
+
+
);
}
diff --git a/src/frontend/src/alerts/error/index.tsx b/src/frontend/src/alerts/error/index.tsx
index 3824c3e87..2b898f58a 100644
--- a/src/frontend/src/alerts/error/index.tsx
+++ b/src/frontend/src/alerts/error/index.tsx
@@ -1,6 +1,6 @@
import { Transition } from "@headlessui/react";
-import { XCircle } from "lucide-react";
import { useEffect, useState } from "react";
+import IconComponent from "../../components/genericIconComponent";
import { ErrorAlertType } from "../../types/alerts";
export default function ErrorAlert({
@@ -44,7 +44,8 @@ export default function ErrorAlert({
>
-
diff --git a/src/frontend/src/alerts/notice/index.tsx b/src/frontend/src/alerts/notice/index.tsx
index c77a4bcd6..494d9d4dc 100644
--- a/src/frontend/src/alerts/notice/index.tsx
+++ b/src/frontend/src/alerts/notice/index.tsx
@@ -1,7 +1,7 @@
import { Transition } from "@headlessui/react";
-import { Info } from "lucide-react";
import { useEffect, useState } from "react";
import { Link } from "react-router-dom";
+import IconComponent from "../../components/genericIconComponent";
import { NoticeAlertType } from "../../types/alerts";
export default function NoticeAlert({
@@ -40,7 +40,11 @@ export default function NoticeAlert({
>
-
+
{title}
diff --git a/src/frontend/src/alerts/success/index.tsx b/src/frontend/src/alerts/success/index.tsx
index 60dba1e93..5cb89b530 100644
--- a/src/frontend/src/alerts/success/index.tsx
+++ b/src/frontend/src/alerts/success/index.tsx
@@ -1,6 +1,6 @@
import { Transition } from "@headlessui/react";
-import { CheckCircle2 } from "lucide-react";
import { useEffect, useState } from "react";
+import IconComponent from "../../components/genericIconComponent";
import { SuccessAlertType } from "../../types/alerts";
export default function SuccessAlert({
@@ -38,7 +38,11 @@ export default function SuccessAlert({
>
-
+
{title}
diff --git a/src/frontend/src/components/AccordionComponent/index.tsx b/src/frontend/src/components/AccordionComponent/index.tsx
index 3b0ddd596..7212e6a1b 100644
--- a/src/frontend/src/components/AccordionComponent/index.tsx
+++ b/src/frontend/src/components/AccordionComponent/index.tsx
@@ -11,6 +11,7 @@ export default function AccordionComponent({
trigger,
children,
open = [],
+ keyValue,
}: AccordionComponentType) {
const [value, setValue] = useState(
open.length === 0 ? "" : getOpenAccordion()
@@ -28,13 +29,18 @@ export default function AccordionComponent({
}
function handleClick() {
- value == "" ? setValue(trigger) : setValue("");
+ value === "" ? setValue(keyValue) : setValue("");
}
return (
<>
-
-
+
+
{
handleClick();
@@ -43,7 +49,9 @@ export default function AccordionComponent({
>
{trigger}
- {children}
+
+ {children}
+
>
diff --git a/src/frontend/src/components/EditFlowSettingsComponent/index.tsx b/src/frontend/src/components/EditFlowSettingsComponent/index.tsx
index a0beb11f3..6504c2b4e 100644
--- a/src/frontend/src/components/EditFlowSettingsComponent/index.tsx
+++ b/src/frontend/src/components/EditFlowSettingsComponent/index.tsx
@@ -1,14 +1,17 @@
-import React, { ChangeEvent, useState } from "react";
+import React, { ChangeEvent, useEffect, useRef, useState } from "react";
import { Input } from "../../components/ui/input";
import { Label } from "../../components/ui/label";
import { Textarea } from "../../components/ui/textarea";
+import { readFlowsFromDatabase } from "../../controllers/API";
type InputProps = {
name: string | null;
description: string | null;
maxLength?: number;
- flows: Array<{ id: string; name: string }>;
+ flows: Array<{ id: string; name: string; description: string }>;
tabId: string;
+ invalidName: boolean;
+ setInvalidName: (invalidName: boolean) => void;
setName: (name: string) => void;
setDescription: (description: string) => void;
updateFlow: (flow: { id: string; name: string }) => void;
@@ -16,6 +19,8 @@ type InputProps = {
export const EditFlowSettings: React.FC = ({
name,
+ invalidName,
+ setInvalidName,
description,
maxLength = 50,
flows,
@@ -25,6 +30,14 @@ export const EditFlowSettings: React.FC = ({
updateFlow,
}) => {
const [isMaxLength, setIsMaxLength] = useState(false);
+ const nameLists = useRef([]);
+ useEffect(() => {
+ readFlowsFromDatabase().then((flows) => {
+ flows.forEach((flow) => {
+ nameLists.current.push(flow.name);
+ });
+ });
+ }, []);
const handleNameChange = (event: ChangeEvent) => {
const { value } = event.target;
@@ -33,11 +46,21 @@ export const EditFlowSettings: React.FC = ({
} else {
setIsMaxLength(false);
}
-
+ if (!nameLists.current.includes(value)) {
+ setInvalidName(false);
+ } else {
+ setInvalidName(true);
+ }
setName(value);
};
+ const [desc, setDesc] = useState(
+ flows.find((f) => f.id === tabId).description
+ );
+
const handleDescriptionChange = (event: ChangeEvent) => {
+ flows.find((f) => f.id === tabId).description = event.target.value;
+ setDesc(flows.find((f) => f.id === tabId).description);
setDescription(event.target.value);
};
@@ -49,9 +72,12 @@ export const EditFlowSettings: React.FC = ({
{isMaxLength && (
Character limit reached
)}
+ {invalidName && (
+ Name already in use
+ )}
= ({
/>
- Description (optional)
+
+ Description (optional)
+
+
diff --git a/src/frontend/src/components/inputComponent/index.tsx b/src/frontend/src/components/inputComponent/index.tsx
index 8da5c428e..78b06c411 100644
--- a/src/frontend/src/components/inputComponent/index.tsx
+++ b/src/frontend/src/components/inputComponent/index.tsx
@@ -1,55 +1,37 @@
-import { useContext, useEffect, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
-import { TabsContext } from "../../contexts/tabsContext";
+import { useEffect, useState } from "react";
import { InputComponentType } from "../../types/components";
-import { classNames } from "../../utils";
+import { classNames } from "../../utils/utils";
+import { Input } from "../ui/input";
export default function InputComponent({
value,
onChange,
- disableCopyPaste = false,
disabled,
password,
editNode = false,
}: InputComponentType) {
- const [myValue, setMyValue] = useState(value ?? "");
const [pwdVisible, setPwdVisible] = useState(false);
- const { setDisableCopyPaste } = useContext(TabsContext);
- const { closePopUp } = useContext(PopUpContext);
+ // Clear component state
useEffect(() => {
if (disabled) {
- setMyValue("");
onChange("");
}
}, [disabled, onChange]);
- useEffect(() => {
- setMyValue(value ?? "");
- }, [closePopUp]);
-
return (
-
-
{
- if (disableCopyPaste) setDisableCopyPaste(true);
- }}
- onBlur={() => {
- if (disableCopyPaste) setDisableCopyPaste(false);
- }}
+
+
{
- setMyValue(e.target.value);
onChange(e.target.value);
}}
/>
diff --git a/src/frontend/src/components/inputFileComponent/index.tsx b/src/frontend/src/components/inputFileComponent/index.tsx
index 7316566ae..8c9693d8c 100644
--- a/src/frontend/src/components/inputFileComponent/index.tsx
+++ b/src/frontend/src/components/inputFileComponent/index.tsx
@@ -1,9 +1,9 @@
-import { FileSearch2 } from "lucide-react";
import { useContext, useEffect, useState } from "react";
import { alertContext } from "../../contexts/alertContext";
import { TabsContext } from "../../contexts/tabsContext";
import { uploadFile } from "../../controllers/API";
import { FileComponentType } from "../../types/components";
+import IconComponent from "../genericIconComponent";
export default function InputFileComponent({
value,
@@ -18,6 +18,8 @@ export default function InputFileComponent({
const [loading, setLoading] = useState(false);
const { setErrorData } = useContext(alertContext);
const { tabId } = useContext(TabsContext);
+
+ // Clear component state
useEffect(() => {
if (disabled) {
setMyValue("");
@@ -64,12 +66,12 @@ export default function InputFileComponent({
const { file_path } = data;
console.log("File name:", file_path);
+ // sets the value that goes to the backend
+ onFileChange(file_path);
// Update the state and callback with the name of the file
// sets the value to the user
setMyValue(file.name);
onChange(file.name);
- // sets the value that goes to the backend
- onFileChange(file_path);
setLoading(false);
})
.catch(() => {
@@ -100,16 +102,16 @@ export default function InputFileComponent({
editNode
? "input-edit-node input-dialog text-muted-foreground"
: disabled
- ? "input-disable input-dialog input-primary"
- : "input-dialog input-primary text-muted-foreground"
+ ? "input-disable input-dialog primary-input"
+ : "input-dialog primary-input text-muted-foreground"
}
>
{myValue !== "" ? myValue : "No file"}
{!editNode && !loading && (
- {
if (disabled) {
- setInputList([""]);
onChange([""]);
}
- }, [disabled, onChange]);
-
- useEffect(() => {
- setInputList(value);
- }, [closePopUp]);
+ }, [disabled]);
return (
1 && editNode ? "my-1" : "",
"flex flex-col gap-3"
- }
+ )}
>
- {inputList.map((i, idx) => {
+ {value.map((i, idx) => {
return (
-
{
- setInputList((old) => {
- let newInputList = _.cloneDeep(old);
- newInputList[idx] = e.target.value;
- return newInputList;
- });
- onChange(inputList);
+ let newInputList = _.cloneDeep(value);
+ newInputList[idx] = e.target.value;
+ onChange(newInputList);
}}
/>
- {idx === inputList.length - 1 ? (
+ {idx === value.length - 1 ? (
{
- setInputList((old) => {
- let newInputList = _.cloneDeep(old);
- newInputList.push("");
- return newInputList;
- });
- onChange(inputList);
+ let newInputList = _.cloneDeep(value);
+ newInputList.push("");
+ onChange(newInputList);
}}
>
-
+
) : (
{
- setInputList((old) => {
- let newInputList = _.cloneDeep(old);
- newInputList.splice(idx, 1);
- return newInputList;
- });
- onChange(inputList);
+ let newInputList = _.cloneDeep(value);
+ newInputList.splice(idx, 1);
+ onChange(newInputList);
}}
>
-
+
)}
diff --git a/src/frontend/src/components/intComponent/index.tsx b/src/frontend/src/components/intComponent/index.tsx
index 09c342712..c43055b47 100644
--- a/src/frontend/src/components/intComponent/index.tsx
+++ b/src/frontend/src/components/intComponent/index.tsx
@@ -1,45 +1,25 @@
-import { useContext, useEffect, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
-import { TabsContext } from "../../contexts/tabsContext";
+import { useEffect } from "react";
import { FloatComponentType } from "../../types/components";
+import { Input } from "../ui/input";
export default function IntComponent({
value,
onChange,
- disableCopyPaste = false,
disabled,
editNode = false,
}: FloatComponentType) {
- const [myValue, setMyValue] = useState(value ?? "");
- const { setDisableCopyPaste } = useContext(TabsContext);
const min = 0;
- const { closePopUp } = useContext(PopUpContext);
+ // Clear component state
useEffect(() => {
if (disabled) {
- setMyValue("");
onChange("");
}
}, [disabled, onChange]);
- useEffect(() => {
- setMyValue(value);
- }, [closePopUp]);
-
return (
-
-
{
- if (disableCopyPaste) setDisableCopyPaste(true);
- }}
- onBlur={() => {
- if (disableCopyPaste) setDisableCopyPaste(false);
- }}
+
+
{
if (
event.key !== "Backspace" &&
@@ -66,15 +46,11 @@ export default function IntComponent({
e.target.value = min.toString();
}
}}
- value={myValue}
- className={
- editNode
- ? " input-edit-node "
- : " input-primary " + (disabled ? " input-disable" : "")
- }
+ value={value ?? ""}
+ className={editNode ? "input-edit-node" : ""}
+ disabled={disabled}
placeholder={editNode ? "Integer number" : "Type an integer number"}
onChange={(e) => {
- setMyValue(e.target.value);
onChange(e.target.value);
}}
/>
diff --git a/src/frontend/src/components/promptComponent/index.tsx b/src/frontend/src/components/promptComponent/index.tsx
index 22384c299..82196658f 100644
--- a/src/frontend/src/components/promptComponent/index.tsx
+++ b/src/frontend/src/components/promptComponent/index.tsx
@@ -1,12 +1,10 @@
-import { useContext, useEffect, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
+import { useEffect } from "react";
+
+import { TypeModal } from "../../constants/enums";
+import { postValidatePrompt } from "../../controllers/API";
import GenericModal from "../../modals/genericModal";
import { TextAreaComponentType } from "../../types/components";
-import { TypeModal } from "../../utils";
-
-import { ExternalLink } from "lucide-react";
-import { typesContext } from "../../contexts/typesContext";
-import { postValidatePrompt } from "../../controllers/API";
+import IconComponent from "../genericIconComponent";
export default function PromptAreaComponent({
field_name,
@@ -17,18 +15,13 @@ export default function PromptAreaComponent({
disabled,
editNode = false,
}: TextAreaComponentType) {
- const [myValue, setMyValue] = useState(value);
- const { openPopUp } = useContext(PopUpContext);
- const { reactFlowInstance } = useContext(typesContext);
useEffect(() => {
if (disabled) {
- setMyValue("");
onChange("");
}
- }, [disabled, onChange]);
+ }, [disabled]);
useEffect(() => {
- setMyValue(value);
if (value !== "" && !editNode) {
postValidatePrompt(field_name, value, nodeClass).then((apiReturn) => {
if (apiReturn.data) {
@@ -37,85 +30,43 @@ export default function PromptAreaComponent({
}
});
}
- }, [value, reactFlowInstance]);
-
- // useEffect(() => {
- // if (value !== "" && myValue !== value && reactFlowInstance) {
- // // only executed once
- // setMyValue(value);
- // postValidatePrompt(field_name, value, nodeClass)
- // .then((apiReturn) => {
- // if (apiReturn.data) {
- // setNodeClass(apiReturn.data.frontend_node);
- // // need to update reactFlowInstance to re-render the nodes.
- // reactFlowInstance.setEdges(
- // _.cloneDeep(reactFlowInstance.getEdges())
- // );
- // }
- // })
- // .catch((error) => {});
- // }
- // }, [reactFlowInstance, field_name, myValue, nodeClass, setNodeClass, value]);
+ }, []);
return (
-
-
{
- openPopUp(
- {
- setMyValue(t);
- onChange(t);
- }}
- nodeClass={nodeClass}
- setNodeClass={setNodeClass}
- />
- );
- }}
- className={
- editNode
- ? "input-edit-node input-dialog"
- : (disabled ? " input-disable text-ring " : "") +
- " input-primary text-muted-foreground "
- }
- >
- {myValue !== "" ? myValue : "Type your prompt here"}
-
-
{
- openPopUp(
- {
- setMyValue(t);
- onChange(t);
- }}
- nodeClass={nodeClass}
- setNodeClass={setNodeClass}
- />
- );
- }}
- >
+ {
+ onChange(t);
+ }}
+ nodeClass={nodeClass}
+ setNodeClass={setNodeClass}
+ >
+
+
+ {value !== "" ? value : "Type your prompt here..."}
+
{!editNode && (
-
)}
-
-
+
+
);
}
diff --git a/src/frontend/src/components/textAreaComponent/index.tsx b/src/frontend/src/components/textAreaComponent/index.tsx
index 8083b4eb7..cd598f01e 100644
--- a/src/frontend/src/components/textAreaComponent/index.tsx
+++ b/src/frontend/src/components/textAreaComponent/index.tsx
@@ -1,11 +1,9 @@
-import { useContext, useEffect, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
+import { useEffect } from "react";
+import { TypeModal } from "../../constants/enums";
import GenericModal from "../../modals/genericModal";
import { TextAreaComponentType } from "../../types/components";
-import { TypeModal } from "../../utils";
-
-import { ExternalLink } from "lucide-react";
-import { TabsContext } from "../../contexts/tabsContext";
+import IconComponent from "../genericIconComponent";
+import { Input } from "../ui/input";
export default function TextAreaComponent({
value,
@@ -13,70 +11,44 @@ export default function TextAreaComponent({
disabled,
editNode = false,
}: TextAreaComponentType) {
- const [myValue, setMyValue] = useState(value);
- const { openPopUp, closePopUp } = useContext(PopUpContext);
- const { setDisableCopyPaste } = useContext(TabsContext);
-
+ // Clear text area
useEffect(() => {
if (disabled) {
- setMyValue("");
onChange("");
}
- }, [disabled, onChange]);
-
- useEffect(() => {
- setMyValue(value);
- }, [closePopUp]);
+ }, [disabled]);
return (
-
-
-
{
- setDisableCopyPaste(true);
- }}
- onBlur={() => {
- setDisableCopyPaste(false);
- }}
- className={
- editNode
- ? " input-edit-node "
- : " input-primary " + (disabled ? " input-disable" : "")
- }
- placeholder={"Type something..."}
- onChange={(e) => {
- setMyValue(e.target.value);
- onChange(e.target.value);
- }}
- />
-
-
{
- openPopUp(
- {
- setMyValue(t);
- onChange(t);
- }}
- />
- );
+
+
{
+ onChange(e.target.value);
+ }}
+ />
+
+ {
+ onChange(t);
}}
>
{!editNode && (
-
)}
-
+
);
diff --git a/src/frontend/src/components/toggleComponent/index.tsx b/src/frontend/src/components/toggleComponent/index.tsx
index 81a2b2d8b..210c9223a 100644
--- a/src/frontend/src/components/toggleComponent/index.tsx
+++ b/src/frontend/src/components/toggleComponent/index.tsx
@@ -1,13 +1,14 @@
import { Switch } from "@headlessui/react";
import { useEffect } from "react";
import { ToggleComponentType } from "../../types/components";
-import { classNames } from "../../utils";
+import { classNames } from "../../utils/utils";
export default function ToggleComponent({
enabled,
setEnabled,
disabled,
}: ToggleComponentType) {
+ // set component state as disabled
useEffect(() => {
if (disabled) {
setEnabled(false);
diff --git a/src/frontend/src/components/toggleShadComponent/index.tsx b/src/frontend/src/components/toggleShadComponent/index.tsx
index c06d42430..95ef6d062 100644
--- a/src/frontend/src/components/toggleShadComponent/index.tsx
+++ b/src/frontend/src/components/toggleShadComponent/index.tsx
@@ -25,6 +25,7 @@ export default function ToggleShadComponent({
scaleX = 1;
scaleY = 1;
}
+
return (
,
@@ -20,7 +20,7 @@ const Checkbox = React.forwardRef<
-
+
));
diff --git a/src/frontend/src/components/ui/dialog.tsx b/src/frontend/src/components/ui/dialog.tsx
index 2ad709f48..57dda0fef 100644
--- a/src/frontend/src/components/ui/dialog.tsx
+++ b/src/frontend/src/components/ui/dialog.tsx
@@ -1,7 +1,7 @@
import * as DialogPrimitive from "@radix-ui/react-dialog";
-import { X } from "lucide-react";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
+import IconComponent from "../genericIconComponent";
const Dialog = DialogPrimitive.Root;
@@ -44,14 +44,14 @@ const DialogContent = React.forwardRef<
{children}
-
+
Close
@@ -116,10 +116,10 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
export {
Dialog,
- DialogTrigger,
DialogContent,
- DialogHeader,
- DialogFooter,
- DialogTitle,
DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
};
diff --git a/src/frontend/src/components/ui/dropdown-menu.tsx b/src/frontend/src/components/ui/dropdown-menu.tsx
index 0e5468e6e..f9a0d87d3 100644
--- a/src/frontend/src/components/ui/dropdown-menu.tsx
+++ b/src/frontend/src/components/ui/dropdown-menu.tsx
@@ -1,9 +1,9 @@
"use client";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
-import { Check, ChevronRight, Circle } from "lucide-react";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
+import IconComponent from "../genericIconComponent";
const DropdownMenu = DropdownMenuPrimitive.Root;
@@ -33,7 +33,7 @@ const DropdownMenuSubTrigger = React.forwardRef<
{...props}
>
{children}
-
+
));
DropdownMenuSubTrigger.displayName =
@@ -106,7 +106,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
>
-
+
{children}
@@ -129,7 +129,7 @@ const DropdownMenuRadioItem = React.forwardRef<
>
-
+
{children}
@@ -182,18 +182,18 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
export {
DropdownMenu,
- DropdownMenuTrigger,
- DropdownMenuContent,
- DropdownMenuItem,
DropdownMenuCheckboxItem,
- DropdownMenuRadioItem,
+ DropdownMenuContent,
+ DropdownMenuGroup,
+ DropdownMenuItem,
DropdownMenuLabel,
+ DropdownMenuPortal,
+ DropdownMenuRadioGroup,
+ DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
- DropdownMenuGroup,
- DropdownMenuPortal,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
- DropdownMenuRadioGroup,
+ DropdownMenuTrigger,
};
diff --git a/src/frontend/src/components/ui/input.tsx b/src/frontend/src/components/ui/input.tsx
index f3a8757e8..b014a57b3 100644
--- a/src/frontend/src/components/ui/input.tsx
+++ b/src/frontend/src/components/ui/input.tsx
@@ -1,5 +1,5 @@
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
export interface InputProps
extends React.InputHTMLAttributes {}
@@ -9,10 +9,7 @@ const Input = React.forwardRef(
return (
diff --git a/src/frontend/src/components/ui/label.tsx b/src/frontend/src/components/ui/label.tsx
index 57fbc9d8a..f8d45c11d 100644
--- a/src/frontend/src/components/ui/label.tsx
+++ b/src/frontend/src/components/ui/label.tsx
@@ -3,7 +3,7 @@
import * as LabelPrimitive from "@radix-ui/react-label";
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
diff --git a/src/frontend/src/components/ui/menubar.tsx b/src/frontend/src/components/ui/menubar.tsx
index 0a3362ca6..512bb6e63 100644
--- a/src/frontend/src/components/ui/menubar.tsx
+++ b/src/frontend/src/components/ui/menubar.tsx
@@ -1,10 +1,10 @@
"use client";
import * as MenubarPrimitive from "@radix-ui/react-menubar";
-import { Check, ChevronRight, Circle } from "lucide-react";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
+import IconComponent from "../genericIconComponent";
const MenubarMenu = MenubarPrimitive.Menu;
@@ -62,7 +62,7 @@ const MenubarSubTrigger = React.forwardRef<
{...props}
>
{children}
-
+
));
MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
@@ -140,7 +140,7 @@ const MenubarCheckboxItem = React.forwardRef<
>
-
+
{children}
@@ -162,7 +162,7 @@ const MenubarRadioItem = React.forwardRef<
>
-
+
{children}
@@ -218,19 +218,19 @@ MenubarShortcut.displayname = "MenubarShortcut";
export {
Menubar,
- MenubarMenu,
- MenubarTrigger,
- MenubarContent,
- MenubarItem,
- MenubarSeparator,
- MenubarLabel,
MenubarCheckboxItem,
+ MenubarContent,
+ MenubarGroup,
+ MenubarItem,
+ MenubarLabel,
+ MenubarMenu,
+ MenubarPortal,
MenubarRadioGroup,
MenubarRadioItem,
- MenubarPortal,
+ MenubarSeparator,
+ MenubarShortcut,
+ MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
- MenubarGroup,
- MenubarSub,
- MenubarShortcut,
+ MenubarTrigger,
};
diff --git a/src/frontend/src/components/ui/popover.tsx b/src/frontend/src/components/ui/popover.tsx
new file mode 100644
index 000000000..63c80bb7e
--- /dev/null
+++ b/src/frontend/src/components/ui/popover.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import * as PopoverPrimitive from "@radix-ui/react-popover";
+import * as React from "react";
+import { cn } from "../../utils/utils";
+
+const Popover = PopoverPrimitive.Root;
+
+const PopoverTrigger = PopoverPrimitive.Trigger;
+
+const PopoverContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
+
+
+
+));
+PopoverContent.displayName = PopoverPrimitive.Content.displayName;
+
+export { Popover, PopoverTrigger, PopoverContent };
diff --git a/src/frontend/src/components/ui/progress.tsx b/src/frontend/src/components/ui/progress.tsx
index a08efeb52..c2afa8a4c 100644
--- a/src/frontend/src/components/ui/progress.tsx
+++ b/src/frontend/src/components/ui/progress.tsx
@@ -2,7 +2,7 @@
import * as ProgressPrimitive from "@radix-ui/react-progress";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const Progress = React.forwardRef<
React.ElementRef,
diff --git a/src/frontend/src/components/ui/rename-label.tsx b/src/frontend/src/components/ui/rename-label.tsx
index e5fef11bf..e1cef4996 100644
--- a/src/frontend/src/components/ui/rename-label.tsx
+++ b/src/frontend/src/components/ui/rename-label.tsx
@@ -1,5 +1,5 @@
import { useEffect, useRef, useState } from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
export default function RenameLabel(props) {
const [internalState, setInternalState] = useState(false);
@@ -57,7 +57,7 @@ export default function RenameLabel(props) {
ref={inputRef}
onInput={resizeInput}
className={cn(
- "rounded-md bg-transparent px-2 outline-ring hover:outline focus:border-none focus:outline active:outline",
+ "nopan nodrag noundo nocopy rounded-md bg-transparent px-2 outline-ring hover:outline focus:border-none focus:outline active:outline",
props.className
)}
onBlur={() => {
diff --git a/src/frontend/src/components/ui/separator.tsx b/src/frontend/src/components/ui/separator.tsx
index 1fa0287d8..1fec6d2ca 100644
--- a/src/frontend/src/components/ui/separator.tsx
+++ b/src/frontend/src/components/ui/separator.tsx
@@ -2,7 +2,7 @@
import * as SeparatorPrimitive from "@radix-ui/react-separator";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const Separator = React.forwardRef<
React.ElementRef,
diff --git a/src/frontend/src/components/ui/switch.tsx b/src/frontend/src/components/ui/switch.tsx
index 8ec7c3c80..0d4bc8224 100644
--- a/src/frontend/src/components/ui/switch.tsx
+++ b/src/frontend/src/components/ui/switch.tsx
@@ -2,7 +2,7 @@
import * as SwitchPrimitives from "@radix-ui/react-switch";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const Switch = React.forwardRef<
React.ElementRef,
diff --git a/src/frontend/src/components/ui/table.tsx b/src/frontend/src/components/ui/table.tsx
index 9b7bdd8ce..eb1e3bda6 100644
--- a/src/frontend/src/components/ui/table.tsx
+++ b/src/frontend/src/components/ui/table.tsx
@@ -1,5 +1,5 @@
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const Table = React.forwardRef<
HTMLTableElement,
@@ -103,11 +103,11 @@ TableCaption.displayName = "TableCaption";
export {
Table,
- TableHeader,
TableBody,
+ TableCaption,
+ TableCell,
TableFooter,
TableHead,
+ TableHeader,
TableRow,
- TableCell,
- TableCaption,
};
diff --git a/src/frontend/src/components/ui/tabs.tsx b/src/frontend/src/components/ui/tabs.tsx
index 8c382e35e..a1f365ba6 100644
--- a/src/frontend/src/components/ui/tabs.tsx
+++ b/src/frontend/src/components/ui/tabs.tsx
@@ -2,7 +2,7 @@
import * as TabsPrimitive from "@radix-ui/react-tabs";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const Tabs = TabsPrimitive.Root;
@@ -13,7 +13,7 @@ const TabsList = React.forwardRef<
{}
@@ -8,10 +8,7 @@ const Textarea = React.forwardRef(
({ className, ...props }, ref) => {
return (
diff --git a/src/frontend/src/components/ui/tooltip.tsx b/src/frontend/src/components/ui/tooltip.tsx
index 6bb983652..8ea9a9505 100644
--- a/src/frontend/src/components/ui/tooltip.tsx
+++ b/src/frontend/src/components/ui/tooltip.tsx
@@ -2,7 +2,7 @@
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
import * as React from "react";
-import { cn } from "../../utils";
+import { cn } from "../../utils/utils";
const TooltipProvider = TooltipPrimitive.Provider;
@@ -19,7 +19,7 @@ const TooltipContent = React.forwardRef<
ref={ref}
sideOffset={sideOffset}
className={cn(
- "overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
+ "overflow-y-auto rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
className
)}
{...props}
@@ -28,4 +28,4 @@ const TooltipContent = React.forwardRef<
));
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
-export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
+export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
diff --git a/src/frontend/src/constants.tsx b/src/frontend/src/constants/constants.ts
similarity index 68%
rename from src/frontend/src/constants.tsx
rename to src/frontend/src/constants/constants.ts
index 4f8045c77..0ff77cf45 100644
--- a/src/frontend/src/constants.tsx
+++ b/src/frontend/src/constants/constants.ts
@@ -1,10 +1,61 @@
-// src/constants.tsx
+// src/constants/constants.ts
-import { MessageSquare } from "lucide-react";
-import { FlowType } from "./types/flow";
-import { TabsState } from "./types/tabs";
-import { buildInputs, buildTweaks } from "./utils";
+import { languageMap } from "../types/components";
+/**
+ * invalid characters for flow name
+ * @constant
+ */
+export const INVALID_CHARACTERS = [
+ " ",
+ ",",
+ ".",
+ ":",
+ ";",
+ "!",
+ "?",
+ "/",
+ "\\",
+ "(",
+ ")",
+ "[",
+ "]",
+ "\n",
+];
+
+/**
+ * regex to highlight the variables in the text
+ * @constant
+ */
+
+export const regexHighlight = /\{([^}]+)\}/g;
+
+export const programmingLanguages: languageMap = {
+ javascript: ".js",
+ python: ".py",
+ java: ".java",
+ c: ".c",
+ cpp: ".cpp",
+ "c++": ".cpp",
+ "c#": ".cs",
+ ruby: ".rb",
+ php: ".php",
+ swift: ".swift",
+ "objective-c": ".m",
+ kotlin: ".kt",
+ typescript: ".ts",
+ go: ".go",
+ perl: ".pl",
+ rust: ".rs",
+ scala: ".scala",
+ haskell: ".hs",
+ lua: ".lua",
+ shell: ".sh",
+ sql: ".sql",
+ html: ".html",
+ css: ".css",
+ // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
+};
/**
* Number maximum of components to scroll on tooltips
* @constant
@@ -17,6 +68,12 @@ export const MAX_LENGTH_TO_SCROLL_TOOLTIP = 200;
*/
export const MAX_WORDS_HIGHLIGHT = 79;
+/**
+ * Limit of items before show scroll on fields modal
+ * @constant
+ */
+export const limitScrollFieldsModal = 10;
+
/**
* The base text for subtitle of Export Dialog (Toolbar)
* @constant
@@ -70,8 +127,6 @@ export const CHAT_CANNOT_OPEN_DESCRIPTION = "This is not a chat flow.";
export const FLOW_NOT_BUILT_TITLE = "Flow not built";
-export const THOUGHTS_ICON = MessageSquare;
-
export const FLOW_NOT_BUILT_DESCRIPTION =
"Please build the flow before chatting.";
@@ -81,127 +136,6 @@ export const FLOW_NOT_BUILT_DESCRIPTION =
*/
export const TEXT_DIALOG_SUBTITLE = "Edit your text.";
-/**
- * Function to get the python code for the API
- * @param {string} flowId - The id of the flow
- * @returns {string} - The python code
- */
-export const getPythonApiCode = (
- flow: FlowType,
- tweak?: any[],
- tabsState?: TabsState
-): string => {
- const flowId = flow.id;
-
- // create a dictionary of node ids and the values is an empty dictionary
- // flow.data.nodes.forEach((node) => {
- // node.data.id
- // }
- const tweaks = buildTweaks(flow);
- const inputs = buildInputs(tabsState, flow.id);
- return `import requests
-from typing import Optional
-
-BASE_API_URL = "${window.location.protocol}//${
- window.location.host
- }/api/v1/process"
-FLOW_ID = "${flowId}"
-# You can tweak the flow by adding a tweaks dictionary
-# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
-TWEAKS = ${
- tweak && tweak.length > 0
- ? buildTweakObject(tweak)
- : JSON.stringify(tweaks, null, 2)
- }
-
-def run_flow(inputs: dict, flow_id: str, tweaks: Optional[dict] = None) -> dict:
- """
- Run a flow with a given message and optional tweaks.
-
- :param message: The message to send to the flow
- :param flow_id: The ID of the flow to run
- :param tweaks: Optional tweaks to customize the flow
- :return: The JSON response from the flow
- """
- api_url = f"{BASE_API_URL}/{flow_id}"
-
- payload = {"inputs": inputs}
-
- if tweaks:
- payload["tweaks"] = tweaks
-
- response = requests.post(api_url, json=payload)
- return response.json()
-
-# Setup any tweaks you want to apply to the flow
-inputs = ${inputs}
-print(run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS))`;
-};
-/**
- * Function to get the curl code for the API
- * @param {string} flowId - The id of the flow
- * @returns {string} - The curl code
- */
-export const getCurlCode = (
- flow: FlowType,
- tweak?: any[],
- tabsState?: TabsState
-): string => {
- const flowId = flow.id;
- const tweaks = buildTweaks(flow);
- const inputs = buildInputs(tabsState, flow.id);
-
- return `curl -X POST \\
- ${window.location.protocol}//${
- window.location.host
- }/api/v1/process/${flowId} \\
- -H 'Content-Type: application/json' \\
- -d '{"inputs": ${inputs}, "tweaks": ${
- tweak && tweak.length > 0
- ? buildTweakObject(tweak)
- : JSON.stringify(tweaks, null, 2)
- }}'`;
-};
-/**
- * Function to get the python code for the API
- * @param {string} flowName - The name of the flow
- * @returns {string} - The python code
- */
-export const getPythonCode = (
- flow: FlowType,
- tweak?: any[],
- tabsState?: TabsState
-): string => {
- const flowName = flow.name;
- const tweaks = buildTweaks(flow);
- const inputs = buildInputs(tabsState, flow.id);
- return `from langflow import load_flow_from_json
-TWEAKS = ${
- tweak && tweak.length > 0
- ? buildTweakObject(tweak)
- : JSON.stringify(tweaks, null, 2)
- }
-flow = load_flow_from_json("${flowName}.json", tweaks=TWEAKS)
-# Now you can use it like any chain
-inputs = ${inputs}
-flow(inputs)`;
-};
-
-function buildTweakObject(tweak) {
- tweak.forEach((el) => {
- Object.keys(el).forEach((key) => {
- for (let kp in el[key]) {
- try {
- el[key][kp] = JSON.parse(el[key][kp]);
- } catch {}
- }
- });
- });
-
- const tweakString = JSON.stringify(tweak[0], null, 2);
- return tweakString;
-}
-
/**
* The base text for subtitle of Import Dialog
* @constant
@@ -209,6 +143,12 @@ function buildTweakObject(tweak) {
export const IMPORT_DIALOG_SUBTITLE =
"Upload a JSON file or select from the available community examples.";
+/**
+ * The text that shows when a tooltip is empty
+ * @constant
+ */
+export const TOOLTIP_EMPTY = "No compatible components found.";
+
/**
* The base text for subtitle of code dialog
* @constant
@@ -557,3 +497,14 @@ export const NOUNS: string[] = [
*
*/
export const USER_PROJECTS_HEADER = "My Collection";
+
+/**
+ * URLs excluded from error retries.
+ * @constant
+ *
+ */
+export const URL_EXCLUDED_FROM_ERROR_RETRIES = [
+ "/api/v1/validate/code",
+ "/api/v1/custom_component",
+ "/api/v1/validate/prompt",
+];
diff --git a/src/frontend/src/constants/enums.ts b/src/frontend/src/constants/enums.ts
new file mode 100644
index 000000000..a7bed8fde
--- /dev/null
+++ b/src/frontend/src/constants/enums.ts
@@ -0,0 +1,8 @@
+/**
+ * enum for the different types of nodes
+ * @enum
+ */
+export enum TypeModal {
+ TEXT = 1,
+ PROMPT = 2,
+}
diff --git a/src/frontend/src/contexts/index.tsx b/src/frontend/src/contexts/index.tsx
index 70b7da07c..f143df708 100644
--- a/src/frontend/src/contexts/index.tsx
+++ b/src/frontend/src/contexts/index.tsx
@@ -5,7 +5,6 @@ import { SSEProvider } from "./SSEContext";
import { AlertProvider } from "./alertContext";
import { DarkProvider } from "./darkContext";
import { LocationProvider } from "./locationContext";
-import PopUpProvider from "./popUpContext";
import { TabsProvider } from "./tabsContext";
import { TypesProvider } from "./typesContext";
import { UndoRedoProvider } from "./undoRedoContext";
@@ -22,9 +21,7 @@ export default function ContextWrapper({ children }: { children: ReactNode }) {
-
- {children}
-
+ {children}
diff --git a/src/frontend/src/contexts/popUpContext.tsx b/src/frontend/src/contexts/popUpContext.tsx
deleted file mode 100644
index 8da50278c..000000000
--- a/src/frontend/src/contexts/popUpContext.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React, { createContext, useState } from "react";
-
-// context to set JSX element on the DOM
-export const PopUpContext = createContext({
- openPopUp: (popUpElement: JSX.Element) => {},
- closePopUp: () => {},
- setCloseEdit: (value: string) => {},
- closeEdit: "",
-});
-
-interface PopUpProviderProps {
- children: React.ReactNode;
-}
-
-const PopUpProvider = ({ children }: PopUpProviderProps) => {
- const [popUpElements, setPopUpElements] = useState([]);
-
- const openPopUp = (element: JSX.Element) => {
- setPopUpElements((prevPopUps) => [element, ...prevPopUps]);
- };
-
- const closePopUp = () => {
- setPopUpElements((prevPopUps) => prevPopUps.slice(1));
- };
-
- const [closeEdit, setCloseEdit] = useState("");
-
- return (
-
- {children}
- {popUpElements[0]}
-
- );
-};
-
-export default PopUpProvider;
diff --git a/src/frontend/src/contexts/tabsContext.tsx b/src/frontend/src/contexts/tabsContext.tsx
index 479131db2..5ea8c11c0 100644
--- a/src/frontend/src/contexts/tabsContext.tsx
+++ b/src/frontend/src/contexts/tabsContext.tsx
@@ -21,11 +21,11 @@ import { APIClassType, APITemplateType } from "../types/api";
import { FlowType, NodeType } from "../types/flow";
import { TabsContextType, TabsState } from "../types/tabs";
import {
- getRandomDescription,
- getRandomName,
+ addVersionToDuplicates,
updateIds,
updateTemplate,
-} from "../utils";
+} from "../utils/reactflowUtils";
+import { getRandomDescription, getRandomName } from "../utils/utils";
import { alertContext } from "./alertContext";
import { typesContext } from "./typesContext";
@@ -44,10 +44,10 @@ const TabsContextInitialValue: TabsContextType = {
downloadFlows: () => {},
uploadFlows: () => {},
uploadFlow: () => {},
+ isBuilt: false,
+ setIsBuilt: (state: boolean) => {},
hardReset: () => {},
saveFlow: async (flow: FlowType) => {},
- disableCopyPaste: false,
- setDisableCopyPaste: (state: boolean) => {},
lastCopiedSelection: null,
setLastCopiedSelection: (selection: any) => {},
tabsState: {},
@@ -106,53 +106,6 @@ export function TabsProvider({ children }: { children: ReactNode }) {
}
}
- // function loadCookie(cookie: string) {
- // if (cookie && Object.keys(templates).length > 0) {
- // let cookieObject: LangflowState = JSON.parse(cookie);
- // try {
- // cookieObject.flows.forEach((flow) => {
- // if (!flow.data) {
- // return;
- // }
- // flow.data.edges.forEach((edge) => {
- // edge.className = "";
- // edge.style = { stroke: "#555555" };
- // });
-
- // flow.data.nodes.forEach((node) => {
- // const template = templates[node.data.type];
- // if (!template) {
- // setErrorData({ title: `Unknown node type: ${node.data.type}` });
- // return;
- // }
- // if (Object.keys(template["template"]).length > 0) {
- // node.data.node.base_classes = template["base_classes"];
- // flow.data.edges.forEach((edge) => {
- // if (edge.source === node.id) {
- // edge.sourceHandle = edge.sourceHandle
- // .split("|")
- // .slice(0, 2)
- // .concat(template["base_classes"])
- // .join("|");
- // }
- // });
- // node.data.node.description = template["description"];
- // node.data.node.template = updateTemplate(
- // template["template"] as unknown as APITemplateType,
- // node.data.node.template as APITemplateType
- // );
- // }
- // });
- // });
- // setTabIndex(cookieObject.tabIndex);
- // setFlows(cookieObject.flows);
- // setId(cookieObject.id);
- // } catch (e) {
- // console.log(e);
- // }
- // }
- // }
-
function refreshFlows() {
getTabsDataFromDB().then((DbData) => {
if (DbData && Object.keys(templates).length > 0) {
@@ -501,6 +454,10 @@ export function TabsProvider({ children }: { children: ReactNode }) {
processFlowEdges(newFlow);
processFlowNodes(newFlow);
+ const flowName = addVersionToDuplicates(newFlow, flows);
+
+ newFlow.name = flowName;
+
try {
const { id } = await saveFlowToDatabase(newFlow);
// Change the id to the new id.
@@ -636,16 +593,16 @@ export function TabsProvider({ children }: { children: ReactNode }) {
}
}
- const [disableCopyPaste, setDisableCopyPaste] = useState(false);
+ const [isBuilt, setIsBuilt] = useState(false);
return (
{
- undo: () => void;
- redo: () => void;
- takeSnapshot: () => void;
- canUndo: boolean;
- canRedo: boolean;
-};
-
type HistoryItem = {
nodes: Node[];
edges: Edge[];
@@ -156,17 +149,21 @@ export function UndoRedoProvider({ children }) {
}
const keyDownHandler = (event: KeyboardEvent) => {
- if (
- event.key === "z" &&
- (event.ctrlKey || event.metaKey) &&
- event.shiftKey
- ) {
- redo();
- } else if (event.key === "y" && (event.ctrlKey || event.metaKey)) {
- event.preventDefault(); // prevent the default action
- redo();
- } else if (event.key === "z" && (event.ctrlKey || event.metaKey)) {
- undo();
+ if (!isWrappedWithClass(event, "noundo")) {
+ if (
+ event.key === "z" &&
+ (event.ctrlKey || event.metaKey) &&
+ event.shiftKey
+ ) {
+ event.preventDefault();
+ redo();
+ } else if (event.key === "y" && (event.ctrlKey || event.metaKey)) {
+ event.preventDefault(); // prevent the default action
+ redo();
+ } else if (event.key === "z" && (event.ctrlKey || event.metaKey)) {
+ event.preventDefault();
+ undo();
+ }
}
};
diff --git a/src/frontend/src/controllers/API/api.tsx b/src/frontend/src/controllers/API/api.tsx
new file mode 100644
index 000000000..9e716ebb7
--- /dev/null
+++ b/src/frontend/src/controllers/API/api.tsx
@@ -0,0 +1,62 @@
+import axios, { AxiosError, AxiosInstance } from "axios";
+import { useContext, useEffect, useRef } from "react";
+import { URL_EXCLUDED_FROM_ERROR_RETRIES } from "../../constants/constants";
+import { alertContext } from "../../contexts/alertContext";
+
+// Create a new Axios instance
+const api: AxiosInstance = axios.create({
+ baseURL: "",
+});
+
+function ApiInterceptor() {
+ const retryCounts = useRef([]);
+ const { setErrorData } = useContext(alertContext);
+
+ useEffect(() => {
+ const interceptor = api.interceptors.response.use(
+ (response) => response,
+ async (error: AxiosError) => {
+ if (URL_EXCLUDED_FROM_ERROR_RETRIES.includes(error.config?.url)) {
+ return Promise.reject(error);
+ }
+ let retryCount = 0;
+
+ while (retryCount < 4) {
+ await sleep(5000); // Sleep for 5 seconds
+ retryCount++;
+ try {
+ const response = await axios.request(error.config);
+ return response;
+ } catch (error) {
+ if (retryCount === 3) {
+ setErrorData({
+ title: "There was an error on web connection, please: ",
+ list: [
+ "Refresh the page",
+ "Use a new flow tab",
+ "Check if the backend is up",
+ "Endpoint: " + error.config?.url,
+ ],
+ });
+ return Promise.reject(error);
+ }
+ }
+ }
+ }
+ );
+
+ return () => {
+ // Clean up the interceptor when the component unmounts
+ api.interceptors.response.eject(interceptor);
+ };
+ }, [retryCounts]);
+
+ return null;
+}
+
+// Function to sleep for a given duration in milliseconds
+function sleep(ms) {
+ return new Promise((resolve) => setTimeout(resolve, ms));
+}
+
+export { ApiInterceptor, api };
diff --git a/src/frontend/src/controllers/API/index.ts b/src/frontend/src/controllers/API/index.ts
index 7668fea0a..9491f8973 100644
--- a/src/frontend/src/controllers/API/index.ts
+++ b/src/frontend/src/controllers/API/index.ts
@@ -1,5 +1,6 @@
-import axios, { AxiosResponse } from "axios";
+import { AxiosResponse } from "axios";
import { ReactFlowJsonObject } from "reactflow";
+import { api } from "../../controllers/API/api";
import { APIObjectType, sendAllProps } from "../../types/api/index";
import { FlowStyleType, FlowType } from "../../types/flow";
import {
@@ -17,16 +18,14 @@ import {
* @returns {Promise>} A promise that resolves to an AxiosResponse containing all the objects.
*/
export async function getAll(): Promise> {
- return await axios.get(`/api/v1/all`);
+ return await api.get(`/api/v1/all`);
}
const GITHUB_API_URL = "https://api.github.com";
export async function getRepoStars(owner, repo) {
try {
- const response = await axios.get(
- `${GITHUB_API_URL}/repos/${owner}/${repo}`
- );
+ const response = await api.get(`${GITHUB_API_URL}/repos/${owner}/${repo}`);
return response.data.stargazers_count;
} catch (error) {
console.error("Error fetching repository data:", error);
@@ -41,13 +40,13 @@ export async function getRepoStars(owner, repo) {
* @returns {AxiosResponse} The API response.
*/
export async function sendAll(data: sendAllProps) {
- return await axios.post(`/api/v1/predict`, data);
+ return await api.post(`/api/v1/predict`, data);
}
export async function postValidateCode(
code: string
): Promise> {
- return await axios.post("/api/v1/validate/code", { code });
+ return await api.post("/api/v1/validate/code", { code });
}
/**
@@ -62,7 +61,7 @@ export async function postValidatePrompt(
template: string,
frontend_node: APIClassType
): Promise> {
- return await axios.post("/api/v1/validate/prompt", {
+ return await api.post("/api/v1/validate/prompt", {
name: name,
template: template,
frontend_node: frontend_node,
@@ -77,14 +76,14 @@ export async function postValidatePrompt(
export async function getExamples(): Promise {
const url =
"https://api.github.com/repos/logspace-ai/langflow_examples/contents/examples?ref=main";
- const response = await axios.get(url);
+ const response = await api.get(url);
const jsonFiles = response.data.filter((file: any) => {
return file.name.endsWith(".json");
});
const contentsPromises = jsonFiles.map(async (file: any) => {
- const contentResponse = await axios.get(file.download_url);
+ const contentResponse = await api.get(file.download_url);
return contentResponse.data;
});
@@ -106,11 +105,12 @@ export async function saveFlowToDatabase(newFlow: {
style?: FlowStyleType;
}): Promise {
try {
- const response = await axios.post("/api/v1/flows/", {
+ const response = await api.post("/api/v1/flows/", {
name: newFlow.name,
data: newFlow.data,
description: newFlow.description,
});
+
if (response.status !== 201) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -131,7 +131,7 @@ export async function updateFlowInDatabase(
updatedFlow: FlowType
): Promise {
try {
- const response = await axios.patch(`/api/v1/flows/${updatedFlow.id}`, {
+ const response = await api.patch(`/api/v1/flows/${updatedFlow.id}`, {
name: updatedFlow.name,
data: updatedFlow.data,
description: updatedFlow.description,
@@ -155,7 +155,7 @@ export async function updateFlowInDatabase(
*/
export async function readFlowsFromDatabase() {
try {
- const response = await axios.get("/api/v1/flows/");
+ const response = await api.get("/api/v1/flows/");
if (response.status !== 200) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -168,7 +168,7 @@ export async function readFlowsFromDatabase() {
export async function downloadFlowsFromDatabase() {
try {
- const response = await axios.get("/api/v1/flows/download/");
+ const response = await api.get("/api/v1/flows/download/");
if (response.status !== 200) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -181,7 +181,7 @@ export async function downloadFlowsFromDatabase() {
export async function uploadFlowsToDatabase(flows) {
try {
- const response = await axios.post(`/api/v1/flows/upload/`, flows);
+ const response = await api.post(`/api/v1/flows/upload/`, flows);
if (response.status !== 201) {
throw new Error(`HTTP error! status: ${response.status}`);
@@ -202,7 +202,7 @@ export async function uploadFlowsToDatabase(flows) {
*/
export async function deleteFlowFromDatabase(flowId: string) {
try {
- const response = await axios.delete(`/api/v1/flows/${flowId}`);
+ const response = await api.delete(`/api/v1/flows/${flowId}`);
if (response.status !== 200) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -222,7 +222,7 @@ export async function deleteFlowFromDatabase(flowId: string) {
*/
export async function getFlowFromDatabase(flowId: number) {
try {
- const response = await axios.get(`/api/v1/flows/${flowId}`);
+ const response = await api.get(`/api/v1/flows/${flowId}`);
if (response.status !== 200) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -241,7 +241,7 @@ export async function getFlowFromDatabase(flowId: number) {
*/
export async function getFlowStylesFromDatabase() {
try {
- const response = await axios.get("/api/v1/flow_styles/");
+ const response = await api.get("/api/v1/flow_styles/");
if (response.status !== 200) {
throw new Error(`HTTP error! status: ${response.status}`);
}
@@ -261,7 +261,7 @@ export async function getFlowStylesFromDatabase() {
*/
export async function saveFlowStyleToDatabase(flowStyle: FlowStyleType) {
try {
- const response = await axios.post("/api/v1/flow_styles/", flowStyle, {
+ const response = await api.post("/api/v1/flow_styles/", flowStyle, {
headers: {
accept: "application/json",
"Content-Type": "application/json",
@@ -284,7 +284,7 @@ export async function saveFlowStyleToDatabase(flowStyle: FlowStyleType) {
* @returns {Promise>} A promise that resolves to an AxiosResponse containing the version information.
*/
export async function getVersion() {
- const respnose = await axios.get("/api/v1/version");
+ const respnose = await api.get("/api/v1/version");
return respnose.data;
}
@@ -294,7 +294,7 @@ export async function getVersion() {
* @returns {Promise>} A promise that resolves to an AxiosResponse containing the health status.
*/
export async function getHealth() {
- return await axios.get("/health"); // Health is the only endpoint that doesn't require /api/v1
+ return await api.get("/health"); // Health is the only endpoint that doesn't require /api/v1
}
/**
@@ -306,7 +306,7 @@ export async function getHealth() {
export async function getBuildStatus(
flowId: string
): Promise {
- return await axios.get(`/api/v1/build/${flowId}/status`);
+ return await api.get(`/api/v1/build/${flowId}/status`);
}
//docs for postbuildinit
@@ -319,7 +319,7 @@ export async function getBuildStatus(
export async function postBuildInit(
flow: FlowType
): Promise> {
- return await axios.post(`/api/v1/build/init/${flow.id}`, flow);
+ return await api.post(`/api/v1/build/init/${flow.id}`, flow);
}
// fetch(`/upload/${id}`, {
@@ -337,5 +337,12 @@ export async function uploadFile(
): Promise> {
const formData = new FormData();
formData.append("file", file);
- return await axios.post(`/api/v1/upload/${id}`, formData);
+ return await api.post(`/api/v1/upload/${id}`, formData);
+}
+
+export async function postCustomComponent(
+ code: string,
+ apiClass: APIClassType
+): Promise> {
+ return await api.post(`/api/v1/custom_component`, { code });
}
diff --git a/src/frontend/src/icons/Airbyte/Airbyte.jsx b/src/frontend/src/icons/Airbyte/Airbyte.jsx
new file mode 100644
index 000000000..a4d660434
--- /dev/null
+++ b/src/frontend/src/icons/Airbyte/Airbyte.jsx
@@ -0,0 +1,23 @@
+const SvgAirbyte = (props) => (
+
+
+
+);
+export default SvgAirbyte;
diff --git a/src/frontend/src/icons/Airbyte/index.tsx b/src/frontend/src/icons/Airbyte/index.tsx
index 6fb8daf24..30f68bf7d 100644
--- a/src/frontend/src/icons/Airbyte/index.tsx
+++ b/src/frontend/src/icons/Airbyte/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as AirbyteSVG } from "./airbyte.svg";
+import SvgAirbyte from "./Airbyte";
export const AirbyteIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Anthropic/Anthropic.jsx b/src/frontend/src/icons/Anthropic/Anthropic.jsx
new file mode 100644
index 000000000..c5615c062
--- /dev/null
+++ b/src/frontend/src/icons/Anthropic/Anthropic.jsx
@@ -0,0 +1,17 @@
+const SvgAnthropic = (props) => (
+
+
+
+);
+export default SvgAnthropic;
diff --git a/src/frontend/src/icons/Anthropic/AnthropicBox.jsx b/src/frontend/src/icons/Anthropic/AnthropicBox.jsx
new file mode 100644
index 000000000..223164ee0
--- /dev/null
+++ b/src/frontend/src/icons/Anthropic/AnthropicBox.jsx
@@ -0,0 +1,18 @@
+const SvgAnthropicBox = (props) => (
+
+
+
+
+
+
+);
+export default SvgAnthropicBox;
diff --git a/src/frontend/src/icons/Anthropic/index.tsx b/src/frontend/src/icons/Anthropic/index.tsx
index 4cdf8f910..9dd920c64 100644
--- a/src/frontend/src/icons/Anthropic/index.tsx
+++ b/src/frontend/src/icons/Anthropic/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as AnthropicSVG } from "./anthropic_box.svg";
+import SvgAnthropicBox from "./AnthropicBox";
export const AnthropicIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/AzLogo/AzLogo.jsx b/src/frontend/src/icons/AzLogo/AzLogo.jsx
new file mode 100644
index 000000000..0aaa35014
--- /dev/null
+++ b/src/frontend/src/icons/AzLogo/AzLogo.jsx
@@ -0,0 +1,17 @@
+const SvgAzLogo = (props) => (
+
+
+
+);
+export default SvgAzLogo;
diff --git a/src/frontend/src/icons/AzLogo/index.tsx b/src/frontend/src/icons/AzLogo/index.tsx
index 96a8a058a..4fa00c204 100644
--- a/src/frontend/src/icons/AzLogo/index.tsx
+++ b/src/frontend/src/icons/AzLogo/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as AzSVG } from "./az_logo.svg";
+import SvgAzLogo from "./AzLogo";
export const AzIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/Bing/Bing.jsx b/src/frontend/src/icons/Bing/Bing.jsx
new file mode 100644
index 000000000..bf40f0dda
--- /dev/null
+++ b/src/frontend/src/icons/Bing/Bing.jsx
@@ -0,0 +1,94 @@
+const SvgBing = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgBing;
diff --git a/src/frontend/src/icons/Bing/index.tsx b/src/frontend/src/icons/Bing/index.tsx
index abaf31be4..8e030ca88 100644
--- a/src/frontend/src/icons/Bing/index.tsx
+++ b/src/frontend/src/icons/Bing/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as BingSVG } from "./bing.svg";
+import SvgBing from "./Bing";
export const BingIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/ChromaIcon/Chroma.jsx b/src/frontend/src/icons/ChromaIcon/Chroma.jsx
new file mode 100644
index 000000000..2aa0660b3
--- /dev/null
+++ b/src/frontend/src/icons/ChromaIcon/Chroma.jsx
@@ -0,0 +1,22 @@
+const SvgChroma = (props) => (
+
+
+
+
+
+
+);
+export default SvgChroma;
diff --git a/src/frontend/src/icons/ChromaIcon/index.tsx b/src/frontend/src/icons/ChromaIcon/index.tsx
index afcb868a8..657d479e6 100644
--- a/src/frontend/src/icons/ChromaIcon/index.tsx
+++ b/src/frontend/src/icons/ChromaIcon/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as ChromaSVG } from "./chroma.svg";
+import SvgChroma from "./Chroma";
export const ChromaIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Cohere/Cohere.jsx b/src/frontend/src/icons/Cohere/Cohere.jsx
new file mode 100644
index 000000000..6b78b2b13
--- /dev/null
+++ b/src/frontend/src/icons/Cohere/Cohere.jsx
@@ -0,0 +1,52 @@
+const SvgCohere = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgCohere;
diff --git a/src/frontend/src/icons/Cohere/index.tsx b/src/frontend/src/icons/Cohere/index.tsx
index bcb15dd24..58b53b097 100644
--- a/src/frontend/src/icons/Cohere/index.tsx
+++ b/src/frontend/src/icons/Cohere/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as CohereSVG } from "./cohere.svg";
+import SvgCohere from "./Cohere";
export const CohereIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Evernote/EvernoteIcon.jsx b/src/frontend/src/icons/Evernote/EvernoteIcon.jsx
new file mode 100644
index 000000000..e3feab995
--- /dev/null
+++ b/src/frontend/src/icons/Evernote/EvernoteIcon.jsx
@@ -0,0 +1,13 @@
+const SvgEvernoteIcon = (props) => (
+
+
+
+);
+export default SvgEvernoteIcon;
diff --git a/src/frontend/src/icons/Evernote/index.tsx b/src/frontend/src/icons/Evernote/index.tsx
index 685d9da13..b2460d7e7 100644
--- a/src/frontend/src/icons/Evernote/index.tsx
+++ b/src/frontend/src/icons/Evernote/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as EvernoteSVG } from "./evernote-icon.svg";
+import SvgEvernoteIcon from "./EvernoteIcon";
export const EvernoteIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/FacebookMessenger/FacebookMessengerLogo2020.jsx b/src/frontend/src/icons/FacebookMessenger/FacebookMessengerLogo2020.jsx
new file mode 100644
index 000000000..131f11cc0
--- /dev/null
+++ b/src/frontend/src/icons/FacebookMessenger/FacebookMessengerLogo2020.jsx
@@ -0,0 +1,52 @@
+const SvgFacebookMessengerLogo2020 = (props) => (
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgFacebookMessengerLogo2020;
diff --git a/src/frontend/src/icons/FacebookMessenger/index.tsx b/src/frontend/src/icons/FacebookMessenger/index.tsx
index 4450570aa..621e5b766 100644
--- a/src/frontend/src/icons/FacebookMessenger/index.tsx
+++ b/src/frontend/src/icons/FacebookMessenger/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as FacebookMessengerSVG } from "./Facebook_Messenger_logo_2020.svg";
+import SvgFacebookMessengerLogo2020 from "./FacebookMessengerLogo2020";
export const FBIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/GitBook/GitbookSvgrepoCom.jsx b/src/frontend/src/icons/GitBook/GitbookSvgrepoCom.jsx
new file mode 100644
index 000000000..151f1b552
--- /dev/null
+++ b/src/frontend/src/icons/GitBook/GitbookSvgrepoCom.jsx
@@ -0,0 +1,12 @@
+const SvgGitbookSvgrepoCom = (props) => (
+
+
+
+);
+export default SvgGitbookSvgrepoCom;
diff --git a/src/frontend/src/icons/GitBook/index.tsx b/src/frontend/src/icons/GitBook/index.tsx
index 0e312a8e1..a9ba12cb0 100644
--- a/src/frontend/src/icons/GitBook/index.tsx
+++ b/src/frontend/src/icons/GitBook/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as GitBookSVG } from "./gitbook-svgrepo-com.svg";
+import SvgGitbookSvgrepoCom from "./GitbookSvgrepoCom";
export const GitBookIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Google/Google.jsx b/src/frontend/src/icons/Google/Google.jsx
new file mode 100644
index 000000000..688796629
--- /dev/null
+++ b/src/frontend/src/icons/Google/Google.jsx
@@ -0,0 +1,28 @@
+const SvgGoogle = (props) => (
+
+
+
+
+
+
+);
+export default SvgGoogle;
diff --git a/src/frontend/src/icons/Google/index.tsx b/src/frontend/src/icons/Google/index.tsx
index 5159ba23b..89bd546ef 100644
--- a/src/frontend/src/icons/Google/index.tsx
+++ b/src/frontend/src/icons/Google/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as GoogleSVG } from "./google.svg";
+import SvgGoogle from "./Google";
export const GoogleIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/GradientSparkles/index.tsx b/src/frontend/src/icons/GradientSparkles/index.tsx
new file mode 100644
index 000000000..b8f3534d5
--- /dev/null
+++ b/src/frontend/src/icons/GradientSparkles/index.tsx
@@ -0,0 +1,22 @@
+import { Infinity } from "lucide-react";
+import { forwardRef } from "react";
+
+const GradientSparkles = forwardRef>(
+ (props, ref) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ >
+ );
+ }
+);
+
+export default GradientSparkles;
diff --git a/src/frontend/src/icons/HuggingFace/HfLogo.jsx b/src/frontend/src/icons/HuggingFace/HfLogo.jsx
new file mode 100644
index 000000000..eab4c7e54
--- /dev/null
+++ b/src/frontend/src/icons/HuggingFace/HfLogo.jsx
@@ -0,0 +1,42 @@
+const SvgHfLogo = (props) => (
+
+
+
+
+
+
+
+
+);
+export default SvgHfLogo;
diff --git a/src/frontend/src/icons/HuggingFace/index.tsx b/src/frontend/src/icons/HuggingFace/index.tsx
index 36599e0f6..3f7ccdeca 100644
--- a/src/frontend/src/icons/HuggingFace/index.tsx
+++ b/src/frontend/src/icons/HuggingFace/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as HugginFaceSVG } from "./hf-logo.svg";
+import SvgHfLogo from "./HfLogo";
export const HuggingFaceIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/IFixIt/IfixitSeeklogoCom.jsx b/src/frontend/src/icons/IFixIt/IfixitSeeklogoCom.jsx
new file mode 100644
index 000000000..f20ac6062
--- /dev/null
+++ b/src/frontend/src/icons/IFixIt/IfixitSeeklogoCom.jsx
@@ -0,0 +1,15 @@
+const SvgIfixitSeeklogocom = (props) => (
+
+
+
+);
+export default SvgIfixitSeeklogocom;
diff --git a/src/frontend/src/icons/IFixIt/index.tsx b/src/frontend/src/icons/IFixIt/index.tsx
index 9124266e4..7d94a4fcd 100644
--- a/src/frontend/src/icons/IFixIt/index.tsx
+++ b/src/frontend/src/icons/IFixIt/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as IFixItSVG } from "./ifixit-seeklogo.com.svg";
+import SvgIfixitSeeklogocom from "./IfixitSeeklogoCom";
export const IFixIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/Meta/MetaIcon.jsx b/src/frontend/src/icons/Meta/MetaIcon.jsx
new file mode 100644
index 000000000..95f49089d
--- /dev/null
+++ b/src/frontend/src/icons/Meta/MetaIcon.jsx
@@ -0,0 +1,58 @@
+const SvgMetaIcon = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgMetaIcon;
diff --git a/src/frontend/src/icons/Meta/index.tsx b/src/frontend/src/icons/Meta/index.tsx
index 0aabeea74..0882b673d 100644
--- a/src/frontend/src/icons/Meta/index.tsx
+++ b/src/frontend/src/icons/Meta/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as MetaSVG } from "./meta-icon.svg";
+import SvgMetaIcon from "./MetaIcon";
export const MetaIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/Midjorney/MidjourneyEmblem.jsx b/src/frontend/src/icons/Midjorney/MidjourneyEmblem.jsx
new file mode 100644
index 000000000..f42caaecc
--- /dev/null
+++ b/src/frontend/src/icons/Midjorney/MidjourneyEmblem.jsx
@@ -0,0 +1,13 @@
+const SvgMidjourneyEmblem = (props) => (
+
+
+
+
+);
+export default SvgMidjourneyEmblem;
diff --git a/src/frontend/src/icons/Midjorney/index.tsx b/src/frontend/src/icons/Midjorney/index.tsx
index fc2daacb8..f691abeb8 100644
--- a/src/frontend/src/icons/Midjorney/index.tsx
+++ b/src/frontend/src/icons/Midjorney/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as MidjourneySVG } from "./Midjourney_Emblem.svg";
+import SvgMidjourneyEmblem from "./MidjourneyEmblem";
export const MidjourneyIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/MongoDB/MongodbIcon.jsx b/src/frontend/src/icons/MongoDB/MongodbIcon.jsx
new file mode 100644
index 000000000..99cdf326b
--- /dev/null
+++ b/src/frontend/src/icons/MongoDB/MongodbIcon.jsx
@@ -0,0 +1,23 @@
+const SvgMongodbIcon = (props) => (
+
+
+
+
+
+);
+export default SvgMongodbIcon;
diff --git a/src/frontend/src/icons/MongoDB/index.tsx b/src/frontend/src/icons/MongoDB/index.tsx
index aa27955c1..d39169c89 100644
--- a/src/frontend/src/icons/MongoDB/index.tsx
+++ b/src/frontend/src/icons/MongoDB/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as MongoDBSVG } from "./mongodb-icon.svg";
+import SvgMongodbIcon from "./MongodbIcon";
export const MongoDBIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Notion/NotionLogo.jsx b/src/frontend/src/icons/Notion/NotionLogo.jsx
new file mode 100644
index 000000000..e0ac3e68c
--- /dev/null
+++ b/src/frontend/src/icons/Notion/NotionLogo.jsx
@@ -0,0 +1,22 @@
+const SvgNotionLogo = (props) => (
+
+
+
+
+);
+export default SvgNotionLogo;
diff --git a/src/frontend/src/icons/Notion/index.tsx b/src/frontend/src/icons/Notion/index.tsx
index 265a5c153..cf3e3f48b 100644
--- a/src/frontend/src/icons/Notion/index.tsx
+++ b/src/frontend/src/icons/Notion/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as NotionSVG } from "./Notion-logo.svg";
+import SvgNotionLogo from "./NotionLogo";
export const NotionIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/OpenAi/OpenAi.jsx b/src/frontend/src/icons/OpenAi/OpenAi.jsx
new file mode 100644
index 000000000..8a69b7d58
--- /dev/null
+++ b/src/frontend/src/icons/OpenAi/OpenAi.jsx
@@ -0,0 +1,22 @@
+const SvgOpenAi = (props) => (
+
+
+
+
+);
+export default SvgOpenAi;
diff --git a/src/frontend/src/icons/OpenAi/index.tsx b/src/frontend/src/icons/OpenAi/index.tsx
index 940f4f908..a1b7545d4 100644
--- a/src/frontend/src/icons/OpenAi/index.tsx
+++ b/src/frontend/src/icons/OpenAi/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as OpenAiSVG } from "./openAI.svg";
+import SvgOpenAi from "./OpenAi";
export const OpenAiIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Pinecone/PineconeLogo.jsx b/src/frontend/src/icons/Pinecone/PineconeLogo.jsx
new file mode 100644
index 000000000..033912309
--- /dev/null
+++ b/src/frontend/src/icons/Pinecone/PineconeLogo.jsx
@@ -0,0 +1,133 @@
+const SvgPineconeLogo = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgPineconeLogo;
diff --git a/src/frontend/src/icons/Pinecone/index.tsx b/src/frontend/src/icons/Pinecone/index.tsx
index 3e0b9123e..972f3da69 100644
--- a/src/frontend/src/icons/Pinecone/index.tsx
+++ b/src/frontend/src/icons/Pinecone/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as PineconeSVG } from "./pinecone_logo.svg";
+import SvgPineconeLogo from "./PineconeLogo";
export const PineconeIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/PowerPoint/PowerPoint.jsx b/src/frontend/src/icons/PowerPoint/PowerPoint.jsx
new file mode 100644
index 000000000..21c0cc5bc
--- /dev/null
+++ b/src/frontend/src/icons/PowerPoint/PowerPoint.jsx
@@ -0,0 +1,76 @@
+const SvgPowerPoint = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgPowerPoint;
diff --git a/src/frontend/src/icons/QDrant/QDrant.jsx b/src/frontend/src/icons/QDrant/QDrant.jsx
new file mode 100644
index 000000000..0400bca7e
--- /dev/null
+++ b/src/frontend/src/icons/QDrant/QDrant.jsx
@@ -0,0 +1,63 @@
+const SvgQDrant = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgQDrant;
diff --git a/src/frontend/src/icons/QDrant/index.tsx b/src/frontend/src/icons/QDrant/index.tsx
index 5bc03e070..48fde5ad4 100644
--- a/src/frontend/src/icons/QDrant/index.tsx
+++ b/src/frontend/src/icons/QDrant/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as QDrantSVG } from "./QDrant.svg";
+import SvgQDrant from "./QDrant";
export const QDrantIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/ReadTheDocs/ReadthedocsioIcon.jsx b/src/frontend/src/icons/ReadTheDocs/ReadthedocsioIcon.jsx
new file mode 100644
index 000000000..5c55789c9
--- /dev/null
+++ b/src/frontend/src/icons/ReadTheDocs/ReadthedocsioIcon.jsx
@@ -0,0 +1,9 @@
+const SvgReadthedocsioIcon = (props) => (
+
+
+
+);
+export default SvgReadthedocsioIcon;
diff --git a/src/frontend/src/icons/ReadTheDocs/index.tsx b/src/frontend/src/icons/ReadTheDocs/index.tsx
index 87a327912..bb9860986 100644
--- a/src/frontend/src/icons/ReadTheDocs/index.tsx
+++ b/src/frontend/src/icons/ReadTheDocs/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as ReadTheDocsSVG } from "./readthedocsio-icon.svg";
+import SvgReadthedocsioIcon from "./ReadthedocsioIcon";
export const ReadTheDocsIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Searx/SearxLogo.jsx b/src/frontend/src/icons/Searx/SearxLogo.jsx
new file mode 100644
index 000000000..c3f889003
--- /dev/null
+++ b/src/frontend/src/icons/Searx/SearxLogo.jsx
@@ -0,0 +1,151 @@
+const SvgSearxLogo = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgSearxLogo;
diff --git a/src/frontend/src/icons/Searx/index.tsx b/src/frontend/src/icons/Searx/index.tsx
index c1196c68a..f78252072 100644
--- a/src/frontend/src/icons/Searx/index.tsx
+++ b/src/frontend/src/icons/Searx/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as SearxSVG } from "./Searx_logo.svg";
+import SvgSearxLogo from "./SearxLogo";
export const SearxIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/Serper/Serper.jsx b/src/frontend/src/icons/Serper/Serper.jsx
new file mode 100644
index 000000000..ff0bb9e04
--- /dev/null
+++ b/src/frontend/src/icons/Serper/Serper.jsx
@@ -0,0 +1,17 @@
+const SvgSerper = (props) => (
+
+
+
+);
+export default SvgSerper;
diff --git a/src/frontend/src/icons/Serper/index.tsx b/src/frontend/src/icons/Serper/index.tsx
index 77ea58077..35abc4b44 100644
--- a/src/frontend/src/icons/Serper/index.tsx
+++ b/src/frontend/src/icons/Serper/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as SerperSVG } from "./serper.svg";
+import SvgSerper from "./Serper";
export const SerperIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Slack/SlackIcon.jsx b/src/frontend/src/icons/Slack/SlackIcon.jsx
new file mode 100644
index 000000000..11f7bd9cd
--- /dev/null
+++ b/src/frontend/src/icons/Slack/SlackIcon.jsx
@@ -0,0 +1,29 @@
+const SvgSlackIcon = (props) => (
+
+
+
+
+
+
+
+
+);
+export default SvgSlackIcon;
diff --git a/src/frontend/src/icons/Slack/index.tsx b/src/frontend/src/icons/Slack/index.tsx
index ec5bdc108..eab13486f 100644
--- a/src/frontend/src/icons/Slack/index.tsx
+++ b/src/frontend/src/icons/Slack/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as SlackSVG } from "./slack-icon.svg";
+import SvgSlackIcon from "./SlackIcon";
export const SlackIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/Slack/slack-icon.svg b/src/frontend/src/icons/Slack/slack-icon.svg
index c5f26c10e..cde79af01 100644
--- a/src/frontend/src/icons/Slack/slack-icon.svg
+++ b/src/frontend/src/icons/Slack/slack-icon.svg
@@ -1,6 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/frontend/src/icons/VertexAI/VertexAi.jsx b/src/frontend/src/icons/VertexAI/VertexAi.jsx
new file mode 100644
index 000000000..11fc05909
--- /dev/null
+++ b/src/frontend/src/icons/VertexAI/VertexAi.jsx
@@ -0,0 +1,52 @@
+const SvgVertexAi = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgVertexAi;
diff --git a/src/frontend/src/icons/VertexAI/index.tsx b/src/frontend/src/icons/VertexAI/index.tsx
index a5115da7e..48f193146 100644
--- a/src/frontend/src/icons/VertexAI/index.tsx
+++ b/src/frontend/src/icons/VertexAI/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as VertexAISVG } from "./vertex_ai.svg";
+import SvgVertexAi from "./VertexAi";
export const VertexAIIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Weaviate/Weaviate.jsx b/src/frontend/src/icons/Weaviate/Weaviate.jsx
new file mode 100644
index 000000000..4a4ad1c83
--- /dev/null
+++ b/src/frontend/src/icons/Weaviate/Weaviate.jsx
@@ -0,0 +1,357 @@
+const SvgWeaviate = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgWeaviate;
diff --git a/src/frontend/src/icons/Weaviate/index.tsx b/src/frontend/src/icons/Weaviate/index.tsx
index f1aeeb1af..0b242f8f8 100644
--- a/src/frontend/src/icons/Weaviate/index.tsx
+++ b/src/frontend/src/icons/Weaviate/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as WeaviateSVG } from "./weaviate.svg";
+import SvgWeaviate from "./Weaviate";
export const WeaviateIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Wikipedia/Wikipedia.jsx b/src/frontend/src/icons/Wikipedia/Wikipedia.jsx
new file mode 100644
index 000000000..7ee7fe810
--- /dev/null
+++ b/src/frontend/src/icons/Wikipedia/Wikipedia.jsx
@@ -0,0 +1,12 @@
+const SvgWikipedia = (props) => (
+
+
+
+);
+export default SvgWikipedia;
diff --git a/src/frontend/src/icons/Wikipedia/Wikipedia.svg b/src/frontend/src/icons/Wikipedia/Wikipedia.svg
index aa0cec73f..4fd216dd3 100644
--- a/src/frontend/src/icons/Wikipedia/Wikipedia.svg
+++ b/src/frontend/src/icons/Wikipedia/Wikipedia.svg
@@ -1,424 +1 @@
-
-
-
-
-
-
- image/svg+xml
-
-
- Wikipedia's W
-
-
- STyx
-
-
- none
-
-
- Wikipedia
- favicon
-
-
- 2007-06-26
-
-
- GFDL
-
-
- W de Wikipรฉdia
-
-
- Inkscape
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/frontend/src/icons/Wikipedia/index.tsx b/src/frontend/src/icons/Wikipedia/index.tsx
index 446f9c108..20525b70d 100644
--- a/src/frontend/src/icons/Wikipedia/index.tsx
+++ b/src/frontend/src/icons/Wikipedia/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as WikipediaSVG } from "./Wikipedia.svg";
+import SvgWikipedia from "./Wikipedia";
export const WikipediaIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Wolfram/Wolfram.jsx b/src/frontend/src/icons/Wolfram/Wolfram.jsx
new file mode 100644
index 000000000..e7651e637
--- /dev/null
+++ b/src/frontend/src/icons/Wolfram/Wolfram.jsx
@@ -0,0 +1,23 @@
+const SvgWolfram = (props) => (
+
+
+
+
+
+);
+export default SvgWolfram;
diff --git a/src/frontend/src/icons/Wolfram/index.tsx b/src/frontend/src/icons/Wolfram/index.tsx
index 8f1b3e089..1d49b96fc 100644
--- a/src/frontend/src/icons/Wolfram/index.tsx
+++ b/src/frontend/src/icons/Wolfram/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as WolframSVG } from "./wolfram.svg";
+import SvgWolfram from "./Wolfram";
export const WolframIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/Wolfram/wolfram.svg b/src/frontend/src/icons/Wolfram/wolfram.svg
index 105a2c12b..beee25d71 100644
--- a/src/frontend/src/icons/Wolfram/wolfram.svg
+++ b/src/frontend/src/icons/Wolfram/wolfram.svg
@@ -1,250 +1 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/frontend/src/icons/Word/Word.jsx b/src/frontend/src/icons/Word/Word.jsx
new file mode 100644
index 000000000..2f86db92b
--- /dev/null
+++ b/src/frontend/src/icons/Word/Word.jsx
@@ -0,0 +1,77 @@
+const SvgWord = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgWord;
diff --git a/src/frontend/src/icons/Word/index.tsx b/src/frontend/src/icons/Word/index.tsx
index 8c6cf9f31..ac7842e2f 100644
--- a/src/frontend/src/icons/Word/index.tsx
+++ b/src/frontend/src/icons/Word/index.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from "react";
-import { ReactComponent as WordSVG } from "./word.svg";
+import SvgWord from "./Word";
export const WordIcon = forwardRef>(
(props, ref) => {
- return ;
+ return ;
}
);
diff --git a/src/frontend/src/icons/hackerNews/YCombinatorLogo.jsx b/src/frontend/src/icons/hackerNews/YCombinatorLogo.jsx
new file mode 100644
index 000000000..507ed03fa
--- /dev/null
+++ b/src/frontend/src/icons/hackerNews/YCombinatorLogo.jsx
@@ -0,0 +1,17 @@
+const SvgYCombinatorLogo = (props) => (
+
+
+
+
+);
+export default SvgYCombinatorLogo;
diff --git a/src/frontend/src/icons/hackerNews/index.tsx b/src/frontend/src/icons/hackerNews/index.tsx
index 787a94274..14e916c93 100644
--- a/src/frontend/src/icons/hackerNews/index.tsx
+++ b/src/frontend/src/icons/hackerNews/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as HackerNewsSVG } from "./Y_Combinator_logo.svg";
+import SvgYCombinatorLogo from "./YCombinatorLogo";
export const HackerNewsIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/icons/supabase/SupabaseIcon.jsx b/src/frontend/src/icons/supabase/SupabaseIcon.jsx
new file mode 100644
index 000000000..b7f1f08b5
--- /dev/null
+++ b/src/frontend/src/icons/supabase/SupabaseIcon.jsx
@@ -0,0 +1,62 @@
+const SvgSupabaseIcon = (props) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default SvgSupabaseIcon;
diff --git a/src/frontend/src/icons/supabase/index.tsx b/src/frontend/src/icons/supabase/index.tsx
index f9e699ace..644f22b3f 100644
--- a/src/frontend/src/icons/supabase/index.tsx
+++ b/src/frontend/src/icons/supabase/index.tsx
@@ -1,9 +1,9 @@
import React, { forwardRef } from "react";
-import { ReactComponent as SupabaseSvg } from "./supabase-icon.svg";
+import SvgSupabaseIcon from "./SupabaseIcon";
export const SupabaseIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return ;
+ return ;
});
diff --git a/src/frontend/src/index.tsx b/src/frontend/src/index.tsx
index 794fcbf32..2542f4903 100644
--- a/src/frontend/src/index.tsx
+++ b/src/frontend/src/index.tsx
@@ -4,7 +4,13 @@ import App from "./App";
import ContextWrapper from "./contexts";
import reportWebVitals from "./reportWebVitals";
-import "./index.css";
+import { ApiInterceptor } from "./controllers/API/api";
+// @ts-ignore
+import "./style/index.css";
+// @ts-ignore
+import "./style/applies.css";
+// @ts-ignore
+import "./style/classes.css";
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
@@ -13,6 +19,7 @@ root.render(
+
);
diff --git a/src/frontend/src/modals/ApiModal/index.tsx b/src/frontend/src/modals/ApiModal/index.tsx
index f3f84a9ac..236a03d65 100644
--- a/src/frontend/src/modals/ApiModal/index.tsx
+++ b/src/frontend/src/modals/ApiModal/index.tsx
@@ -2,760 +2,318 @@ import "ace-builds/src-noconflict/ext-language_tools";
import "ace-builds/src-noconflict/mode-python";
import "ace-builds/src-noconflict/theme-github";
import "ace-builds/src-noconflict/theme-twilight";
-import { useContext, useEffect, useRef, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
+import {
+ ReactNode,
+ forwardRef,
+ useContext,
+ useEffect,
+ useRef,
+ useState,
+} from "react";
// import "ace-builds/webpack-resolver";
-import { Check, Clipboard, Code2 } from "lucide-react";
-import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
-import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism";
-import AccordionComponent from "../../components/AccordionComponent";
-import ShadTooltip from "../../components/ShadTooltipComponent";
-import CodeAreaComponent from "../../components/codeAreaComponent";
-import Dropdown from "../../components/dropdownComponent";
-import FloatComponent from "../../components/floatComponent";
-import InputComponent from "../../components/inputComponent";
-import InputFileComponent from "../../components/inputFileComponent";
-import InputListComponent from "../../components/inputListComponent";
-import IntComponent from "../../components/intComponent";
-import PromptAreaComponent from "../../components/promptComponent";
-import TextAreaComponent from "../../components/textAreaComponent";
-import ToggleShadComponent from "../../components/toggleShadComponent";
+import CodeTabsComponent from "../../components/codeTabsComponent";
+import IconComponent from "../../components/genericIconComponent";
+import { EXPORT_CODE_DIALOG } from "../../constants/constants";
+import { TabsContext } from "../../contexts/tabsContext";
+import { FlowType } from "../../types/flow/index";
+import { buildTweaks } from "../../utils/reactflowUtils";
import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogHeader,
- DialogTitle,
- DialogTrigger,
-} from "../../components/ui/dialog";
-import {
- Table,
- TableBody,
- TableCell,
- TableHead,
- TableHeader,
- TableRow,
-} from "../../components/ui/table";
-import {
- Tabs,
- TabsContent,
- TabsList,
- TabsTrigger,
-} from "../../components/ui/tabs";
-import {
- EXPORT_CODE_DIALOG,
getCurlCode,
getPythonApiCode,
getPythonCode,
-} from "../../constants";
-import { darkContext } from "../../contexts/darkContext";
-import { TabsContext } from "../../contexts/tabsContext";
-import { FlowType } from "../../types/flow/index";
-import { buildTweaks, classNames } from "../../utils";
+ getWidgetCode,
+} from "../../utils/utils";
+import BaseModal from "../baseModal";
-export default function ApiModal({ flow }: { flow: FlowType }) {
- const [open, setOpen] = useState(true);
- const { dark } = useContext(darkContext);
- const { closePopUp, closeEdit, setCloseEdit } = useContext(PopUpContext);
- const [activeTab, setActiveTab] = useState("0");
- const [isCopied, setIsCopied] = useState(false);
- const [enabled, setEnabled] = useState(null);
- const [openAccordion, setOpenAccordion] = useState([]);
- const tweak = useRef([]);
- const tweaksList = useRef([]);
- const { setTweak, getTweak, tabsState } = useContext(TabsContext);
- const copyToClipboard = () => {
- if (!navigator.clipboard || !navigator.clipboard.writeText) {
- return;
- }
-
- navigator.clipboard.writeText(tabs[activeTab].code).then(() => {
- setIsCopied(true);
-
- setTimeout(() => {
- setIsCopied(false);
- }, 2000);
- });
- };
- const pythonApiCode = getPythonApiCode(flow, tweak.current, tabsState);
- const curl_code = getCurlCode(flow, tweak.current, tabsState);
- const pythonCode = getPythonCode(flow, tweak.current, tabsState);
- const tweaksCode = buildTweaks(flow);
- const tabs = [
+const ApiModal = forwardRef(
+ (
{
- name: "cURL",
- mode: "bash",
- image: "https://curl.se/logo/curl-symbol-transparent.png",
- code: curl_code,
+ flow,
+ children,
+ disable,
+ }: {
+ flow: FlowType;
+ children: ReactNode;
+ disable: boolean;
},
- {
- name: "Python API",
- mode: "python",
- image:
- "https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628015119369-OY4TV3XJJ53ECO0W2OLQ/Python+API+Training+Logo.png?format=1000w",
- code: pythonApiCode,
- },
- {
- name: "Python Code",
- mode: "python",
- image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
- code: pythonCode,
- },
- ];
+ ref
+ ) => {
+ const [open, setOpen] = useState(false);
+ const [activeTab, setActiveTab] = useState("0");
+ const tweak = useRef([]);
+ const tweaksList = useRef([]);
+ const { setTweak, getTweak, tabsState } = useContext(TabsContext);
+ const pythonApiCode = getPythonApiCode(flow, tweak.current, tabsState);
+ const curl_code = getCurlCode(flow, tweak.current, tabsState);
+ const pythonCode = getPythonCode(flow, tweak.current, tabsState);
+ const widgetCode = getWidgetCode(flow, tabsState);
+ const tweaksCode = buildTweaks(flow);
+ const [tabs, setTabs] = useState([
+ {
+ name: "cURL",
+ mode: "bash",
+ image: "https://curl.se/logo/curl-symbol-transparent.png",
+ language: "sh",
+ code: curl_code,
+ },
+ {
+ name: "Python API",
+ mode: "python",
+ image:
+ "https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628015119369-OY4TV3XJJ53ECO0W2OLQ/Python+API+Training+Logo.png?format=1000w",
+ language: "py",
+ code: pythonApiCode,
+ },
+ {
+ name: "Python Code",
+ mode: "python",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: pythonCode,
+ },
+ {
+ name: "Chat Widget HTML",
+ description:
+ "Insert this code anywhere in your <body> tag. To use with react and other libs, check our documentation .",
+ mode: "html",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: widgetCode,
+ },
+ ]);
- useEffect(() => {
- if (closeEdit !== "") {
- tweak.current = getTweak;
- if (tweak.current.length > 0) {
- setActiveTab("3");
- openAccordions();
- } else {
- startTweaks();
- }
- } else {
- if (tweak?.current) {
- startTweaks();
- }
- }
- }, [closeEdit]);
-
- useEffect(() => {
- filterNodes();
- }, []);
-
- if (Object.keys(tweaksCode).length > 0) {
- tabs.push({
- name: "Tweaks",
- mode: "python",
- image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
- code: pythonCode,
- });
- }
-
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setCloseEdit("");
+ function startState() {
+ tweak.current = [];
setTweak([]);
- closePopUp();
- }
- }
-
- function startTweaks() {
- const t = buildTweaks(flow);
- tweak?.current?.push(t);
- }
-
- function filterNodes() {
- let arrNodesWithValues = [];
-
- flow["data"]["nodes"].forEach((t) => {
- Object.keys(t["data"]["node"]["template"])
- .filter(
- (n) =>
- n.charAt(0) !== "_" &&
- t.data.node.template[n].show &&
- (t.data.node.template[n].type === "str" ||
- t.data.node.template[n].type === "bool" ||
- t.data.node.template[n].type === "float" ||
- t.data.node.template[n].type === "code" ||
- t.data.node.template[n].type === "prompt" ||
- t.data.node.template[n].type === "file" ||
- t.data.node.template[n].type === "int")
- )
- .map((n, i) => {
- arrNodesWithValues.push(t["id"]);
- });
- });
-
- tweaksList.current = arrNodesWithValues.filter((value, index, self) => {
- return self.indexOf(value) === index;
- });
- }
-
- function buildTweakObject(tw, changes, template) {
- if (template.type === "float") {
- changes = parseFloat(changes);
- }
- if (template.type === "int") {
- changes = parseInt(changes);
- }
- if (template.list === true && Array.isArray(changes)) {
- changes = changes?.filter((x) => x !== "");
+ tweaksList.current = [];
}
- const existingTweak = tweak.current.find((element) =>
- element.hasOwnProperty(tw)
- );
-
- if (existingTweak) {
- existingTweak[tw][template["name"]] = changes;
-
- if (existingTweak[tw][template["name"]] == template.value) {
- tweak.current.forEach((element) => {
- if (element[tw] && Object.keys(element[tw])?.length === 0) {
- tweak.current = tweak.current.filter((obj) => {
- const prop = obj[Object.keys(obj)[0]].prop;
- return prop !== undefined && prop !== null && prop !== "";
- });
- }
- });
+ useEffect(() => {
+ if (flow["data"]["nodes"].length == 0) {
+ startState();
+ } else {
+ tweak.current = [];
+ const t = buildTweaks(flow);
+ tweak.current.push(t);
}
- } else {
- const newTweak = {
- [tw]: {
- [template["name"]]: changes,
- },
- };
- tweak.current.push(newTweak);
- }
- const pythonApiCode = getPythonApiCode(flow, tweak.current);
- const curl_code = getCurlCode(flow, tweak.current);
- const pythonCode = getPythonCode(flow, tweak.current);
+ filterNodes();
- tabs[0].code = curl_code;
- tabs[1].code = pythonApiCode;
- tabs[2].code = pythonCode;
-
- setTweak(tweak.current);
- }
-
- function buildContent(value) {
- const htmlContent = (
-
- {value != null && value != "" ? value : "None"}
-
- );
- return htmlContent;
- }
-
- function getValue(value, node, template) {
- let returnValue = value ?? "";
-
- if (getTweak.length > 0) {
- for (const obj of getTweak) {
- Object.keys(obj).forEach((key) => {
- const value = obj[key];
- if (key == node["id"]) {
- Object.keys(value).forEach((key) => {
- if (key == template["name"]) {
- returnValue = value[key];
- }
- });
- }
- });
+ if (Object.keys(tweaksCode).length > 0) {
+ setActiveTab("0");
+ setTabs([
+ {
+ name: "cURL",
+ mode: "bash",
+ image: "https://curl.se/logo/curl-symbol-transparent.png",
+ language: "sh",
+ code: curl_code,
+ },
+ {
+ name: "Python API",
+ mode: "python",
+ image:
+ "https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628015119369-OY4TV3XJJ53ECO0W2OLQ/Python+API+Training+Logo.png?format=1000w",
+ language: "py",
+ code: pythonApiCode,
+ },
+ {
+ name: "Python Code",
+ mode: "python",
+ language: "py",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ code: pythonCode,
+ },
+ {
+ name: "Chat Widget HTML",
+ description:
+ "Insert this code anywhere in your <body> tag. To use with react and other libs, check our documentation .",
+ mode: "html",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: widgetCode,
+ },
+ {
+ name: "Tweaks",
+ mode: "python",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: pythonCode,
+ },
+ ]);
+ } else {
+ setTabs([
+ {
+ name: "cURL",
+ mode: "bash",
+ image: "https://curl.se/logo/curl-symbol-transparent.png",
+ language: "sh",
+ code: curl_code,
+ },
+ {
+ name: "Python API",
+ mode: "python",
+ image:
+ "https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628015119369-OY4TV3XJJ53ECO0W2OLQ/Python+API+Training+Logo.png?format=1000w",
+ language: "py",
+ code: pythonApiCode,
+ },
+ {
+ name: "Python Code",
+ mode: "python",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: pythonCode,
+ },
+ {
+ name: "Chat Widget HTML",
+ description:
+ "Insert this code anywhere in your <body> tag. To use with react and other libs, check our documentation .",
+ mode: "html",
+ image: "https://cdn-icons-png.flaticon.com/512/5968/5968350.png",
+ language: "py",
+ code: widgetCode,
+ },
+ ]);
}
- } else {
- return value ?? "";
- }
- return returnValue;
- }
+ }, [flow["data"]["nodes"], open]);
- function openAccordions() {
- let accordionsToOpen = [];
- tweak.current.forEach((el) => {
- Object.keys(el).forEach((key) => {
- if (Object.keys(el[key]).length > 0) {
- accordionsToOpen.push(key);
- setOpenAccordion(accordionsToOpen);
- }
+ function filterNodes() {
+ let arrNodesWithValues = [];
+
+ flow["data"]["nodes"].forEach((t) => {
+ Object.keys(t["data"]["node"]["template"])
+ .filter(
+ (n) =>
+ n.charAt(0) !== "_" &&
+ t.data.node.template[n].show &&
+ (t.data.node.template[n].type === "str" ||
+ t.data.node.template[n].type === "bool" ||
+ t.data.node.template[n].type === "float" ||
+ t.data.node.template[n].type === "code" ||
+ t.data.node.template[n].type === "prompt" ||
+ t.data.node.template[n].type === "file" ||
+ t.data.node.template[n].type === "int")
+ )
+ .map((n, i) => {
+ arrNodesWithValues.push(t["id"]);
+ });
});
- });
- }
- return (
-
-
-
-
-
- Code
-
-
- {EXPORT_CODE_DIALOG}
-
+ tweaksList.current = arrNodesWithValues.filter((value, index, self) => {
+ return self.indexOf(value) === index;
+ });
+ }
+ function buildTweakObject(tw, changes, template) {
+ if (template.type === "float") {
+ changes = parseFloat(changes);
+ }
+ if (template.type === "int") {
+ changes = parseInt(changes);
+ }
+ if (template.list === true && Array.isArray(changes)) {
+ changes = changes?.filter((x) => x !== "");
+ }
- {
- setActiveTab(value);
- if (value === "3") {
- openAccordions();
+ const existingTweak = tweak.current.find((element) =>
+ element.hasOwnProperty(tw)
+ );
+
+ if (existingTweak) {
+ existingTweak[tw][template["name"]] = changes;
+
+ if (existingTweak[tw][template["name"]] == template.value) {
+ tweak.current.forEach((element) => {
+ if (element[tw] && Object.keys(element[tw])?.length === 0) {
+ tweak.current = tweak.current.filter((obj) => {
+ const prop = obj[Object.keys(obj)[0]].prop;
+ return prop !== undefined && prop !== null && prop !== "";
+ });
}
- }}
- >
-
-
- {tabs.map((tab, index) => (
-
- {tab.name}
-
- ))}
-
- {Number(activeTab) < 3 && (
-
-
- {isCopied ? : }
- {isCopied ? "Copied!" : "Copy code"}
-
-
- )}
-
+ });
+ }
+ } else {
+ const newTweak = {
+ [tw]: {
+ [template["name"]]: changes,
+ },
+ };
+ tweak.current.push(newTweak);
+ }
- {tabs.map((tab, index) => (
-
- {index < 3 ? (
-
- {tab.code}
-
- ) : index === 3 ? (
- <>
-
-
- {flow["data"]["nodes"].map((t: any, index) => (
-
- {tweaksList.current.includes(t["data"]["id"]) && (
-
-
-
-
-
-
- PARAM
-
-
- VALUE
-
-
-
-
- {Object.keys(t["data"]["node"]["template"])
- .filter(
- (n) =>
- n.charAt(0) !== "_" &&
- t.data.node.template[n].show &&
- (t.data.node.template[n].type ===
- "str" ||
- t.data.node.template[n].type ===
- "bool" ||
- t.data.node.template[n].type ===
- "float" ||
- t.data.node.template[n].type ===
- "code" ||
- t.data.node.template[n].type ===
- "prompt" ||
- t.data.node.template[n].type ===
- "file" ||
- t.data.node.template[n].type ===
- "int")
- )
- .map((n, i) => {
- //console.log(t.data.node.template[n]);
+ const pythonApiCode = getPythonApiCode(flow, tweak.current, tabsState);
+ const curl_code = getCurlCode(flow, tweak.current, tabsState);
+ const pythonCode = getPythonCode(flow, tweak.current, tabsState);
+ const widgetCode = getWidgetCode(flow, tabsState);
- return (
-
-
- {n}
-
-
-
- {t.data.node.template[n]
- .type === "str" &&
- !t.data.node.template[n]
- .options ? (
-
- {t.data.node.template[n]
- .list ? (
-
{}}
- onAddInput={(k) => {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node
- .template[n]
- );
- }}
- />
- ) : t.data.node.template[n]
- .multiline ? (
-
-
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node
- .template[n]
- );
- }}
- />
-
-
- ) : (
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node
- .template[n]
- );
- }}
- />
- )}
-
- ) : t.data.node.template[n]
- .type === "bool" ? (
-
- {" "}
- {
- t.data.node.template[
- n
- ].value = e;
- setEnabled(e);
- buildTweakObject(
- t["data"]["id"],
- e,
- t.data.node.template[
- n
- ]
- );
- }}
- size="small"
- disabled={false}
- />
-
- ) : t.data.node.template[n]
- .type === "file" ? (
-
-
- {}}
- fileTypes={
- t.data.node.template[
- n
- ].fileTypes
- }
- suffixes={
- t.data.node.template[
- n
- ].suffixes
- }
- onFileChange={(
- k: any
- ) => {}}
- >
-
-
- ) : t.data.node.template[n]
- .type === "float" ? (
-
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node.template[
- n
- ]
- );
- }}
- />
-
- ) : t.data.node.template[n]
- .type === "str" &&
- t.data.node.template[n]
- .options ? (
-
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node.template[
- n
- ]
- );
- }}
- value={getValue(
- t.data.node.template[n]
- .value,
- t.data,
- t.data.node.template[n]
- )}
- >
-
- ) : t.data.node.template[n]
- .type === "int" ? (
-
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node.template[
- n
- ]
- );
- }}
- />
-
- ) : t.data.node.template[n]
- .type === "prompt" ? (
-
-
-
{
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node
- .template[n]
- );
- }}
- />
-
-
- ) : t.data.node.template[n]
- .type === "code" ? (
-
-
- {
- buildTweakObject(
- t["data"]["id"],
- k,
- t.data.node
- .template[n]
- );
- }}
- />
-
-
- ) : t.data.node.template[n]
- .type === "Any" ? (
- "-"
- ) : (
-
- )}
-
-
-
- );
- })}
-
-
-
-
- )}
+ tabs[0].code = curl_code;
+ tabs[1].code = pythonApiCode;
+ tabs[2].code = pythonCode;
+ tabs[3].code = widgetCode;
- {tweaksList.current.length === 0 && (
- <>
-
- No tweaks are available for this flow.
-
- >
- )}
-
- ))}
+ setTweak(tweak.current);
+ }
- {/*
-
-
-
-
-
- TWEAK
-
-
- VALUE
-
-
-
-
- {invoices.map((invoice) => (
-
-
- {invoice.paymentStatus}
-
-
- {invoice.paymentMethod}
-
-
- ))}
-
-
-
*/}
-
-
- >
- ) : null}
-
- ))}
-
-
-
- );
-}
+ function buildContent(value) {
+ const htmlContent = (
+
+ {value != null && value != "" ? value : "None"}
+
+ );
+ return htmlContent;
+ }
+
+ function getValue(value, node, template) {
+ let returnValue = value ?? "";
+
+ if (getTweak.length > 0) {
+ for (const obj of getTweak) {
+ Object.keys(obj).forEach((key) => {
+ const value = obj[key];
+ if (key == node["id"]) {
+ Object.keys(value).forEach((key) => {
+ if (key == template["name"]) {
+ returnValue = value[key];
+ }
+ });
+ }
+ });
+ }
+ } else {
+ return value ?? "";
+ }
+ return returnValue;
+ }
+
+ return (
+
+ {children}
+
+ Code
+
+
+
+
+
+
+ );
+ }
+);
+
+export default ApiModal;
diff --git a/src/frontend/src/modals/EditNodeModal/index.tsx b/src/frontend/src/modals/EditNodeModal/index.tsx
index 84d85014d..4b4b55568 100644
--- a/src/frontend/src/modals/EditNodeModal/index.tsx
+++ b/src/frontend/src/modals/EditNodeModal/index.tsx
@@ -1,8 +1,9 @@
-import { Variable } from "lucide-react";
-import { useContext, useRef, useState } from "react";
+import { cloneDeep } from "lodash";
+import { ReactNode, forwardRef, useContext, useEffect, useState } from "react";
import CodeAreaComponent from "../../components/codeAreaComponent";
import Dropdown from "../../components/dropdownComponent";
import FloatComponent from "../../components/floatComponent";
+import IconComponent from "../../components/genericIconComponent";
import InputComponent from "../../components/inputComponent";
import InputFileComponent from "../../components/inputFileComponent";
import InputListComponent from "../../components/inputListComponent";
@@ -12,15 +13,6 @@ import TextAreaComponent from "../../components/textAreaComponent";
import ToggleShadComponent from "../../components/toggleShadComponent";
import { Badge } from "../../components/ui/badge";
import { Button } from "../../components/ui/button";
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
- DialogTrigger,
-} from "../../components/ui/dialog";
import {
Table,
TableBody,
@@ -29,306 +21,311 @@ import {
TableHeader,
TableRow,
} from "../../components/ui/table";
-import { PopUpContext } from "../../contexts/popUpContext";
+import { limitScrollFieldsModal } from "../../constants/constants";
import { TabsContext } from "../../contexts/tabsContext";
import { typesContext } from "../../contexts/typesContext";
import { NodeDataType } from "../../types/flow";
-import { classNames, limitScrollFieldsModal } from "../../utils";
+import { classNames } from "../../utils/utils";
+import BaseModal from "../baseModal";
-export default function EditNodeModal({ data }: { data: NodeDataType }) {
- const [open, setOpen] = useState(true);
- const [nodeLength, setNodeLength] = useState(
- Object.keys(data.node.template).filter(
- (t) =>
- t.charAt(0) !== "_" &&
- data.node.template[t].show &&
- (data.node.template[t].type === "str" ||
- data.node.template[t].type === "bool" ||
- data.node.template[t].type === "float" ||
- data.node.template[t].type === "code" ||
- data.node.template[t].type === "prompt" ||
- data.node.template[t].type === "file" ||
- data.node.template[t].type === "int")
- ).length
- );
- const [nodeValue, setNodeValue] = useState(null);
- const { closePopUp } = useContext(PopUpContext);
- const { types } = useContext(typesContext);
- const ref = useRef();
- const { setTabsState, tabId } = useContext(TabsContext);
- const { reactFlowInstance } = useContext(typesContext);
+const EditNodeModal = forwardRef(
+ (
+ {
+ data,
+ setData,
+ nodeLength,
+ children,
+ }: {
+ data: NodeDataType;
+ setData: (data: NodeDataType) => void;
+ nodeLength: number;
+ children: ReactNode;
+ },
+ ref
+ ) => {
+ const [modalOpen, setModalOpen] = useState(false);
+ const [myData, setMyData] = useState(data);
+ const { setTabsState, tabId } = useContext(TabsContext);
+ const { reactFlowInstance } = useContext(typesContext);
- let disabled =
- reactFlowInstance?.getEdges().some((e) => e.targetHandle === data.id) ??
- false;
- if (nodeLength == 0) {
- closePopUp();
- }
+ let disabled =
+ reactFlowInstance?.getEdges().some((e) => e.targetHandle === data.id) ??
+ false;
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- closePopUp();
+ function changeAdvanced(n) {
+ setMyData((old) => {
+ let newData = cloneDeep(old);
+ newData.node.template[n].advanced = !newData.node.template[n].advanced;
+ return newData;
+ });
}
- }
- function changeAdvanced(node) {
- Object.keys(data.node.template).map((n, i) => {
- if (n === node.name) {
- data.node.template[n].advanced = !data.node.template[n].advanced;
- }
- return n;
- });
- setNodeValue(!nodeValue);
- }
+ const handleOnNewValue = (newValue: any, name) => {
+ setMyData((old) => {
+ let newData = cloneDeep(old);
+ newData.node.template[name].value = newValue;
+ return newData;
+ });
+ };
- const handleOnNewValue = (newValue: any, name) => {
- data.node.template[name].value = newValue;
- // Set state to pending
- setTabsState((prev) => {
- return {
- ...prev,
- [tabId]: {
- ...prev[tabId],
- isPending: true,
- },
- };
- });
- };
+ useEffect(() => {
+ setMyData(data); // reset data to what it is on node when opening modal
+ }, [modalOpen]);
- return (
-
-
-
-
-
- {data.type}
- ID: {data.id}
-
-
-
- {data.node?.description}
-
-
- Parameters
-
-
-
-
+ return (
+
+ {children}
+
+ {myData.type}
+ ID: {myData.id}
+
+
+
+
+ Parameters
+
-
-
limitScrollFieldsModal
- ? "overflow-scroll overflow-x-hidden custom-scroll"
- : "overflow-hidden"
- )}
- >
- {nodeLength > 0 && (
-
-
-
-
- PARAM
-
- VALUE
-
- SHOW
-
-
-
- {Object.keys(data.node.template)
- .filter(
- (t) =>
- t.charAt(0) !== "_" &&
- data.node.template[t].show &&
- (data.node.template[t].type === "str" ||
- data.node.template[t].type === "bool" ||
- data.node.template[t].type === "float" ||
- data.node.template[t].type === "code" ||
- data.node.template[t].type === "prompt" ||
- data.node.template[t].type === "file" ||
- data.node.template[t].type === "int")
- )
- .map((n, i) => (
-
-
- {data.node.template[n].name
- ? data.node.template[n].name
- : data.node.template[n].display_name}
-
-
- {data.node.template[n].type === "str" &&
- !data.node.template[n].options ? (
-
- {data.node.template[n].list ? (
-
+ limitScrollFieldsModal
+ ? "overflow-scroll overflow-x-hidden custom-scroll"
+ : "overflow-hidden"
+ )}
+ >
+ {nodeLength > 0 && (
+
+
+
+
+ PARAM
+
+ VALUE
+
+ SHOW
+
+
+
+ {Object.keys(myData.node.template)
+ .filter(
+ (t) =>
+ t.charAt(0) !== "_" &&
+ myData.node.template[t].show &&
+ (myData.node.template[t].type === "str" ||
+ myData.node.template[t].type === "bool" ||
+ myData.node.template[t].type === "float" ||
+ myData.node.template[t].type === "code" ||
+ myData.node.template[t].type === "prompt" ||
+ myData.node.template[t].type === "file" ||
+ myData.node.template[t].type === "int")
+ )
+ .map((n, i) => (
+
+
+ {myData.node.template[n].name
+ ? myData.node.template[n].name
+ : myData.node.template[n].display_name}
+
+
+ {myData.node.template[n].type === "str" &&
+ !myData.node.template[n].options ? (
+
+ {myData.node.template[n].list ? (
+ {
+ handleOnNewValue(t, n);
+ }}
+ />
+ ) : myData.node.template[n].multiline ? (
+ {
+ handleOnNewValue(t, n);
+ }}
+ />
+ ) : (
+ {
+ handleOnNewValue(t, n);
+ }}
+ />
+ )}
+
+ ) : myData.node.template[n].type === "bool" ? (
+
+ {" "}
+
{
+ enabled={myData.node.template[n].value}
+ setEnabled={(t) => {
handleOnNewValue(t, n);
}}
+ size="small"
/>
- ) : data.node.template[n].multiline ? (
-
+ ) : myData.node.template[n].type === "float" ? (
+
+ {
- handleOnNewValue(t, n);
- }}
- />
- ) : (
- {
handleOnNewValue(t, n);
}}
/>
- )}
-
- ) : data.node.template[n].type === "bool" ? (
-
- {" "}
+
+ ) : myData.node.template[n].type === "str" &&
+ myData.node.template[n].options ? (
+
+ handleOnNewValue(t, n)}
+ value={
+ myData.node.template[n].value ??
+ "Choose an option"
+ }
+ >
+
+ ) : myData.node.template[n].type === "int" ? (
+
+ {
+ handleOnNewValue(t, n);
+ }}
+ />
+
+ ) : myData.node.template[n].type === "file" ? (
+
+ {
+ handleOnNewValue(t, n);
+ }}
+ fileTypes={
+ myData.node.template[n].fileTypes
+ }
+ suffixes={myData.node.template[n].suffixes}
+ onFileChange={(t: string) => {
+ data.node.template[n].file_path = t;
+ }}
+ >
+
+ ) : myData.node.template[n].type === "prompt" ? (
+
+
{
+ myData.node = nodeClass;
+ }}
+ value={myData.node.template[n].value ?? ""}
+ onChange={(t: string) => {
+ handleOnNewValue(t, n);
+ }}
+ />
+
+ ) : myData.node.template[n].type === "code" ? (
+
+ {
+ data.node = nodeClass;
+ }}
+ nodeClass={data.node}
+ disabled={disabled}
+ editNode={true}
+ value={myData.node.template[n].value ?? ""}
+ onChange={(t: string) => {
+ handleOnNewValue(t, n);
+ }}
+ />
+
+ ) : myData.node.template[n].type === "Any" ? (
+ "-"
+ ) : (
+
+ )}
+
+
+
changeAdvanced(n)}
disabled={disabled}
- enabled={data.node.template[n].value}
- setEnabled={(t) => {
- handleOnNewValue(t, n);
- }}
size="small"
/>
- ) : data.node.template[n].type === "float" ? (
-
- {
- data.node.template[n].value = t;
- }}
- />
-
- ) : data.node.template[n].type === "str" &&
- data.node.template[n].options ? (
-
- handleOnNewValue(t, n)}
- value={
- data.node.template[n].value ??
- "Choose an option"
- }
- >
-
- ) : data.node.template[n].type === "int" ? (
-
- {
- handleOnNewValue(t, n);
- }}
- />
-
- ) : data.node.template[n].type === "file" ? (
-
- {
- handleOnNewValue(t, n);
- }}
- fileTypes={data.node.template[n].fileTypes}
- suffixes={data.node.template[n].suffixes}
- onFileChange={(t: string) => {
- handleOnNewValue(t, n);
- }}
- >
-
- ) : data.node.template[n].type === "prompt" ? (
-
-
{
- data.node = nodeClass;
- }}
- value={data.node.template[n].value ?? ""}
- onChange={(t: string) => {
- handleOnNewValue(t, n);
- }}
- />
-
- ) : data.node.template[n].type === "code" ? (
-
- {
- handleOnNewValue(t, n);
- }}
- />
-
- ) : data.node.template[n].type === "Any" ? (
- "-"
- ) : (
-
- )}
-
-
-
-
- changeAdvanced(data.node.template[n])
- }
- disabled={disabled}
- size="small"
- />
-
-
-
- ))}
-
-
-
- )}
+
+
+ ))}
+
+
+
+ )}
+
-
+
-
+
{
+ setData(cloneDeep(myData)); //saves data with actual state of modal
+ setTabsState((prev) => {
+ return {
+ ...prev,
+ [tabId]: {
+ ...prev[tabId],
+ isPending: true,
+ },
+ };
+ });
setModalOpen(false);
}}
type="submit"
>
Save Changes
-
-
-
- );
-}
+
+
+ );
+ }
+);
+
+export default EditNodeModal;
diff --git a/src/frontend/src/modals/NodeModal/components/ModalField/index.tsx b/src/frontend/src/modals/NodeModal/components/ModalField/index.tsx
index ad82d0c0d..4b80248db 100644
--- a/src/frontend/src/modals/NodeModal/components/ModalField/index.tsx
+++ b/src/frontend/src/modals/NodeModal/components/ModalField/index.tsx
@@ -9,7 +9,7 @@ import IntComponent from "../../../../components/intComponent";
import PromptAreaComponent from "../../../../components/promptComponent";
import TextAreaComponent from "../../../../components/textAreaComponent";
import ToggleComponent from "../../../../components/toggleComponent";
-import { classNames } from "../../../../utils";
+import { classNames } from "../../../../utils/utils";
export default function ModalField({
data,
@@ -142,7 +142,7 @@ export default function ModalField({
fileTypes={data.node.template[name].fileTypes}
suffixes={data.node.template[name].suffixes}
onFileChange={(t: string) => {
- data.node.template[name].content = t;
+ data.node.template[name].file_path = t;
}}
>
@@ -160,6 +160,11 @@ export default function ModalField({
) : type === "code" ? (
{
+ data.node = nodeClass;
+ }}
+ nodeClass={data.node}
disabled={false}
value={data.node.template[name].value ?? ""}
onChange={(t: string) => {
diff --git a/src/frontend/src/modals/NodeModal/index.tsx b/src/frontend/src/modals/NodeModal/index.tsx
index c61af4ff4..565a57541 100644
--- a/src/frontend/src/modals/NodeModal/index.tsx
+++ b/src/frontend/src/modals/NodeModal/index.tsx
@@ -1,163 +1,151 @@
import { Dialog, Transition } from "@headlessui/react";
-import { X } from "lucide-react";
import { Fragment, useContext, useRef, useState } from "react";
-import { PopUpContext } from "../../contexts/popUpContext";
+import IconComponent from "../../components/genericIconComponent";
+import { limitScrollFieldsModal } from "../../constants/constants";
import { typesContext } from "../../contexts/typesContext";
import { NodeDataType } from "../../types/flow";
-import {
- classNames,
- limitScrollFieldsModal,
- nodeColors,
- nodeIconsLucide,
- toTitleCase,
-} from "../../utils";
+import { nodeColors, nodeIconsLucide } from "../../utils/styleUtils";
+import { classNames, toTitleCase } from "../../utils/utils";
import ModalField from "./components/ModalField";
export default function NodeModal({ data }: { data: NodeDataType }) {
- const [open, setOpen] = useState(true);
- const { closePopUp } = useContext(PopUpContext);
+ const [modalOpen, setModalOpen] = useState(false);
const { types } = useContext(typesContext);
const ref = useRef();
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setTimeout(() => {
- closePopUp();
- }, 300);
- }
- }
// any to avoid type conflict
const Icon: any = nodeIconsLucide[types[data.type]];
return (
-
-
+
-
-
-
+
+
-
-
-
-
-
-
{
- setModalOpen(false);
+
+
+
+
+
+ {
+ setModalOpen(false);
+ }}
+ >
+ Close
+
+
+
+
+
+
- Close
-
-
-
-
-
-
-
-
- {data.type}
-
-
+ />
+
+
+ {data.type}
+
-
-
-
+
+
+
+ t.charAt(0) !== "_" &&
+ data.node.template[t].advanced &&
+ data.node.template[t].show
+ ).length > limitScrollFieldsModal
+ ? "overflow-scroll overflow-x-hidden custom-scroll"
+ : "overflow-hidden"
+ )}
+ >
+
+ {Object.keys(data.node.template)
+ .filter(
(t) =>
t.charAt(0) !== "_" &&
data.node.template[t].advanced &&
data.node.template[t].show
- ).length > limitScrollFieldsModal
- ? "overflow-scroll overflow-x-hidden custom-scroll"
- : "overflow-hidden"
- )}
- >
-
- {Object.keys(data.node.template)
- .filter(
- (t) =>
- t.charAt(0) !== "_" &&
- data.node.template[t].advanced &&
- data.node.template[t].show
- )
- .map((t: string, idx) => {
- return (
-
- );
- })}
-
+ )
+ .map((t: string, idx) => {
+ return (
+
+ );
+ })}
-
- {
- setModalOpen(false);
- }}
- >
- Done
-
-
-
-
-
+
+ {
+ setModalOpen(false);
+ }}
+ >
+ Done
+
+
+
+
+
-
-
+
+
);
}
diff --git a/src/frontend/src/modals/baseModal/index.tsx b/src/frontend/src/modals/baseModal/index.tsx
index 4b135383c..142ad223b 100644
--- a/src/frontend/src/modals/baseModal/index.tsx
+++ b/src/frontend/src/modals/baseModal/index.tsx
@@ -1,4 +1,4 @@
-import { ReactNode, useContext } from "react";
+import { ReactNode } from "react";
import React from "react";
import {
@@ -9,14 +9,18 @@ import {
DialogTitle,
DialogTrigger,
} from "../../components/ui/dialog";
-import { PopUpContext } from "../../contexts/popUpContext";
type ContentProps = { children: ReactNode };
type HeaderProps = { children: ReactNode; description: string };
+type FooterProps = { children: ReactNode };
+type TriggerProps = { children: ReactNode };
const Content: React.FC
= ({ children }) => {
return {children}
;
};
+const Trigger: React.FC = ({ children }) => {
+ return <>{children}>;
+};
const Header: React.FC<{ children: ReactNode; description: string }> = ({
children,
@@ -29,36 +33,88 @@ const Header: React.FC<{ children: ReactNode; description: string }> = ({
);
};
-interface BaseModalProps {
- children: [React.ReactElement, React.ReactElement];
- open: boolean;
- setOpen: (open: boolean) => void;
-}
-function BaseModal({ open, setOpen, children }: BaseModalProps) {
- const { closePopUp, setCloseEdit } = useContext(PopUpContext);
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setTimeout(() => {
- setCloseEdit("editcode");
- closePopUp();
- }, 300);
- }
- }
+const Footer: React.FC<{ children: ReactNode }> = ({ children }) => {
+ return <>{children}>;
+};
+interface BaseModalProps {
+ children: [
+ React.ReactElement,
+ React.ReactElement,
+ React.ReactElement?,
+ React.ReactElement?
+ ];
+ open?: boolean;
+ setOpen?: (open: boolean) => void;
+ disable?: boolean;
+ size?: "smaller" | "small" | "medium" | "large" | "large-h-full";
+}
+function BaseModal({
+ open,
+ setOpen,
+ disable = false,
+ children,
+ size = "large",
+}: BaseModalProps) {
const headerChild = React.Children.toArray(children).find(
(child) => (child as React.ReactElement).type === Header
);
+ const triggerChild = React.Children.toArray(children).find(
+ (child) => (child as React.ReactElement).type === Trigger
+ );
const ContentChild = React.Children.toArray(children).find(
(child) => (child as React.ReactElement).type === Content
);
+ const ContentFooter = React.Children.toArray(children).find(
+ (child) => (child as React.ReactElement).type === Footer
+ );
+
+ let minWidth: string;
+ let height: string;
+
+ switch (size) {
+ case "smaller":
+ minWidth = "min-w-[40vw]";
+ height = "h-[27vh]";
+ break;
+ case "small":
+ minWidth = "min-w-[40vw]";
+ height = "h-[40vh]";
+ break;
+ case "medium":
+ minWidth = "min-w-[60vw]";
+ height = "h-[60vh]";
+ break;
+ case "large":
+ minWidth = "min-w-[80vw]";
+ height = "h-[80vh]";
+ break;
+ case "large-h-full":
+ minWidth = "min-w-[80vw]";
+ break;
+ default:
+ minWidth = "min-w-[80vw]";
+ height = "h-[80vh]";
+ break;
+ }
+
//UPDATE COLORS AND STYLE CLASSSES
return (
-
-
-
+
+
+ {triggerChild}
+
+
{headerChild}
- {ContentChild}
+
+ {ContentChild}
+
+ {ContentFooter && (
+ {ContentFooter}
+ )}
);
@@ -66,4 +122,6 @@ function BaseModal({ open, setOpen, children }: BaseModalProps) {
BaseModal.Content = Content;
BaseModal.Header = Header;
+BaseModal.Trigger = Trigger;
+BaseModal.Footer = Footer;
export default BaseModal;
diff --git a/src/frontend/src/modals/codeAreaModal/index.tsx b/src/frontend/src/modals/codeAreaModal/index.tsx
index cc0495977..53540ac16 100644
--- a/src/frontend/src/modals/codeAreaModal/index.tsx
+++ b/src/frontend/src/modals/codeAreaModal/index.tsx
@@ -1,18 +1,18 @@
-import { DialogTitle } from "@radix-ui/react-dialog";
import "ace-builds/src-noconflict/ace";
import "ace-builds/src-noconflict/ext-language_tools";
import "ace-builds/src-noconflict/mode-python";
import "ace-builds/src-noconflict/theme-github";
import "ace-builds/src-noconflict/theme-twilight";
-import { TerminalSquare } from "lucide-react";
-import { useContext, useState } from "react";
+// import "ace-builds/webpack-resolver";
+import { ReactNode, useContext, useEffect, useState } from "react";
import AceEditor from "react-ace";
+import IconComponent from "../../components/genericIconComponent";
import { Button } from "../../components/ui/button";
-import { CODE_PROMPT_DIALOG_SUBTITLE } from "../../constants";
+import { CODE_PROMPT_DIALOG_SUBTITLE } from "../../constants/constants";
import { alertContext } from "../../contexts/alertContext";
import { darkContext } from "../../contexts/darkContext";
-import { PopUpContext } from "../../contexts/popUpContext";
-import { postValidateCode } from "../../controllers/API";
+import { typesContext } from "../../contexts/typesContext";
+import { postCustomComponent, postValidateCode } from "../../controllers/API";
import { APIClassType } from "../../types/api";
import BaseModal from "../baseModal";
@@ -21,25 +21,35 @@ export default function CodeAreaModal({
setValue,
nodeClass,
setNodeClass,
+ children,
+ dynamic,
}: {
setValue: (value: string) => void;
value: string;
- nodeClass: APIClassType;
- setNodeClass: (Class: APIClassType) => void;
+ nodeClass?: APIClassType;
+ children: ReactNode;
+ setNodeClass?: (Class: APIClassType) => void;
+ dynamic?: boolean;
}) {
const [code, setCode] = useState(value);
const { dark } = useContext(darkContext);
- const { closePopUp, setCloseEdit } = useContext(PopUpContext);
+ const { reactFlowInstance } = useContext(typesContext);
+ const [height, setHeight] = useState(null);
const { setErrorData, setSuccessData } = useContext(alertContext);
+ const [error, setError] = useState<{
+ detail: { error: string; traceback: string };
+ }>(null);
- function setModalOpen(x: boolean) {
- if (x === false) {
- setCloseEdit("codearea");
- closePopUp();
+ useEffect(() => {
+ // if nodeClass.template has more fields other than code and dynamic is true
+ // do not run handleClick
+ if (dynamic && Object.keys(nodeClass.template).length > 2) {
+ return;
}
- }
+ processCode();
+ }, []);
- function handleClick() {
+ function processNonDynamicField() {
postValidateCode(code)
.then((apiReturn) => {
if (apiReturn.data) {
@@ -49,8 +59,9 @@ export default function CodeAreaModal({
setSuccessData({
title: "Code is ready to run",
});
+ setOpen(false);
setValue(code);
- setModalOpen(false);
+ // setValue(code);
} else {
if (funcErrors.length !== 0) {
setErrorData({
@@ -78,17 +89,66 @@ export default function CodeAreaModal({
});
}
+ function processDynamicField() {
+ postCustomComponent(code, nodeClass)
+ .then((apiReturn) => {
+ const { data } = apiReturn;
+ if (data) {
+ setNodeClass(data);
+ setValue(code);
+ setError({ detail: { error: undefined, traceback: undefined } });
+ setOpen(false);
+ }
+ })
+ .catch((err) => {
+ setError(err.response.data);
+ });
+ }
+
+ function processCode() {
+ if (!dynamic) {
+ processNonDynamicField();
+ } else {
+ processDynamicField();
+ }
+ }
+
+ function handleClick() {
+ processCode();
+ }
+
+ useEffect(() => {
+ // Function to be executed after the state changes
+ const delayedFunction = setTimeout(() => {
+ if (error?.detail.error !== undefined) {
+ //trigger to update the height, does not really apply any height
+ setHeight("90%");
+ }
+ //600 to happen after the transition of 500ms
+ }, 600);
+
+ // Cleanup function to clear the timeout if the component unmounts or the state changes again
+ return () => {
+ clearTimeout(delayedFunction);
+ };
+ }, [error, setHeight]);
+
+ const [open, setOpen] = useState(false);
+
+ useEffect(() => {
+ setCode(value);
+ }, [value, open]);
+
return (
-
+
+ {children}
-
- Edit Code
-
-
+ Edit Code
+
@@ -96,6 +156,7 @@ export default function CodeAreaModal({
{
setCode(value);
}}
- className="h-full w-full rounded-lg border-[1px] border-border custom-scroll"
+ className="h-full w-full rounded-lg border-[1px] border-gray-300 custom-scroll dark:border-gray-600"
/>
+
+
+
+ {error?.detail?.error}
+
+
+
+ {error?.detail?.traceback}
+
+
+
+
Check & Save
diff --git a/src/frontend/src/modals/exportModal/index.tsx b/src/frontend/src/modals/exportModal/index.tsx
index fb6867811..ee6434f67 100644
--- a/src/frontend/src/modals/exportModal/index.tsx
+++ b/src/frontend/src/modals/exportModal/index.tsx
@@ -1,60 +1,34 @@
-import { Download } from "lucide-react";
-import { useContext, useRef, useState } from "react";
+import { ReactNode, forwardRef, useContext, useState } from "react";
import EditFlowSettings from "../../components/EditFlowSettingsComponent";
+import IconComponent from "../../components/genericIconComponent";
import { Button } from "../../components/ui/button";
import { Checkbox } from "../../components/ui/checkbox";
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
- DialogTrigger,
-} from "../../components/ui/dialog";
-import { EXPORT_DIALOG_SUBTITLE } from "../../constants";
-import { alertContext } from "../../contexts/alertContext";
-import { PopUpContext } from "../../contexts/popUpContext";
+import { EXPORT_DIALOG_SUBTITLE } from "../../constants/constants";
import { TabsContext } from "../../contexts/tabsContext";
-import { removeApiKeys } from "../../utils";
+import { removeApiKeys } from "../../utils/reactflowUtils";
+import BaseModal from "../baseModal";
-export default function ExportModal() {
- const [open, setOpen] = useState(true);
- const { closePopUp } = useContext(PopUpContext);
- const ref = useRef();
- const { setErrorData } = useContext(alertContext);
+const ExportModal = forwardRef((props: { children: ReactNode }, ref) => {
const { flows, tabId, updateFlow, downloadFlow, saveFlow } =
useContext(TabsContext);
- const [isMaxLength, setIsMaxLength] = useState(false);
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setTimeout(() => {
- closePopUp();
- }, 300);
- }
- }
const [checked, setChecked] = useState(false);
const [name, setName] = useState(flows.find((f) => f.id === tabId).name);
const [description, setDescription] = useState(
flows.find((f) => f.id === tabId).description
);
+ const [open, setOpen] = useState(false);
return (
-
-
-
-
-
- Export
-
-
- {EXPORT_DIALOG_SUBTITLE}
-
-
+
+ {props.children}
+
+ Export
+
+
+
-
+
{
setChecked(event);
}}
/>
-
+
Save with my API keys
+
-
- {
- if (checked)
- downloadFlow(
- flows.find((f) => f.id === tabId),
- name,
- description
- );
- else
- downloadFlow(
- removeApiKeys(flows.find((f) => f.id === tabId)),
- name,
- description
- );
-
- closePopUp();
- }}
- type="submit"
- >
- Download Flow
-
-
-
-
+
+ {
+ if (checked)
+ downloadFlow(
+ flows.find((f) => f.id === tabId),
+ name,
+ description
+ );
+ else
+ downloadFlow(
+ removeApiKeys(flows.find((f) => f.id === tabId)),
+ name,
+ description
+ );
+ setOpen(false);
+ }}
+ type="submit"
+ >
+ Download Flow
+
+
+
);
-}
+});
+export default ExportModal;
diff --git a/src/frontend/src/modals/flowSettingsModal/index.tsx b/src/frontend/src/modals/flowSettingsModal/index.tsx
index 44f82e331..7f9e2e6e9 100644
--- a/src/frontend/src/modals/flowSettingsModal/index.tsx
+++ b/src/frontend/src/modals/flowSettingsModal/index.tsx
@@ -1,24 +1,19 @@
-import { Settings2 } from "lucide-react";
import { useContext, useRef, useState } from "react";
import EditFlowSettings from "../../components/EditFlowSettingsComponent";
+import IconComponent from "../../components/genericIconComponent";
import { Button } from "../../components/ui/button";
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
- DialogTrigger,
-} from "../../components/ui/dialog";
-import { SETTINGS_DIALOG_SUBTITLE } from "../../constants";
+import { SETTINGS_DIALOG_SUBTITLE } from "../../constants/constants";
import { alertContext } from "../../contexts/alertContext";
-import { PopUpContext } from "../../contexts/popUpContext";
import { TabsContext } from "../../contexts/tabsContext";
+import BaseModal from "../baseModal";
-export default function FlowSettingsModal() {
- const [open, setOpen] = useState(true);
- const { closePopUp } = useContext(PopUpContext);
+export default function FlowSettingsModal({
+ open,
+ setOpen,
+}: {
+ open: boolean;
+ setOpen: (open: boolean) => void;
+}) {
const { setErrorData, setSuccessData } = useContext(alertContext);
const ref = useRef();
const { flows, tabId, updateFlow, setTabsState, saveFlow } =
@@ -28,35 +23,26 @@ export default function FlowSettingsModal() {
const [description, setDescription] = useState(
flows.find((f) => f.id === tabId).description
);
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setTimeout(() => {
- closePopUp();
- }, 300);
- }
- }
+ const [invalidName, setInvalidName] = useState(false);
+
function handleClick() {
let savedFlow = flows.find((f) => f.id === tabId);
savedFlow.name = name;
savedFlow.description = description;
saveFlow(savedFlow);
setSuccessData({ title: "Changes saved successfully" });
- closePopUp();
+ setOpen(false);
}
return (
-
-
-
-
-
- Settings
-
-
- {SETTINGS_DIALOG_SUBTITLE}
-
-
+
+
+ Settings
+
+
+
+
-
-
- Save
-
-
-
-
+
+
+ Save
+
+
+
);
}
diff --git a/src/frontend/src/modals/formModal/chatInput/index.tsx b/src/frontend/src/modals/formModal/chatInput/index.tsx
index ec62c0505..e8be2f292 100644
--- a/src/frontend/src/modals/formModal/chatInput/index.tsx
+++ b/src/frontend/src/modals/formModal/chatInput/index.tsx
@@ -1,6 +1,7 @@
-import { Lock, LucideSend, Sparkles } from "lucide-react";
import { useEffect } from "react";
-import { classNames } from "../../../utils";
+import IconComponent from "../../../components/genericIconComponent";
+import { Textarea } from "../../../components/ui/textarea";
+import { classNames } from "../../../utils/utils";
export default function ChatInput({
lockChat,
@@ -25,7 +26,7 @@ export default function ChatInput({
return (
-
diff --git a/src/frontend/src/modals/formModal/chatMessage/codeBlock/index.tsx b/src/frontend/src/modals/formModal/chatMessage/codeBlock/index.tsx
index 884215ebb..ce121a7cf 100644
--- a/src/frontend/src/modals/formModal/chatMessage/codeBlock/index.tsx
+++ b/src/frontend/src/modals/formModal/chatMessage/codeBlock/index.tsx
@@ -2,7 +2,7 @@ import { IconCheck, IconClipboard, IconDownload } from "@tabler/icons-react";
import { useState } from "react";
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism";
-import { programmingLanguages } from "../../../../utils";
+import { programmingLanguages } from "../../../../constants/constants";
interface Props {
language: string;
diff --git a/src/frontend/src/modals/formModal/chatMessage/index.tsx b/src/frontend/src/modals/formModal/chatMessage/index.tsx
index 953aed530..08cc2d22b 100644
--- a/src/frontend/src/modals/formModal/chatMessage/index.tsx
+++ b/src/frontend/src/modals/formModal/chatMessage/index.tsx
@@ -1,5 +1,4 @@
import Convert from "ansi-to-html";
-import { ChevronDown } from "lucide-react";
import { useMemo, useState } from "react";
import ReactMarkdown from "react-markdown";
import rehypeMathjax from "rehype-mathjax";
@@ -8,11 +7,11 @@ import remarkMath from "remark-math";
import MaleTechnology from "../../../assets/male-technologist.png";
import Robot from "../../../assets/robot.png";
import SanitizedHTMLWrapper from "../../../components/SanitizedHTMLWrapper";
-import { THOUGHTS_ICON } from "../../../constants";
+import CodeTabsComponent from "../../../components/codeTabsComponent";
+import IconComponent from "../../../components/genericIconComponent";
import { ChatMessageType } from "../../../types/chat";
-import { classNames } from "../../../utils";
+import { classNames } from "../../../utils/utils";
import FileCard from "../fileComponent";
-import { CodeBlock } from "./codeBlock";
export default function ChatMessage({
chat,
lockChat,
@@ -61,7 +60,10 @@ export default function ChatMessage({
onClick={() => setHidden((prev) => !prev)}
className="form-modal-chat-icon-div"
>
-
+
)}
{chat.thought && chat.thought !== "" && !hidden && (
@@ -76,57 +78,75 @@ export default function ChatMessage({
{useMemo(
- () => (
- {
- if (children.length) {
- if (children[0] === "โ") {
- return (
-
- โ
-
+ () =>
+ chat.message.toString() === "" && lockChat ? (
+
+ ) : (
+ {props.children}>;
+ },
+ code: ({
+ node,
+ inline,
+ className,
+ children,
+ ...props
+ }) => {
+ if (children.length) {
+ if (children[0] === "โ") {
+ return (
+
+ โ
+
+ );
+ }
+
+ children[0] = (children[0] as string).replace(
+ "`โ`",
+ "โ"
);
}
- children[0] = (children[0] as string).replace(
- "`โ`",
- "โ"
+ const match = /language-(\w+)/.exec(
+ className || ""
);
- }
- const match = /language-(\w+)/.exec(
- className || ""
- );
-
- return !inline ? (
-
- ) : (
-
- {children}
-
- );
- },
- }}
- >
- {chat.message.toString()}
-
- ),
+ return !inline ? (
+ {}}
+ />
+ ) : (
+
+ {children}
+
+ );
+ },
+ }}
+ >
+ {chat.message.toString()}
+
+ ),
[chat.message, chat.message.toString()]
)}
@@ -160,7 +180,8 @@ export default function ChatMessage({
}}
>
Display Prompt
-
{
@@ -41,7 +41,10 @@ export default function FileCard({ fileName, content, fileType }) {
className="file-card-modal-image-button "
onClick={handleDownload}
>
-
+
)}
@@ -60,14 +63,17 @@ export default function FileCard({ fileName, content, fileType }) {
className="h-8 w-8"
/>
) : (
-
+
)}
{" "}
{fileName}
{fileType}
-
+
);
diff --git a/src/frontend/src/modals/formModal/index.tsx b/src/frontend/src/modals/formModal/index.tsx
index 12f7683b3..751eacea1 100644
--- a/src/frontend/src/modals/formModal/index.tsx
+++ b/src/frontend/src/modals/formModal/index.tsx
@@ -1,22 +1,17 @@
-import { Eraser, TerminalSquare, Variable } from "lucide-react";
import { useContext, useEffect, useRef, useState } from "react";
import { alertContext } from "../../contexts/alertContext";
import { typesContext } from "../../contexts/typesContext";
import { sendAllProps } from "../../types/api";
import { ChatMessageType } from "../../types/chat";
import { FlowType } from "../../types/flow";
-import { classNames, validateNodes } from "../../utils";
+import { classNames } from "../../utils/utils";
import ChatInput from "./chatInput";
import ChatMessage from "./chatMessage";
import _ from "lodash";
+import AccordionComponent from "../../components/AccordionComponent";
+import IconComponent from "../../components/genericIconComponent";
import ToggleShadComponent from "../../components/toggleShadComponent";
-import {
- Accordion,
- AccordionContent,
- AccordionItem,
- AccordionTrigger,
-} from "../../components/ui/accordion";
import { Badge } from "../../components/ui/badge";
import {
Dialog,
@@ -27,8 +22,9 @@ import {
DialogTrigger,
} from "../../components/ui/dialog";
import { Textarea } from "../../components/ui/textarea";
-import { CHAT_FORM_DIALOG_SUBTITLE, THOUGHTS_ICON } from "../../constants";
+import { CHAT_FORM_DIALOG_SUBTITLE } from "../../constants/constants";
import { TabsContext } from "../../contexts/tabsContext";
+import { validateNodes } from "../../utils/reactflowUtils";
export default function FormModal({
flow,
@@ -36,7 +32,7 @@ export default function FormModal({
setOpen,
}: {
open: boolean;
- setOpen: Function;
+ setOpen: (open: boolean) => void;
flow: FlowType;
}) {
const { tabsState, setTabsState } = useContext(TabsContext);
@@ -116,7 +112,6 @@ export default function FormModal({
return newChat;
});
};
-
//add proper type signature for function
function updateLastMessage({
@@ -375,10 +370,6 @@ export default function FormModal({
if (lockChat) setLockChat(false);
}
- function setModalOpen(x: boolean) {
- setOpen(x);
- }
-
function handleOnCheckedChange(checked: boolean, i: string) {
if (checked === true) {
setChatKey(i);
@@ -388,16 +379,18 @@ export default function FormModal({
setChatValue("");
}
}
+
return (
-
-
+
+
{tabsState[flow.id].formKeysData && (
Chat
-
@@ -407,7 +400,10 @@ export default function FormModal({
-
+
Input Variables
@@ -422,86 +418,105 @@ export default function FormModal({
-
- {Object.keys(tabsState[id.current].formKeysData.input_keys).map(
- (i, k) => (
-
-
-
-
-
- {i}
-
-
{
- event.stopPropagation();
- }}
- >
-
- handleOnCheckedChange(value, i)
- }
- size="small"
- disabled={tabsState[
- id.current
- ].formKeysData.handle_keys.some((t) => t === i)}
- />
-
-
-
-
-
- {tabsState[
- id.current
- ].formKeysData.handle_keys.some((t) => t === i) && (
-
- Source: Component
-
- )}
-
+ ))}
clearChat()}>
-
Start a conversation and click the agent's thoughts{" "}
-
+
{" "}
to inspect the chaining process.
diff --git a/src/frontend/src/modals/genericModal/index.tsx b/src/frontend/src/modals/genericModal/index.tsx
index fa26af1be..df9d32f6d 100644
--- a/src/frontend/src/modals/genericModal/index.tsx
+++ b/src/frontend/src/modals/genericModal/index.tsx
@@ -1,29 +1,26 @@
-import { FileText, Variable } from "lucide-react";
-import { useContext, useEffect, useRef, useState } from "react";
+import { ReactNode, useContext, useEffect, useRef, useState } from "react";
import SanitizedHTMLWrapper from "../../components/SanitizedHTMLWrapper";
import ShadTooltip from "../../components/ShadTooltipComponent";
+import IconComponent from "../../components/genericIconComponent";
import { Badge } from "../../components/ui/badge";
import { Button } from "../../components/ui/button";
-import { DialogTitle } from "../../components/ui/dialog";
import { Textarea } from "../../components/ui/textarea";
import {
+ INVALID_CHARACTERS,
MAX_WORDS_HIGHLIGHT,
PROMPT_DIALOG_SUBTITLE,
TEXT_DIALOG_SUBTITLE,
-} from "../../constants";
+ regexHighlight,
+} from "../../constants/constants";
+import { TypeModal } from "../../constants/enums";
import { alertContext } from "../../contexts/alertContext";
-import { darkContext } from "../../contexts/darkContext";
-import { PopUpContext } from "../../contexts/popUpContext";
import { postValidatePrompt } from "../../controllers/API";
import { APIClassType } from "../../types/api";
import {
- INVALID_CHARACTERS,
- TypeModal,
classNames,
getRandomKeyByssmm,
- regexHighlight,
varHighlightHTML,
-} from "../../utils";
+} from "../../utils/utils";
import BaseModal from "../baseModal";
export default function GenericModal({
@@ -35,6 +32,7 @@ export default function GenericModal({
type,
nodeClass,
setNodeClass,
+ children,
}: {
field_name?: string;
setValue: (value: string) => void;
@@ -42,6 +40,7 @@ export default function GenericModal({
buttonText: string;
modalTitle: string;
type: number;
+ children: ReactNode;
nodeClass?: APIClassType;
setNodeClass?: (Class: APIClassType) => void;
}) {
@@ -51,17 +50,9 @@ export default function GenericModal({
const [inputValue, setInputValue] = useState(value);
const [isEdit, setIsEdit] = useState(true);
const [wordsHighlight, setWordsHighlight] = useState([]);
- const { dark } = useContext(darkContext);
const { setErrorData, setSuccessData, setNoticeData } =
useContext(alertContext);
- const { closePopUp, setCloseEdit } = useContext(PopUpContext);
const ref = useRef();
- function setModalOpen(x: boolean) {
- if (x === false) {
- setCloseEdit("generic");
- closePopUp();
- }
- }
const divRef = useRef(null);
const divRefPrompt = useRef(null);
@@ -105,6 +96,10 @@ export default function GenericModal({
}
}, [inputValue, type]);
+ useEffect(() => {
+ setInputValue(value);
+ }, [value]);
+
const coloredContent = (inputValue || "")
.replace(//g, ">")
@@ -138,7 +133,6 @@ export default function GenericModal({
postValidatePrompt(field_name, inputValue, nodeClass)
.then((apiReturn) => {
if (apiReturn.data) {
- setNodeClass(apiReturn.data?.frontend_node);
let inputVariables = apiReturn.data.input_variables ?? [];
if (inputVariables && inputVariables.length === 0) {
setIsEdit(true);
@@ -150,6 +144,7 @@ export default function GenericModal({
setSuccessData({
title: "Prompt is ready",
});
+ setNodeClass(apiReturn.data?.frontend_node);
setModalOpen(closeModal);
setValue(inputValue);
}
@@ -170,8 +165,11 @@ export default function GenericModal({
});
}
+ const [modalOpen, setModalOpen] = useState(false);
+
return (
-
+
+ {children}
{
switch (myModalTitle) {
@@ -186,14 +184,12 @@ export default function GenericModal({
}
})()}
>
-
- {myModalTitle}
-
-
+ {myModalTitle}
+
@@ -244,7 +240,10 @@ export default function GenericModal({
className="max-h-20 overflow-y-auto custom-scroll"
>
-
+
Prompt Variables:
@@ -274,7 +273,7 @@ export default function GenericModal({
))}
-
+
Prompt variables can be created with any chosen name inside
curly brackets, e.g. {"{variable_name}"}
@@ -284,11 +283,11 @@ export default function GenericModal({
{
switch (myModalType) {
- case 1:
+ case TypeModal.TEXT:
setValue(inputValue);
setModalOpen(false);
break;
- case 2:
+ case TypeModal.PROMPT:
!inputValue || inputValue === ""
? setModalOpen(false)
: validatePrompt(false);
diff --git a/src/frontend/src/modals/importModal/buttonBox/index.tsx b/src/frontend/src/modals/importModal/buttonBox/index.tsx
index a1116a8d4..0a998d56e 100644
--- a/src/frontend/src/modals/importModal/buttonBox/index.tsx
+++ b/src/frontend/src/modals/importModal/buttonBox/index.tsx
@@ -1,5 +1,5 @@
import { ReactNode } from "react";
-import { classNames } from "../../../utils";
+import { classNames } from "../../../utils/utils";
export default function ButtonBox({
onClick,
diff --git a/src/frontend/src/modals/importModal/index.tsx b/src/frontend/src/modals/importModal/index.tsx
index 4302fd9d8..f7d798239 100644
--- a/src/frontend/src/modals/importModal/index.tsx
+++ b/src/frontend/src/modals/importModal/index.tsx
@@ -15,32 +15,22 @@ import {
DialogTitle,
DialogTrigger,
} from "../../components/ui/dialog";
-import { IMPORT_DIALOG_SUBTITLE } from "../../constants";
+import { IMPORT_DIALOG_SUBTITLE } from "../../constants/constants";
import { alertContext } from "../../contexts/alertContext";
-import { PopUpContext } from "../../contexts/popUpContext";
import { TabsContext } from "../../contexts/tabsContext";
import { getExamples } from "../../controllers/API";
import { FlowType } from "../../types/flow";
-import { classNames } from "../../utils";
+import { classNames } from "../../utils/utils";
import ButtonBox from "./buttonBox";
export default function ImportModal() {
const [open, setOpen] = useState(true);
const { setErrorData } = useContext(alertContext);
- const { closePopUp } = useContext(PopUpContext);
const ref = useRef();
const [showExamples, setShowExamples] = useState(false);
const [loadingExamples, setLoadingExamples] = useState(false);
const [examples, setExamples] = useState([]);
const { uploadFlow, addFlow } = useContext(TabsContext);
- function setModalOpen(x: boolean) {
- setOpen(x);
- if (x === false) {
- setTimeout(() => {
- closePopUp();
- }, 300);
- }
- }
function handleExamples() {
setLoadingExamples(true);
@@ -57,8 +47,10 @@ export default function ImportModal() {
);
}
+ const [modalOpen, setModalOpen] = useState(false);
+
return (
-
+
{
setTabId("");
}, []);
const { setErrorData } = useContext(alertContext);
const [loadingExamples, setLoadingExamples] = useState(false);
const [examples, setExamples] = useState([]);
+
+ // Show community examples on screen
function handleExamples() {
setLoadingExamples(true);
getExamples()
@@ -33,6 +37,7 @@ export default function CommunityPage() {
}
const navigate = useNavigate();
+ // Show community examples on page start
useEffect(() => {
handleExamples();
}, []);
@@ -40,7 +45,7 @@ export default function CommunityPage() {
-
+
Community Examples
@@ -50,7 +55,10 @@ export default function CommunityPage() {
rel="noreferrer"
>
-
+
Add Your Example
@@ -79,7 +87,10 @@ export default function CommunityPage() {
});
}}
>
-
+
Fork Example
}
diff --git a/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx
index d49a099a5..d48f0d812 100644
--- a/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx
@@ -1,5 +1,5 @@
import { Disclosure } from "@headlessui/react";
-import { ChevronRight } from "lucide-react";
+import IconComponent from "../../../../components/genericIconComponent";
import { DisclosureComponentType } from "../../../../types/components";
export default function DisclosureComponent({
@@ -24,7 +24,8 @@ export default function DisclosureComponent({
))}
-
{
- if (
- (event.ctrlKey || event.metaKey) &&
- event.key === "c" &&
- lastSelection &&
- !disableCopyPaste
- ) {
- event.preventDefault();
- setLastCopiedSelection(_.cloneDeep(lastSelection));
- }
- if (
- (event.ctrlKey || event.metaKey) &&
- event.key === "v" &&
- lastCopiedSelection &&
- !disableCopyPaste
- ) {
- event.preventDefault();
- let bounds = reactFlowWrapper.current.getBoundingClientRect();
- paste(lastCopiedSelection, {
- x: position.x - bounds.left,
- y: position.y - bounds.top,
- });
- }
- if (
- (event.ctrlKey || event.metaKey) &&
- event.key === "g" &&
- lastSelection
- ) {
- event.preventDefault();
- // addFlow(newFlow, false);
+ if (!isWrappedWithClass(event, "nocopy")) {
+ if (
+ (event.ctrlKey || event.metaKey) &&
+ event.key === "c" &&
+ lastSelection
+ ) {
+ event.preventDefault();
+ setLastCopiedSelection(_.cloneDeep(lastSelection));
+ }
+ if (
+ (event.ctrlKey || event.metaKey) &&
+ event.key === "v" &&
+ lastCopiedSelection
+ ) {
+ event.preventDefault();
+ let bounds = reactFlowWrapper.current.getBoundingClientRect();
+ paste(lastCopiedSelection, {
+ x: position.x - bounds.left,
+ y: position.y - bounds.top,
+ });
+ }
+ if (
+ (event.ctrlKey || event.metaKey) &&
+ event.key === "g" &&
+ lastSelection
+ ) {
+ event.preventDefault();
+ }
}
};
const handleMouseMove = (event) => {
@@ -125,7 +124,7 @@ export default function Page({ flow }: { flow: FlowType }) {
updateFlow(flow);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [nodes, edges]);
+ }, [edges]);
//update flow when tabs change
useEffect(() => {
setNodes(flow?.data?.nodes ?? []);
@@ -356,8 +355,6 @@ export default function Page({ flow }: { flow: FlowType }) {
setLastSelection(flow);
}, []);
- const { setDisableCopyPaste } = useContext(TabsContext);
-
return (
@@ -379,15 +376,6 @@ export default function Page({ flow }: { flow: FlowType }) {
});
}}
edges={edges}
- onPaneClick={() => {
- setDisableCopyPaste(false);
- }}
- onPaneMouseLeave={() => {
- setDisableCopyPaste(true);
- }}
- onPaneMouseEnter={() => {
- setDisableCopyPaste(false);
- }}
onNodesChange={onNodesChangeMod}
onEdgesChange={onEdgesChangeMod}
onConnect={onConnect}
@@ -408,9 +396,6 @@ export default function Page({ flow }: { flow: FlowType }) {
onDrop={onDrop}
onNodesDelete={onDelete}
onSelectionChange={onSelectionChange}
- nodesDraggable={!disableCopyPaste}
- panOnDrag={!disableCopyPaste}
- zoomOnDoubleClick={!disableCopyPaste}
className="theme-attribution"
minZoom={0.01}
maxZoom={8}
diff --git a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx
index f7223d67a..5413d6ec9 100644
--- a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx
@@ -1,26 +1,25 @@
-import { Code2, FileDown, FileUp, Menu, Save, Search } from "lucide-react";
-import { useContext, useState } from "react";
+import { useContext, useEffect, useState } from "react";
import ShadTooltip from "../../../../components/ShadTooltipComponent";
+import IconComponent from "../../../../components/genericIconComponent";
+import { Input } from "../../../../components/ui/input";
import { Separator } from "../../../../components/ui/separator";
import { alertContext } from "../../../../contexts/alertContext";
-import { PopUpContext } from "../../../../contexts/popUpContext";
import { TabsContext } from "../../../../contexts/tabsContext";
import { typesContext } from "../../../../contexts/typesContext";
import ApiModal from "../../../../modals/ApiModal";
import ExportModal from "../../../../modals/exportModal";
import { APIClassType, APIObjectType } from "../../../../types/api";
import {
- classNames,
nodeColors,
nodeIconsLucide,
nodeNames,
-} from "../../../../utils";
+} from "../../../../utils/styleUtils";
+import { classNames } from "../../../../utils/utils";
import DisclosureComponent from "../DisclosureComponent";
export default function ExtraSidebar() {
- const { data } = useContext(typesContext);
- const { openPopUp } = useContext(PopUpContext);
- const { flows, tabId, uploadFlow, tabsState, saveFlow } =
+ const { data, templates } = useContext(typesContext);
+ const { flows, tabId, uploadFlow, tabsState, saveFlow, isBuilt } =
useContext(TabsContext);
const { setSuccessData, setErrorData } = useContext(alertContext);
const [dataFilter, setFilterData] = useState(data);
@@ -41,6 +40,7 @@ export default function ExtraSidebar() {
event.dataTransfer.setData("nodedata", JSON.stringify(data));
}
+ // Handle showing components after use search input
function handleSearchInput(e: string) {
setFilterData((_) => {
let ret = {};
@@ -56,84 +56,105 @@ export default function ExtraSidebar() {
return ret;
});
}
+ const flow = flows.find((f) => f.id === tabId);
+ useEffect(() => {
+ // show components with error on load
+ let errors = [];
+ Object.keys(templates).forEach((component) => {
+ if (templates[component].error) {
+ errors.push(component);
+ }
+ });
+ if (errors.length > 0)
+ setErrorData({ title: " Components with errors: ", list: errors });
+ }, []);
return (
-
- {
- // openPopUp( );
- uploadFlow();
- }}
- >
-
-
+
+
+ {
+ uploadFlow();
+ }}
+ >
+
+
+
+
+
+
+
+ {flow && flow.data && (
+
+
+
+
+
+ )}
+
-
-
- {
- openPopUp( );
- }}
- >
-
-
-
-
- {
- openPopUp( f.id === tabId)} />);
- }}
- >
-
-
-
-
-
- {
- saveFlow(flows.find((f) => f.id === tabId));
- setSuccessData({ title: "Changes saved successfully" });
- }}
- disabled={!isPending}
- >
-
+
+
-
-
+ onClick={(event) => {
+ saveFlow(flow);
+ setSuccessData({ title: "Changes saved successfully" });
+ }}
+ >
+
+
+
+
-
{
handleSearchInput(e.target.value);
+ // Set search input state
setSearch(e.target.value);
}}
/>
- {/* ! replace hash color here */}
-
+
@@ -144,7 +165,7 @@ export default function ExtraSidebar() {
Object.keys(dataFilter[d]).length > 0 ? (
{data[d][t].display_name}
-
+
diff --git a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx
index 0183dcb16..06d8ea06d 100644
--- a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx
@@ -1,29 +1,29 @@
-import { Copy, FileText, Settings2, Trash2 } from "lucide-react";
import { useContext, useState } from "react";
import { useReactFlow } from "reactflow";
import ShadTooltip from "../../../../components/ShadTooltipComponent";
+import IconComponent from "../../../../components/genericIconComponent";
import { TabsContext } from "../../../../contexts/tabsContext";
import EditNodeModal from "../../../../modals/EditNodeModal";
-import { classNames } from "../../../../utils";
+import { classNames } from "../../../../utils/utils";
-const NodeToolbarComponent = (props) => {
+export default function NodeToolbarComponent({ data, setData, deleteNode }) {
const [nodeLength, setNodeLength] = useState(
- Object.keys(props.data.node.template).filter(
+ Object.keys(data.node.template).filter(
(t) =>
t.charAt(0) !== "_" &&
- props.data.node.template[t].show &&
- (props.data.node.template[t].type === "str" ||
- props.data.node.template[t].type === "bool" ||
- props.data.node.template[t].type === "float" ||
- props.data.node.template[t].type === "code" ||
- props.data.node.template[t].type === "prompt" ||
- props.data.node.template[t].type === "file" ||
- props.data.node.template[t].type === "Any" ||
- props.data.node.template[t].type === "int")
+ data.node.template[t].show &&
+ (data.node.template[t].type === "str" ||
+ data.node.template[t].type === "bool" ||
+ data.node.template[t].type === "float" ||
+ data.node.template[t].type === "code" ||
+ data.node.template[t].type === "prompt" ||
+ data.node.template[t].type === "file" ||
+ data.node.template[t].type === "Any" ||
+ data.node.template[t].type === "int")
).length
);
- const { setLastCopiedSelection, paste } = useContext(TabsContext);
+ const { paste } = useContext(TabsContext);
const reactFlowInstance = useReactFlow();
return (
<>
@@ -33,10 +33,10 @@ const NodeToolbarComponent = (props) => {
{
- props.deleteNode(props.data.id);
+ deleteNode(data.id);
}}
>
-
+
@@ -49,167 +49,71 @@ const NodeToolbarComponent = (props) => {
event.preventDefault();
paste(
{
- nodes: [reactFlowInstance.getNode(props.data.id)],
+ nodes: [reactFlowInstance.getNode(data.id)],
edges: [],
},
{
x: 50,
y: 10,
- paneX: reactFlowInstance.getNode(props.data.id).position.x,
- paneY: reactFlowInstance.getNode(props.data.id).position.y,
+ paneX: reactFlowInstance.getNode(data.id).position.x,
+ paneY: reactFlowInstance.getNode(data.id).position.y,
}
);
}}
>
-
+
{
- if (props.data.node.documentation === "") {
+ if (data.node.documentation === "") {
event.preventDefault();
}
}}
>
-
+
- {
- if (nodeLength == 0) {
- event.preventDefault();
- }
- event.preventDefault();
- props.openPopUp( );
- }}
- >
-
-
-
-
- {/*
-
-
-
-
-
-
-
-
-
+
-
-
-
- {({ active }) => (
- {
- event.preventDefault();
- props.openPopUp(
-
- );
- }}
- className={classNames(
- active
- ? "bg-muted text-gray-900"
- : "text-foreground",
- "w-full group flex items-center px-4 py-2 text-sm"
- )}
- >
-
- Edit
-
- )}
-
-
- {({ active }) => (
- {
- event.preventDefault();
- console.log(
- reactFlowInstance.getNode(props.data.id)
- );
- paste(
- {
- nodes: [
- reactFlowInstance.getNode(props.data.id),
- ],
- edges: [],
- },
- {
- x: 50,
- y: 10,
- paneX: reactFlowInstance.getNode(props.data.id)
- .position.x,
- paneY: reactFlowInstance.getNode(props.data.id)
- .position.y,
- }
- );
- }}
- className={classNames(
- active
- ? "bg-muted text-gray-900"
- : "text-foreground",
- "w-full group flex items-center px-4 py-2 text-sm"
- )}
- >
-
- Duplicate
-
- )}
-
-
-
-
-
- */}
+
+
+
+
+
+
>
);
-};
-
-export default NodeToolbarComponent;
+}
diff --git a/src/frontend/src/pages/FlowPage/index.tsx b/src/frontend/src/pages/FlowPage/index.tsx
index f9b170197..f47a485ff 100644
--- a/src/frontend/src/pages/FlowPage/index.tsx
+++ b/src/frontend/src/pages/FlowPage/index.tsx
@@ -7,6 +7,8 @@ import Page from "./components/PageComponent";
export default function FlowPage() {
const { flows, tabId, setTabId } = useContext(TabsContext);
const { id } = useParams();
+
+ // Set flow tab id
useEffect(() => {
setTabId(id);
}, [id]);
diff --git a/src/frontend/src/pages/MainPage/index.tsx b/src/frontend/src/pages/MainPage/index.tsx
index e2871a313..63be47718 100644
--- a/src/frontend/src/pages/MainPage/index.tsx
+++ b/src/frontend/src/pages/MainPage/index.tsx
@@ -1,22 +1,26 @@
-import { Download, ExternalLink, Home, Plus, Upload } from "lucide-react";
import { useContext, useEffect } from "react";
import { Link, useNavigate } from "react-router-dom";
import { CardComponent } from "../../components/cardComponent";
+import IconComponent from "../../components/genericIconComponent";
import { Button } from "../../components/ui/button";
-import { USER_PROJECTS_HEADER } from "../../constants";
+import { USER_PROJECTS_HEADER } from "../../constants/constants";
import { TabsContext } from "../../contexts/tabsContext";
export default function HomePage() {
const { flows, setTabId, downloadFlows, uploadFlows, addFlow, removeFlow } =
useContext(TabsContext);
+
+ // Set a null id
useEffect(() => {
setTabId("");
}, []);
const navigate = useNavigate();
+
+ // Personal flows display
return (
-
+
{USER_PROJECTS_HEADER}
@@ -26,7 +30,7 @@ export default function HomePage() {
downloadFlows();
}}
>
-
+
Download Collection
-
+
Upload Collection
-
+
New Project
@@ -67,7 +71,10 @@ export default function HomePage() {
size="sm"
className="whitespace-nowrap "
>
-
+
Edit Flow
diff --git a/src/frontend/src/index.css b/src/frontend/src/style/applies.css
similarity index 50%
rename from src/frontend/src/index.css
rename to src/frontend/src/style/applies.css
index ffba3b082..a5f5ecafc 100644
--- a/src/frontend/src/index.css
+++ b/src/frontend/src/style/applies.css
@@ -2,125 +2,6 @@
@tailwind components;
@tailwind utilities;
-
-/* TODO: Confirm that all colors here are found in tailwind config */
-
-@layer base {
-
- :root {
- --background: 0 0% 100%; /* hsl(0 0% 100%) */
- --foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
- --muted: 210 40% 98%; /* hsl(210 40% 98%) */
- --muted-foreground: 215.4 16.3% 46.9%; /* hsl(215 16% 46%) */
- --popover: 0 0% 100%; /* hsl(0 0% 100%) */
- --popover-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
- --card: 0 0% 100%; /* hsl(0 0% 100%) */
- --card-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
- --border: 214.3 21.8% 91.4%; /* hsl(214 32% 91%) */
- --input: 214.3 21.8% 91.4%; /* hsl(214 32% 91%) */
- --primary: 222.2 27% 11.2%; /* hsl(222 27% 18%) */
- --primary-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
- --secondary: 210 40% 96.1%; /* hsl(210 40% 96%) */
- --secondary-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
- --accent: 210 30% 96.1%; /* hsl(210 30% 96%) */
- --accent-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
- --destructive: 0 100% 50%; /* hsl(0 100% 50%) */
- --destructive-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
- --radius: 0.5rem;
- --ring: 215 20.2% 65.1%; /* hsl(215 20% 65%) */
- --round-btn-shadow: #00000063;
-
- --error-background: #fef2f2;
- --error-foreground: #991b1b;
-
- --success-background: #f0fdf4;
- --success-foreground: #14532d;
-
- --info-background: #f0f4fd;
- --info-foreground: #141653;
-
- --high-indigo: #4338ca;
- --medium-indigo: #6366f1;
-
- --chat-bot-icon: #afe6ef;
- --chat-user-icon: #aface9;
-
- /* Colors that are shared in dark and light mode */
- --blur-shared: #151923de;
- --build-trigger: #dc735b;
- --chat-trigger: #5c8be1;
- --chat-trigger-disabled: #b4c3da;
- --status-red: #ef4444;
- --status-yellow: #eab308;
- --status-green: #4ade80;
- --status-blue:#2563eb;
- --connection: #555;
-
-}
-
-.dark {
- --background: 224 35% 7.5%; /* hsl(224 40% 10%) */
- --foreground: 213 31% 80%; /* hsl(213 31% 91%) */
-
- --muted: 223 27% 11%; /* hsl(223 27% 11%) */
- --muted-foreground: 215.4 16.3% 56.9%; /* hsl(215 16% 56%) */
-
- --popover: 224 71% 4%; /* hsl(224 71% 4%) */
- --popover-foreground: 215 20.2% 65.1%; /* hsl(215 20% 65%) */
-
- --card: 224 25% 15.5%; /* hsl(224 71% 4%) */
- --card-foreground: 213 31% 80%; /* hsl(213 31% 91%) */
-
- --border: 216 24% 17%; /* hsl(216 34% 17%) */
- --input: 216 24% 17%; /* hsl(216 34% 17%) */
-
- --primary: 210 20% 80%; /* hsl(210 20% 80%) */
- --primary-foreground: 222.2 27.4% 1.2%; /* hsl(222 47% 1%) */
-
- --secondary: 222.2 37.4% 7.2%; /* hsl(222 47% 11%) */
- --secondary-foreground: 210 40% 80%; /* hsl(210 40% 80%) */
-
- --accent: 216 24% 20%; /* hsl(216 34% 17%) */
- --accent-foreground: 210 30% 98%; /* hsl(210 40% 98%) */
-
- --destructive: 0 63% 31%; /* hsl(0 63% 31%) */
- --destructive-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
-
- --ring: 216 24% 30%; /* hsl(216 24% 30%) */
-
- --radius: 0.5rem;
-
- --round-btn-shadow: #00000063;
-
- --success-background: #022c22;
- --success-foreground: #ecfdf5;
-
- --error-foreground: #fef2f2;
- --error-background: #450a0a;
-
- --info-foreground: #eff6ff;
- --info-background: #172554;
-
-
- --high-indigo: #4338ca;
- --medium-indigo: #6366f1;
-
- /* Colors that are shared in dark and light mode */
- --blur-shared: #151923d2;
- --build-trigger: #dc735b;
- --chat-trigger: #5c8be1;
- --chat-trigger-disabled: #2d3b54;
- --status-red: #ef4444;
- --status-yellow: #eab308;
- --status-green: #4ade80;
- --status-blue: #2563eb;
- --connection: #555;
-
- --chat-bot-icon: #235d70;
- --chat-user-icon: #4f3d6e;
-
-}}
-
@layer base {
* {
@apply border-border;
@@ -132,967 +13,1010 @@
}
}
-body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
- "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
- sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+@keyframes slideDown {
+ from {
+ height: 0;
+ }
+ to {
+ height: var(--radix-accordion-content-height);
+ }
}
-code {
- font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
- monospace;
+@keyframes slideUp {
+ from {
+ height: var(--radix-accordion-content-height);
+ }
+ to {
+ height: 0;
+ }
}
-/* The style below sets the cursor property of the element with the class .react-flow__pane to the default cursor.
-The cursor: default; property value restores the browser's default cursor style for the targeted element. By applying this style, the element will no longer have a custom cursor appearance such as "grab" or any other custom cursor defined elsewhere in the application. Instead, it will revert to the default cursor style determined by the browser, typically an arrow-shaped cursor. */
-.react-flow__pane {
- cursor: default;
+@keyframes gradient-motion-start {
+ 0% {
+ stop-color: rgb(156, 138, 236);
+ }
+ 50% {
+ stop-color: rgb(255, 130, 184);
+ }
+ 80% {
+ stop-color: rgb(255, 165, 100);
+ }
+ 100% {
+ stop-color: rgb(156, 138, 236);
+ }
}
+@keyframes gradient-motion-end {
+ 0% {
+ stop-color: rgb(156, 138, 236);
+ }
+ 50% {
+ stop-color: rgb(255, 165, 100);
+ }
+ 80% {
+ stop-color: rgb(255, 130, 184);
+ }
+ 100% {
+ stop-color: rgb(156, 138, 236);
+ }
+}
@layer components {
.round-buttons-position {
- @apply fixed right-4
+ @apply fixed right-4;
}
.side-bar-arrangement {
- @apply flex h-full w-52 flex-col overflow-hidden border-r scrollbar-hide
+ @apply flex h-full w-52 flex-col overflow-hidden border-r scrollbar-hide;
}
.side-bar-search-div-placement {
- @apply relative mx-auto mb-2 mt-2 flex items-center
+ @apply relative mx-auto mb-2 mt-2 flex items-center;
}
.side-bar-components-icon {
- @apply h-6 w-4 text-ring
+ @apply h-6 w-4 text-ring;
}
.side-bar-components-text {
- @apply w-full truncate pr-1 text-xs text-foreground
+ @apply w-full truncate pr-1 text-xs text-foreground;
}
.side-bar-components-div-form {
- @apply flex w-full items-center justify-between rounded-md rounded-l-none border border-l-0 border-dashed border-ring bg-white px-3 py-1 text-sm
+ @apply flex w-full items-center justify-between rounded-md rounded-l-none border border-l-0 border-dashed border-ring bg-white px-3 py-1 text-sm;
}
.side-bar-components-border {
- @apply cursor-grab rounded-l-md border-l-8
+ @apply cursor-grab rounded-l-md border-l-8;
}
.side-bar-components-gap {
- @apply flex flex-col gap-2 p-2
+ @apply flex flex-col gap-2 p-2;
}
.side-bar-components-div-arrangement {
- @apply w-full overflow-auto scrollbar-hide
+ @apply w-full overflow-auto scrollbar-hide pb-10;
}
.search-icon {
- @apply absolute inset-y-0 right-0 flex items-center py-1.5 pr-5
+ @apply absolute inset-y-0 right-0 flex items-center py-1.5 pr-5;
}
.extra-side-bar-save-disable {
- @apply text-muted-foreground
+ @apply text-muted-foreground;
}
.extra-side-bar-save-disable:hover {
- @apply hover:text-accent-foreground
+ @apply hover:text-accent-foreground;
}
.side-bar-button-size {
- @apply h-5 w-5
+ @apply h-5 w-5;
}
.side-bar-button-size:hover {
- @apply hover:text-accent-foreground
+ @apply hover:text-accent-foreground;
}
.side-bar-buttons-arrangement {
- @apply mb-2 mt-2 flex w-full items-center justify-between gap-2 px-2
+ @apply mb-2 mt-2 flex w-full items-center justify-between gap-2 px-2;
+ }
+ .side-bar-button {
+ @apply flex w-full;
+ }
+ .button-disable {
+ @apply pointer-events-none;
}
.extra-side-bar-buttons {
- @apply relative inline-flex w-full items-center justify-center rounded-md bg-background px-2 py-2 text-foreground shadow-sm ring-1 ring-inset ring-input transition-all duration-500 ease-in-out
+ @apply relative inline-flex w-full items-center justify-center rounded-md bg-background px-2 py-2 text-foreground shadow-sm ring-1 ring-inset ring-input transition-all duration-500 ease-in-out;
}
.extra-side-bar-buttons:hover {
- @apply hover:bg-muted
+ @apply hover:bg-muted;
}
.button-div-style {
- @apply gap-2 flex
+ @apply flex gap-2;
}
- .input-primary:focus{
- @apply focus:placeholder-transparent focus:ring-ring focus:border-ring
- }
- .input-primary {
- @apply bg-background block border-border form-input px-3 placeholder:text-muted-foreground rounded-md shadow-sm sm:text-sm truncate w-full;
+ .primary-input {
+ @apply form-input block w-full truncate rounded-md border-border bg-background px-3 text-left shadow-sm placeholder:text-muted-foreground focus:border-ring focus:placeholder-transparent focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm;
}
- .input-edit-node{
- @apply input-primary border-border placeholder:text-center pt-0.5 pb-0.5 text-center
+ /* The same as primary-input but no-truncate */
+ .textarea-primary {
+ @apply form-input block w-full rounded-md border-border bg-background px-3 text-left shadow-sm placeholder:text-muted-foreground focus:border-ring focus:placeholder-transparent focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm;
}
- .input-search{
- @apply input-primary pr-7 mx-2
+
+ .input-edit-node {
+ @apply primary-input w-full pb-0.5 pt-0.5 text-left;
}
- .input-disable{
- @apply bg-border placeholder:text-ring border-transparent
+ .input-search {
+ @apply primary-input mx-2 pr-7;
}
- .input-dialog{
- @apply text-ring cursor-pointer bg-transparent
+ .input-disable {
+ @apply border-transparent bg-border placeholder:text-ring;
+ }
+ .input-dialog {
+ @apply cursor-pointer bg-transparent text-ring;
}
.message-button {
- @apply message-button-position flex h-12 w-12 items-center justify-center rounded-full bg-border px-3 py-1 shadow-md transition-all
+ @apply message-button-position flex h-12 w-12 items-center justify-center rounded-full bg-border px-3 py-1 shadow-md transition-all;
}
-
+
.round-button-form {
- @apply flex h-12 w-12 cursor-pointer justify-center rounded-full bg-border px-3 py-1 shadow-md
+ @apply flex h-12 w-12 cursor-pointer justify-center rounded-full bg-border px-3 py-1 shadow-md;
}
.round-button-div {
- @apply flex items-center gap-3
+ @apply flex items-center gap-3;
}
.build-trigger-loading-icon {
- @apply stroke-build-trigger
+ @apply stroke-build-trigger;
}
.build-trigger-icon {
- @apply w-6 fill-build-trigger stroke-1 stroke-build-trigger
+ @apply w-6 fill-build-trigger stroke-build-trigger stroke-1;
}
.message-button-position {
- @apply fixed bottom-4 right-4
+ @apply fixed bottom-4 right-4;
}
.message-button-icon {
- @apply fill-chat-trigger stroke-chat-trigger stroke-1
+ @apply fill-chat-trigger stroke-chat-trigger stroke-1;
}
.disabled-message-button-icon {
- @apply fill-chat-trigger-disabled stroke-chat-trigger-disabled stroke-1
+ @apply fill-chat-trigger-disabled stroke-chat-trigger-disabled stroke-1;
}
.components-disclosure-arrangement {
- @apply -mt-px flex w-full select-none items-center justify-between border-y border-y-input bg-muted px-3 py-2
+ @apply -mt-px flex w-full select-none items-center justify-between border-y border-y-input bg-muted px-3 py-2;
}
.components-disclosure-title {
- @apply flex items-center text-sm text-primary
+ @apply flex items-center text-sm text-primary;
}
.components-disclosure-div {
- @apply flex gap-2
+ @apply flex gap-2;
}
.flow-page-positioning {
- @apply h-full w-full overflow-hidden
+ @apply h-full w-full overflow-hidden;
}
.logspace-page-icon {
- @apply absolute bottom-2 left-7 flex h-6 cursor-pointer flex-col items-center justify-start overflow-hidden rounded-lg bg-foreground px-2 text-center font-sans text-xs tracking-wide text-secondary transition-all duration-500 ease-in-out
+ @apply absolute bottom-2 left-7 flex h-6 cursor-pointer flex-col items-center justify-start overflow-hidden rounded-lg bg-foreground px-2 text-center font-sans text-xs tracking-wide text-secondary transition-all duration-500 ease-in-out;
}
.logspace-page-icon:hover {
- @apply hover:h-12
+ @apply hover:h-12;
}
-
+
.flex-max-width {
- @apply flex w-full
+ @apply flex w-full;
}
.main-page-panel {
- @apply flex-max-width h-full flex-col overflow-auto bg-muted px-16
+ @apply flex-max-width h-full flex-col overflow-auto bg-muted px-16;
}
.main-page-nav-arrangement {
- @apply flex-max-width justify-between px-6 py-12 pb-2
+ @apply flex-max-width justify-between px-6 py-12 pb-2;
}
.main-page-nav-title {
- @apply flex items-center justify-center gap-2 text-2xl font-semibold
+ @apply flex items-center justify-center gap-2 text-2xl font-semibold;
}
.main-page-nav-button {
- @apply mr-2 w-4
+ @apply mr-2 w-4;
}
.main-page-description-text {
- @apply flex w-[60%] px-6 pb-14 text-muted-foreground
+ @apply flex w-[60%] px-6 pb-14 text-muted-foreground;
}
.main-page-flows-display {
- @apply grid w-full gap-4 p-4 md:grid-cols-2 lg:grid-cols-4
+ @apply grid w-full gap-4 p-4 md:grid-cols-2 lg:grid-cols-4;
}
.community-page-arrangement {
- @apply flex-max-width h-full flex-col overflow-auto bg-muted px-16
+ @apply flex-max-width h-full flex-col overflow-auto bg-muted px-16;
}
.community-page-nav-arrangement {
- @apply flex-max-width justify-between px-6 py-12 pb-2
+ @apply flex-max-width justify-between px-6 py-12 pb-2;
}
.community-page-nav-title {
- @apply flex items-center justify-center gap-2 text-2xl font-semibold
+ @apply flex items-center justify-center gap-2 text-2xl font-semibold;
}
.community-page-nav-button {
- @apply flex gap-2
+ @apply flex gap-2;
}
.community-page-description-text {
- @apply flex w-[70%] px-6 pb-8 text-muted-foreground
+ @apply flex w-[70%] px-6 pb-8 text-muted-foreground;
}
.community-pages-flows-panel {
- @apply grid w-full gap-4 p-4 md:grid-cols-2 lg:grid-cols-4
+ @apply grid w-full gap-4 p-4 md:grid-cols-2 lg:grid-cols-4;
}
.generic-node-div {
- @apply relative flex w-96 flex-col justify-center rounded-lg bg-background
+ @apply relative flex w-96 flex-col justify-center rounded-lg bg-background;
}
.generic-node-div-title {
- @apply flex w-full items-center justify-between gap-8 rounded-t-lg border-b bg-muted p-4
+ @apply flex w-full items-center justify-between gap-8 rounded-t-lg border-b bg-muted p-4;
}
.generic-node-title-arrangement {
- @apply flex-max-width items-center truncate
+ @apply flex-max-width items-center truncate;
}
.generic-node-icon {
- @apply h-10 w-10 rounded p-1
+ @apply h-10 w-10 rounded p-1;
}
.generic-node-tooltip-div {
- @apply ml-2 truncate
+ @apply ml-2 truncate;
}
.generic-node-validation-div {
- @apply max-h-96 overflow-auto
+ @apply max-h-96 overflow-auto;
}
.generic-node-status-position {
- @apply relative top-[3px] h-5 w-5
+ @apply relative top-[3px] h-5 w-5;
}
.generic-node-status-animation {
- @apply hidden h-4 w-4 animate-spin rounded-full bg-ring opacity-0
+ @apply hidden h-4 w-4 animate-spin rounded-full bg-ring opacity-0;
}
.generic-node-status {
- @apply h-4 w-4 rounded-full opacity-100
+ @apply h-4 w-4 rounded-full opacity-100;
}
.green-status {
- @apply generic-node-status bg-status-green
+ @apply generic-node-status bg-status-green;
}
.red-status {
- @apply generic-node-status bg-status-red
+ @apply generic-node-status bg-status-red;
}
.yellow-status {
- @apply generic-node-status bg-status-yellow
+ @apply generic-node-status bg-status-yellow;
}
.status-build-animation {
- @apply hidden h-4 w-4 animate-spin rounded-full bg-ring opacity-0
+ @apply hidden h-4 w-4 animate-spin rounded-full bg-ring opacity-0;
}
.status-div {
- @apply absolute w-4 duration-200 ease-in-out
+ @apply absolute w-4 duration-200 ease-in-out;
}
.status-div:hover {
- @apply hover:text-accent-foreground hover:transition-all
+ @apply hover:text-accent-foreground hover:transition-all;
}
.generic-node-desc {
- @apply h-full w-full py-5 text-foreground
+ @apply h-full w-full py-5 text-foreground;
}
.generic-node-desc-text {
- @apply w-full px-5 pb-3 text-sm text-muted-foreground
+ @apply w-full px-5 pb-3 text-sm text-muted-foreground;
}
.alert-icon {
- @apply h-5 w-5
+ @apply h-5 w-5;
}
.alert-font-size {
- @apply text-sm font-medium
+ @apply text-sm font-medium;
}
.error-build-message {
- @apply mt-6 w-96 cursor-pointer rounded-md bg-error-background p-4 shadow-xl
+ @apply mt-6 w-96 cursor-pointer rounded-md bg-error-background p-4 shadow-xl;
}
.error-build-message-circle {
- @apply text-status-red alert-icon
+ @apply alert-icon text-status-red;
}
.error-build-text {
- @apply text-error-foreground
+ @apply text-error-foreground;
}
.error-build-foreground {
- @apply error-build-text alert-font-size
+ @apply error-build-text alert-font-size;
}
.error-build-message-div {
- @apply mt-2 text-sm error-build-text
+ @apply error-build-text mt-2 text-sm;
}
.error-build-message-list {
- @apply list-disc space-y-1 pl-5
+ @apply list-disc space-y-1 pl-5;
}
.success-alert {
- @apply mt-6 w-96 rounded-md bg-success-background p-4 shadow-xl
+ @apply mt-6 w-96 rounded-md bg-success-background p-4 shadow-xl;
}
.success-alert-icon {
- @apply alert-icon text-status-green
+ @apply alert-icon text-status-green;
}
.success-alert-message {
- @apply alert-font-size text-success-foreground
+ @apply alert-font-size text-success-foreground;
}
.card-component-title-display {
- @apply round-button-div flex-max-width
+ @apply round-button-div flex-max-width;
}
.card-component-image {
- @apply flex h-7 w-7 items-center justify-center rounded-full text-2xl
+ @apply flex h-7 w-7 items-center justify-center rounded-full text-2xl;
}
.card-component-title-size {
- @apply inline-block w-full flex-1 break-words truncate-doubleline
+ @apply inline-block w-full flex-1 break-words truncate-doubleline;
}
.card-component-delete-button {
- @apply flex self-start
+ @apply flex self-start;
}
.card-component-delete-icon {
- @apply h-4 w-4 text-primary opacity-0 transition-all group-hover:opacity-100
+ @apply h-4 w-4 text-primary opacity-0 transition-all group-hover:opacity-100;
}
.card-component-desc {
- @apply pb-2 pt-2
+ @apply pb-2 pt-2;
}
.card-component-desc-text {
- @apply truncate-doubleline
+ @apply truncate-doubleline;
}
.card-component-footer-arrangement {
- @apply flex-max-width items-end justify-between gap-2
+ @apply flex-max-width items-end justify-between gap-2;
}
.card-component-footer {
- @apply flex flex-wrap gap-2
+ @apply flex flex-wrap gap-2;
}
.unused-side-bar-aside {
- @apply flex flex-shrink-0 flex-col overflow-hidden border-r transition-all duration-500
+ @apply flex flex-shrink-0 flex-col overflow-hidden border-r transition-all duration-500;
}
.unused-side-bar-arrangement {
- @apply flex h-full w-52 flex-col items-start overflow-y-auto border bg-background scrollbar-hide
+ @apply flex h-full w-52 flex-col items-start overflow-y-auto border bg-background scrollbar-hide;
}
.unused-side-bar-division {
- @apply flex-max-width flex-grow flex-col
+ @apply flex-max-width flex-grow flex-col;
}
.unused-side-bar-nav {
- @apply flex-1 space-y-1
+ @apply flex-1 space-y-1;
}
.unused-side-bar-link {
- @apply flex-max-width items-center rounded-md py-2 pl-2 text-sm font-medium
+ @apply flex-max-width items-center rounded-md py-2 pl-2 text-sm font-medium;
}
.unused-side-bar-link-colors-true {
- @apply bg-muted text-foreground
+ @apply bg-muted text-foreground;
}
.unused-side-bar-link-colors-false {
- @apply bg-background text-muted-foreground hover:bg-muted hover:text-foreground
+ @apply bg-background text-muted-foreground hover:bg-muted hover:text-foreground;
}
.unused-side-bar-icon {
- @apply mr-3 flex-shrink-0 h-6 w-6
+ @apply mr-3 h-6 w-6 flex-shrink-0;
}
.unused-side-bar-icon-false {
- @apply text-ring group-hover:text-accent-foreground
+ @apply text-ring group-hover:text-accent-foreground;
}
.unused-side-bar-disclosure {
- @apply unused-side-bar-link pr-1 text-left
+ @apply unused-side-bar-link pr-1 text-left;
}
.unused-side-bar-disclosure:focus {
- @apply focus:outline-none focus:ring-1 focus:ring-ring
+ @apply focus:outline-none focus:ring-1 focus:ring-ring;
}
.unused-side-bar-disclosure-icon {
- @apply unused-side-bar-icon text-ring group-hover:text-accent-foreground
+ @apply unused-side-bar-icon text-ring group-hover:text-accent-foreground;
}
.unused-side-bar-svg-true {
- @apply text-ring rotate-90
+ @apply rotate-90 text-ring;
}
.unused-side-bar-svg {
- @apply ml-3 h-5 w-5 flex-shrink-0 duration-150 ease-in-out group-hover:text-accent-foreground
+ @apply ml-3 h-5 w-5 flex-shrink-0 duration-150 ease-in-out group-hover:text-accent-foreground;
}
.unused-side-bar-disclosure-panel {
- @apply flex w-full items-center rounded-md py-2 pl-11 pr-2 text-sm font-medium
+ @apply flex w-full items-center rounded-md py-2 pl-11 pr-2 text-sm font-medium;
}
.code-area-component {
- @apply pointer-events-none w-full cursor-not-allowed
+ @apply pointer-events-none w-full cursor-not-allowed;
}
.code-area-input-positioning {
- @apply flex-max-width items-center
+ @apply flex-max-width items-center;
}
.code-area-external-link {
- @apply w-6 h-6 ml-3
+ @apply ml-3 h-6 w-6;
}
.code-area-external-link:hover {
- @apply hover:text-accent-foreground
+ @apply hover:text-accent-foreground;
}
.dropdown-component-outline {
- @apply input-edit-node relative pr-8
+ @apply input-edit-node relative pr-8;
}
.dropdown-component-false-outline {
- @apply input-primary py-2 pl-3 pr-10 text-left
+ @apply primary-input py-2 pl-3 pr-10 text-left;
}
.dropdown-component-display {
- @apply block w-full truncate bg-background
+ @apply block w-full truncate bg-background;
}
.dropdown-component-arrow {
- @apply pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2
+ @apply pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2;
}
.dropdown-component-arrow-color {
- @apply h-5 w-5 extra-side-bar-save-disable
+ @apply extra-side-bar-save-disable h-5 w-5;
}
.dropdown-component-options {
- @apply z-10 mt-1 max-h-60 overflow-auto rounded-md bg-background py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm
+ @apply z-10 mt-1 max-h-60 overflow-auto rounded-md bg-background py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm;
}
.dropdown-component-true-options {
- @apply dropdown-component-options w-[215px]
+ @apply dropdown-component-options lg:w-[32%];
}
.dropdown-component-false-options {
- @apply dropdown-component-options w-full
+ @apply dropdown-component-options w-full;
}
.dropdown-component-option {
- @apply relative cursor-default select-none
+ @apply relative cursor-default select-none;
}
.dropdown-component-false-option {
- @apply dropdown-component-option py-0.5 pl-3 pr-12
+ @apply dropdown-component-option py-0.5 pl-3 pr-12;
}
.dropdown-component-true-option {
- @apply dropdown-component-option py-2 pl-3 pr-9
+ @apply dropdown-component-option py-2 pl-3 pr-9;
}
.dropdown-component-choosal {
- @apply absolute inset-y-0 right-0 flex items-center pr-4
+ @apply absolute inset-y-0 right-0 flex items-center pr-4;
}
.dropdown-component-check-icon {
- @apply h-5 w-5 text-black
+ @apply h-5 w-5 text-black;
}
.edit-flow-arrangement {
- @apply flex justify-between
+ @apply flex justify-between;
}
.edit-flow-span {
- @apply ml-10 animate-pulse text-status-red
+ @apply ml-10 animate-pulse text-status-red;
}
.float-component-pointer {
- @apply pointer-events-none cursor-not-allowed
+ @apply pointer-events-none cursor-not-allowed;
}
.header-menu-bar {
- @apply flex items-center gap-0.5 rounded-md px-1.5 py-1 text-sm font-medium
+ @apply flex items-center gap-0.5 rounded-md px-1.5 py-1 text-sm font-medium;
}
.header-menu-bar-display {
- @apply flex max-w-[200px] items-center gap-2 cursor-pointer
+ @apply flex max-w-[200px] cursor-pointer items-center gap-2;
}
.header-menu-flow-name {
- @apply flex-1 truncate
+ @apply flex-1 truncate;
}
.header-menu-options {
- @apply mr-2 h-4 w-4
+ @apply mr-2 h-4 w-4;
}
.header-arrangement {
- @apply flex-max-width h-12 items-center justify-between border-b bg-muted
+ @apply flex-max-width h-12 items-center justify-between border-border bg-muted;
}
.header-start-display {
- @apply flex w-96 items-center justify-start gap-2
+ @apply flex w-96 items-center justify-start gap-2;
}
.header-end-division {
- @apply flex w-96 justify-end px-2
+ @apply flex w-96 justify-end px-2;
}
.header-end-display {
- @apply ml-auto mr-2 flex items-center gap-5
+ @apply ml-auto mr-2 flex items-center gap-5;
}
.header-github-link-box {
- @apply border border-input h-9 px-3 pr-0 rounded-md inline-flex shadow-sm items-center justify-center
+ @apply inline-flex h-9 items-center justify-center rounded-md border border-input px-3 pr-0 shadow-sm;
}
.header-github-link {
- @apply text-sm font-medium disabled:opacity-50 disabled:pointer-events-none ring-offset-background text-muted-foreground header-github-link-box
+ @apply header-github-link-box text-sm font-medium text-muted-foreground ring-offset-background disabled:pointer-events-none disabled:opacity-50;
}
.header-github-link:focus-visible {
- @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
}
.header-github-link:hover {
- @apply hover:bg-accent hover:text-accent-foreground
+ @apply hover:bg-accent hover:text-accent-foreground;
}
.header-github-display {
- @apply -mr-px ml-2 flex h-9 items-center justify-center rounded-md rounded-l-none border bg-background px-2 text-sm
+ @apply -mr-px ml-2 flex h-9 items-center justify-center rounded-md rounded-l-none border bg-background px-2 text-sm;
}
.header-notifications-box {
- @apply fixed left-0 top-0 h-screen w-screen
+ @apply fixed left-0 top-0 h-screen w-screen;
}
.header-notifications {
- @apply absolute right-[3px] h-1.5 w-1.5 rounded-full bg-destructive
+ @apply absolute right-[3px] h-1.5 w-1.5 rounded-full bg-destructive;
}
.input-component-div {
- @apply pointer-events-none relative cursor-not-allowed
+ @apply pointer-events-none relative cursor-not-allowed;
}
.input-component-button {
- @apply absolute inset-y-0 right-0 items-center text-muted-foreground
+ @apply absolute inset-y-0 right-0 items-center text-muted-foreground;
}
.input-component-true-button {
- @apply input-component-button pr-2
+ @apply input-component-button pr-2;
}
.input-component-false-button {
- @apply input-component-button px-4
+ @apply input-component-button px-4;
}
.input-component-true-svg {
- @apply absolute bottom-0.5 right-2 side-bar-button-size
+ @apply side-bar-button-size absolute bottom-0.5 right-2;
}
.input-component-false-svg {
- @apply absolute bottom-2 right-3 side-bar-button-size
+ @apply side-bar-button-size absolute bottom-2 right-3;
}
-
+
.input-file-component {
- @apply flex-max-width items-center
+ @apply flex-max-width items-center;
}
.toggle-component-switch {
- @apply relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out
+ @apply relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out;
}
.toggle-component-switch:focus {
- @apply focus:outline-none focus:ring-1 focus:ring-primary focus:ring-offset-1
+ @apply focus:outline-none focus:ring-1 focus:ring-primary focus:ring-offset-1;
}
.toggle-component-span {
- @apply pointer-events-none relative inline-block h-5 w-5 transform rounded-full shadow ring-0 transition duration-200 ease-in-out
+ @apply pointer-events-none relative inline-block h-5 w-5 transform rounded-full shadow ring-0 transition duration-200 ease-in-out;
}
.toggle-component-second-span {
- @apply absolute inset-0 flex h-full w-full items-center justify-center transition-opacity
+ @apply absolute inset-0 flex h-full w-full items-center justify-center transition-opacity;
}
.app-div {
- @apply fixed bottom-5 left-5 flex flex-col-reverse
+ @apply fixed bottom-5 left-5 flex flex-col-reverse;
}
.chat-input-modal-txtarea {
- @apply form-input block w-full rounded-md border-ring pr-10 custom-scroll sm:text-sm
+ @apply form-input block w-full rounded-md border-ring pr-10 custom-scroll sm:text-sm;
}
.chat-input-modal-div {
- @apply absolute bottom-0.5 right-3
+ @apply absolute bottom-0.5 right-3;
}
.chat-input-modal-lock {
- @apply side-bar-button-size animate-pulse text-ring
+ @apply side-bar-button-size animate-pulse text-ring;
}
.chat-input-modal-send {
- @apply side-bar-button-size text-ring hover:text-muted-foreground
+ @apply side-bar-button-size text-ring hover:text-muted-foreground;
}
.code-block-modal {
- @apply flex items-center justify-between px-4 py-1.5
+ @apply flex items-center justify-between px-4 py-1.5;
}
.code-block-modal-span {
- @apply text-xs lowercase text-muted-foreground
+ @apply text-xs lowercase text-muted-foreground;
}
.code-block-modal-button {
- @apply flex items-center gap-1.5 rounded bg-none p-1 text-xs text-muted-foreground
+ @apply flex items-center gap-1.5 rounded bg-none p-1 text-xs text-muted-foreground;
}
.chat-message-modal {
- @apply flex-max-width py-2 pl-2
+ @apply flex-max-width py-2 pl-2;
}
.chat-message-modal-div {
- @apply my-3 flex h-8 w-8 items-center justify-center overflow-hidden rounded-full
+ @apply my-3 flex h-8 w-8 items-center justify-center overflow-hidden rounded-full;
}
.chat-message-modal-img {
- @apply absolute scale-150 transition-opacity duration-500
+ @apply absolute scale-150 transition-opacity duration-500;
}
.chat-message-modal-display {
- @apply flex-max-width items-center text-start
+ @apply flex-max-width items-center text-start;
}
.chat-message-modal-text {
- @apply relative inline-block w-full text-start text-sm font-normal text-muted-foreground
+ @apply relative inline-block w-full text-start text-sm font-normal text-muted-foreground;
}
.chat-message-modal-icon-div {
- @apply absolute -left-2 -top-1 cursor-pointer
+ @apply absolute -left-2 -top-1 cursor-pointer;
}
.chat-message-modal-thought {
- @apply ml-3 inline-block h-full w-[95%] rounded-md border border-ring bg-muted px-2 pb-3 pt-3 text-start text-muted-foreground chat-message-modal-thought-cursor
+ @apply chat-message-modal-thought-cursor ml-3 inline-block h-full w-[95%] rounded-md border border-ring bg-muted px-2 pb-3 pt-3 text-start text-muted-foreground;
}
.chat-message-modal-thought-cursor {
- @apply cursor-pointer scrollbar-hide overflow-scroll
+ @apply cursor-pointer overflow-scroll scrollbar-hide;
}
.chat-message-modal-markdown {
- @apply w-full px-4 pb-3 pr-8 pt-3
+ @apply w-full px-4 pb-3 pr-8 pt-3;
}
.chat-message-modal-markdown-span {
- @apply mt-1 animate-pulse cursor-default
+ @apply mt-1 animate-pulse cursor-default;
}
.chat-message-modal-alert {
- @apply inline-block px-3 text-start text-muted-foreground
+ @apply inline-block px-3 text-start text-muted-foreground;
}
.file-card-modal-image-div {
- @apply absolute right-0 top-0 rounded-bl-lg bg-muted px-1 text-sm font-bold text-foreground
+ @apply absolute right-0 top-0 rounded-bl-lg bg-muted px-1 text-sm font-bold text-foreground;
}
.file-card-modal-image-button {
- @apply px-2 py-1 text-ring
+ @apply px-2 py-1 text-ring;
}
.file-card-modal-button {
- @apply flex w-1/2 items-center justify-between rounded border border-ring bg-muted px-2 py-2 text-foreground shadow hover:drop-shadow-lg
+ @apply flex w-1/2 items-center justify-between rounded border border-ring bg-muted px-2 py-2 text-foreground shadow hover:drop-shadow-lg;
}
.file-card-modal-div {
- @apply mr-2 flex-max-width items-center gap-2 text-current
+ @apply flex-max-width mr-2 items-center gap-2 text-current;
}
.file-card-modal-footer {
- @apply flex flex-col items-start
+ @apply flex flex-col items-start;
}
.file-card-modal-name {
- @apply truncate text-sm text-current
+ @apply truncate text-sm text-current;
}
.file-card-modal-type {
- @apply truncate text-xs text-ring
+ @apply truncate text-xs text-ring;
}
.send-message-modal-transition {
- @apply fixed inset-0 bg-black bg-opacity-80 backdrop-blur-sm transition-opacity
+ @apply fixed inset-0 bg-black bg-opacity-80 backdrop-blur-sm transition-opacity;
}
.chat-modal-box {
- @apply fixed inset-0 z-10 overflow-y-auto
+ @apply fixed inset-0 z-10 overflow-y-auto;
}
.chat-modal-box-div {
- @apply flex h-full items-end justify-center p-4 text-center sm:items-center sm:p-0
+ @apply flex h-full items-end justify-center p-4 text-center sm:items-center sm:p-0;
}
.chat-modal-dialog-panel {
- @apply relative flex h-[95%] w-[690px] transform flex-col justify-between overflow-hidden rounded-lg bg-background text-left shadow-xl drop-shadow-2xl transition-all
+ @apply relative flex h-[95%] w-[690px] transform flex-col justify-between overflow-hidden rounded-lg bg-background text-left shadow-xl drop-shadow-2xl transition-all;
}
.chat-modal-dialog-panel-div {
- @apply relative w-full p-4
+ @apply relative w-full p-4;
}
.chat-modal-dialog-trash-panel {
- @apply absolute right-10 top-2 z-30 text-muted-foreground hover:text-status-red
+ @apply absolute right-10 top-2 z-30 text-muted-foreground hover:text-status-red;
}
.chat-modal-dialog-x-panel {
- @apply absolute right-2 top-1.5 z-30 text-muted-foreground hover:text-status-red
+ @apply absolute right-2 top-1.5 z-30 text-muted-foreground hover:text-status-red;
}
.chat-modal-dialog-history {
- @apply flex-max-width h-full flex-col items-center overflow-scroll border-t bg-background scrollbar-hide
+ @apply flex-max-width h-full flex-col items-center overflow-scroll border-t bg-background scrollbar-hide;
}
.chat-modal-dialog-span-box {
- @apply flex-max-width h-full flex-col items-center justify-center text-center align-middle
+ @apply flex-max-width h-full flex-col items-center justify-center text-center align-middle;
}
.chat-modal-dialog-desc {
- @apply w-2/4 rounded-md border border-input bg-muted px-6 py-8
+ @apply w-2/4 rounded-md border border-input bg-muted px-6 py-8;
}
.chat-modal-input-div {
- @apply flex-max-width flex-col items-center justify-between border-t bg-background p-3
+ @apply flex-max-width flex-col items-center justify-between border-t bg-background p-3;
}
.chat-modal-input {
- @apply relative mt-1 w-full rounded-md shadow-sm
+ @apply relative mt-1 w-full rounded-md shadow-sm;
}
.code-area-modal-editor-div {
- @apply mt-2 flex-max-width h-full
+ @apply flex-max-width mt-2 h-full;
}
.code-area-modal-editor-box {
- @apply h-[300px] w-full rounded-lg border-[1px] border-ring custom-scroll
+ @apply h-[300px] w-full rounded-lg border-[1px] border-ring custom-scroll;
}
.edit-node-modal-variable {
- @apply h-5 w-5 stroke-2 pe-1 text-muted-foreground
+ @apply h-5 w-5 stroke-2 pe-1 text-muted-foreground;
}
.edit-node-modal-span {
- @apply text-sm font-semibold text-primary
+ @apply text-sm font-semibold text-primary;
}
.edit-node-modal-arrangement {
- @apply flex-max-width h-fit max-h-[400px]
+ @apply flex-max-width h-fit max-h-[400px];
}
.edit-node-modal-box {
- @apply w-full rounded-lg border-[1px] border-input bg-background
+ @apply w-full rounded-lg border-[1px] border-input bg-background;
}
.edit-node-modal-table {
- @apply flex h-fit flex-col gap-5
+ @apply flex h-fit flex-col gap-5;
}
.edit-node-modal-table-header {
- @apply h-10 border-input text-xs font-medium text-ring
+ @apply h-10 border-input text-xs font-medium text-ring;
}
.edit-node-modal-table-cell {
- @apply p-0 text-center text-sm text-foreground truncate sm:px-3
+ @apply truncate p-0 text-center text-sm text-foreground sm:px-3;
}
.edit-node-modal-second-cell {
- @apply w-[300px] p-0 text-center text-xs text-foreground
+ @apply w-[300px] p-0 text-center text-xs text-foreground;
}
.generic-modal-txtarea-div {
- @apply mt-2 flex-max-width h-full
+ @apply flex-max-width mt-2 h-full;
}
.button-box-modal-div {
- @apply flex transform flex-col items-center justify-center rounded-lg border border-ring text-center shadow hover:scale-105 hover:shadow-lg
+ @apply flex transform flex-col items-center justify-center rounded-lg border border-ring text-center shadow hover:scale-105 hover:shadow-lg;
}
.dialog-header-modal-div {
- @apply absolute left-0 top-2 z-50 hidden pl-4 pt-4 sm:block
+ @apply absolute left-0 top-2 z-50 hidden pl-4 pt-4 sm:block;
}
.dialog-header-modal-button {
- @apply rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2
+ @apply rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2;
}
.dialog-modal-examples-div {
- @apply h-full w-full overflow-y-auto scrollbar-hide
+ @apply h-full w-full overflow-y-auto scrollbar-hide;
}
.dialog-modal-example-true {
- @apply mx-auto flex flex-row flex-wrap items-start justify-center overflow-auto
+ @apply mx-auto flex flex-row flex-wrap items-start justify-center overflow-auto;
}
.dialog-modal-example-false {
- @apply flex flex-row items-center justify-center
+ @apply flex flex-row items-center justify-center;
}
.dialog-modal-button-box-div {
- @apply flex-max-width h-full items-center justify-evenly
+ @apply flex-max-width h-full items-center justify-evenly;
}
.document-icon {
- @apply h-10 w-10 flex-shrink-0
+ @apply h-10 w-10 flex-shrink-0;
}
.loading-component-div {
- @apply flex items-center justify-center align-middle
+ @apply flex items-center justify-center align-middle;
}
.dialog-modal-footer {
- @apply mt-2 flex-max-width items-center justify-center
+ @apply flex-max-width mt-2 items-center justify-center;
}
.dialog-modal-footer-link {
- @apply flex items-center justify-center text-muted-foreground
+ @apply flex items-center justify-center text-muted-foreground;
}
.node-modal-div {
- @apply fixed inset-0 bg-ring bg-opacity-75 transition-opacity
+ @apply fixed inset-0 bg-ring bg-opacity-75 transition-opacity;
}
.node-modal-dialog-arrangement {
- @apply fixed inset-0 z-10 overflow-y-auto
+ @apply fixed inset-0 z-10 overflow-y-auto;
}
.node-modal-dialog-div {
- @apply flex h-full items-end justify-center p-4 text-center sm:items-center sm:p-0
+ @apply flex h-full items-end justify-center p-4 text-center sm:items-center sm:p-0;
}
.node-modal-dialog-panel {
- @apply relative flex h-[600px] w-[700px] transform flex-col justify-between overflow-hidden rounded-lg bg-background text-left shadow-xl transition-all sm:my-8
+ @apply relative flex h-[600px] w-[700px] transform flex-col justify-between overflow-hidden rounded-lg bg-background text-left shadow-xl transition-all sm:my-8;
}
.node-modal-dialog-panel-div {
- @apply absolute right-0 top-0 z-50 hidden pr-4 pt-4 sm:block
+ @apply absolute right-0 top-0 z-50 hidden pr-4 pt-4 sm:block;
}
.node-modal-dialog-button {
- @apply rounded-md text-ring hover:text-accent-foreground
+ @apply rounded-md text-ring hover:text-accent-foreground;
}
.node-modal-dialog-icon-div {
- @apply flex-max-width h-full flex-col items-center justify-center
+ @apply flex-max-width h-full flex-col items-center justify-center;
}
.node-modal-icon-arrangement {
- @apply z-10 flex-max-width justify-center pb-4 shadow-sm
+ @apply flex-max-width z-10 justify-center pb-4 shadow-sm;
}
.node-modal-icon {
- @apply mt-4 h-10 w-10 rounded p-1
+ @apply mt-4 h-10 w-10 rounded p-1;
}
.node-modal-title-div {
- @apply mt-4 text-center sm:ml-4 sm:text-left
+ @apply mt-4 text-center sm:ml-4 sm:text-left;
}
.node-modal-title {
- @apply text-lg font-medium leading-10 text-foreground
+ @apply text-lg font-medium leading-10 text-foreground;
}
.node-modal-template-div {
- @apply flex-max-width h-full flex-row items-center justify-center gap-4 bg-input p-4
+ @apply flex-max-width h-full flex-row items-center justify-center gap-4 bg-input p-4;
}
.node-modal-template {
- @apply w-full rounded-lg bg-background px-4 shadow sm:p-4
+ @apply w-full rounded-lg bg-background px-4 shadow sm:p-4;
}
.node-modal-template-column {
- @apply flex h-full flex-col gap-5
+ @apply flex h-full flex-col gap-5;
}
.node-modal-button-box {
- @apply flex-max-width flex-row-reverse bg-input px-4 pb-3
+ @apply flex-max-width flex-row-reverse bg-input px-4 pb-3;
+ }
+ .link-color {
+ @apply font-semibold text-foreground;
}
.node-modal-button {
- @apply inline-flex w-full justify-center rounded-md border border-transparent bg-status-red px-4 py-2 text-base font-medium text-background shadow-sm hover:bg-ring sm:ml-3 sm:w-auto sm:text-sm
+ @apply inline-flex w-full justify-center rounded-md border border-transparent bg-status-red px-4 py-2 text-base font-medium text-background shadow-sm hover:bg-ring sm:ml-3 sm:w-auto sm:text-sm;
}
.node-modal-button:focus {
- @apply focus:outline-none focus:ring-1 focus:ring-ring focus:ring-offset-1
+ @apply focus:outline-none focus:ring-1 focus:ring-ring focus:ring-offset-1;
}
.prompt-modal-icon-box {
- @apply mx-auto mt-4 flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-almost-light-blue sm:mx-0 sm:h-10 sm:w-10
+ @apply mx-auto mt-4 flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-almost-light-blue sm:mx-0 sm:h-10 sm:w-10;
}
.prompt-modal-icon {
- @apply h-6 w-6 text-almost-medium-blue
+ @apply h-6 w-6 text-almost-medium-blue;
}
.prompt-modal-txtarea-arrangement {
- @apply flex-max-width h-full flex-row items-center justify-center gap-4 overflow-auto bg-accent p-4
+ @apply flex-max-width h-full flex-row items-center justify-center gap-4 overflow-auto bg-accent p-4;
}
.prompt-modal-txtarea-box {
- @apply h-full w-full overflow-hidden rounded-lg bg-background px-4 py-5 shadow sm:p-6
+ @apply h-full w-full overflow-hidden rounded-lg bg-background px-4 py-5 shadow sm:p-6;
}
.prompt-modal-txtarea {
- @apply form-input h-full w-full rounded-lg border-ring
+ @apply form-input h-full w-full rounded-lg border-ring;
}
.txtarea-modal-arrangement {
- @apply flex h-full w-full flex-row items-center justify-center gap-4 bg-input p-4
+ @apply flex h-full w-full flex-row items-center justify-center gap-4 bg-input p-4;
}
.txtarea-modal-box {
- @apply w-full overflow-hidden rounded-lg bg-background px-4 py-5 shadow sm:p-6
+ @apply w-full overflow-hidden rounded-lg bg-background px-4 py-5 shadow sm:p-6;
}
.txtarea-modal-input {
- @apply form-input h-full w-full
+ @apply form-input h-full w-full;
}
.api-modal-tabs {
- @apply w-full h-full overflow-hidden text-center bg-muted rounded-md border
+ @apply flex h-full flex-col overflow-hidden rounded-md border bg-muted text-center sm:w-[75vw] lg:w-full;
}
.api-modal-tablist-div {
- @apply flex items-center justify-between px-2
+ @apply flex items-center justify-between px-2;
}
.api-modal-tabs-content {
- @apply overflow-hidden w-full h-full px-4 pb-4 -mt-1
+ @apply -mt-1 h-full w-full overflow-hidden px-4 pb-4;
}
.api-modal-accordion-display {
- @apply flex w-full h-full mt-2
+ @apply mt-2 flex h-full w-full;
}
.api-modal-table-arrangement {
- @apply flex flex-col gap-5 h-fit
+ @apply flex h-fit flex-col gap-5;
}
- .icons-parameters-comp{
- @apply ml-3 h-6 w-6
+ .icons-parameters-comp {
+ @apply ml-3 h-6 w-6;
}
.form-modal-lock-true {
- @apply bg-input text-primary
+ @apply bg-input text-primary;
}
.form-modal-no-input {
- @apply bg-input text-center text-primary dark:bg-gray-700 dark:text-gray-300
+ @apply bg-input text-center text-primary dark:bg-gray-700 dark:text-gray-300;
}
.form-modal-lock-false {
- @apply bg-white text-primary
+ @apply bg-white text-primary;
}
- .code-highlight{
- @apply block px-3 py-2 w-full max-h-[64vh] text-sm outline-0 border-0 break-all overflow-y-hidden
+ .code-highlight {
+ @apply block max-h-[64vh] w-full overflow-y-hidden break-all border-0 px-3 py-2 text-sm outline-0;
}
- .code-nohighlight{
- @apply block px-3 py-2 w-full max-h-[70vh] text-sm outline-0 border-0 break-all overflow-y-hidden
+ .code-nohighlight {
+ @apply block max-h-[70vh] w-full overflow-y-hidden break-all border-0 px-3 py-2 text-sm outline-0;
}
.form-modal-lockchat {
- @apply form-input focus:ring-ring focus:border-ring block w-full rounded-md border-border p-4 pr-16 custom-scroll sm:text-sm
+ @apply form-input block w-full rounded-md border-border p-4 pr-16 custom-scroll focus:border-ring focus:ring-ring sm:text-sm;
}
.form-modal-send-icon-position {
- @apply absolute bottom-2 right-4
+ @apply absolute bottom-2 right-4;
}
.form-modal-send-button {
- @apply rounded-md p-2 px-1 transition-all duration-300
+ @apply rounded-md p-2 px-1 transition-all duration-300;
}
.form-modal-lock-icon {
- @apply ml-1 mr-1 h-5 w-5 animate-pulse
+ @apply ml-1 mr-1 h-5 w-5 animate-pulse;
}
.form-modal-send-icon {
- @apply mr-2 h-5 w-5 rotate-[44deg]
+ @apply mr-2 h-5 w-5 rotate-[44deg];
}
.form-modal-play-icon {
- @apply h-5 w-5 mx-1
+ @apply mx-1 h-5 w-5;
}
.form-modal-chat-position {
- @apply flex-max-width px-2 py-6 pl-4 pr-9
+ @apply flex-max-width px-2 py-6 pl-4 pr-9;
}
.form-modal-chatbot-icon {
- @apply mb-3 ml-3 mr-6 mt-1
+ @apply mb-3 ml-3 mr-6 mt-1;
}
.form-modal-chat-image {
- @apply flex flex-col items-center gap-1
+ @apply flex flex-col items-center gap-1;
}
.form-modal-chat-img-box {
- @apply relative flex h-8 w-8 items-center justify-center overflow-hidden rounded-md p-5 text-2xl
+ @apply relative flex h-8 w-8 items-center justify-center overflow-hidden rounded-md p-5 text-2xl;
}
.form-modal-chat-bot-icon {
- @apply form-modal-chat-img-box bg-chat-bot-icon
+ @apply form-modal-chat-img-box bg-chat-bot-icon;
}
.form-modal-chat-user-icon {
- @apply form-modal-chat-img-box bg-chat-user-icon
+ @apply form-modal-chat-img-box bg-chat-user-icon;
}
.form-modal-chat-icon-img {
- @apply absolute scale-[60%]
+ @apply absolute scale-[60%];
}
.form-modal-chat-text-position {
- @apply flex w-full flex-1 text-start
+ @apply flex w-full flex-1 text-start;
}
.form-modal-chat-text {
- @apply relative flex w-full flex-col text-start text-sm font-normal text-muted-foreground
+ @apply relative flex w-full flex-col text-start text-sm font-normal text-muted-foreground;
}
.form-modal-chat-icon-div {
- @apply absolute -left-6 -top-3 cursor-pointer
+ @apply absolute -left-6 -top-3 cursor-pointer;
}
.form-modal-chat-icon {
- @apply h-4 w-4 animate-bounce
+ @apply h-4 w-4 animate-bounce;
}
.form-modal-chat-thought-border {
- @apply rounded-md border border-ring/60
+ @apply rounded-md border border-ring/60;
}
.form-modal-chat-thought-size {
- @apply inline-block h-full w-[95%]
+ @apply inline-block h-full w-[95%];
}
.form-modal-chat-thought {
- @apply cursor-pointer overflow-scroll bg-background text-start text-primary scrollbar-hide form-modal-chat-thought-border form-modal-chat-thought-size py-2 px-2
+ @apply form-modal-chat-thought-border form-modal-chat-thought-size cursor-pointer overflow-scroll bg-background px-2 py-2 text-start text-primary scrollbar-hide;
}
.form-modal-markdown-span {
- @apply mt-1 animate-pulse cursor-default
+ @apply mt-1 animate-pulse cursor-default;
}
.form-modal-initial-prompt-btn {
- @apply mb-2 flex items-center gap-2 rounded-md border border-border bg-background shadow-sm px-4 py-2 text-sm font-semibold
+ @apply mb-2 flex items-center gap-2 rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold shadow-sm;
}
.form-modal-iv-box {
- @apply mt-2 flex-max-width h-[80vh]
+ @apply flex-max-width mt-2 h-[80vh];
}
.form-modal-iv-size {
- @apply mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide
+ @apply mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide;
}
.file-component-arrangement {
- @apply flex items-center py-2
+ @apply flex items-center py-2;
}
.file-component-variable {
- @apply -ml-px mr-1 h-4 w-4 text-primary
+ @apply -ml-px mr-1 h-4 w-4 text-primary;
}
.file-component-variables-span {
- @apply font-semibold text-primary
+ @apply font-semibold text-primary;
}
.file-component-variables-title {
- @apply flex items-center justify-between pt-2
+ @apply flex items-center justify-between pt-2;
}
.file-component-variables-div {
- @apply mr-2.5 flex items-center
+ @apply mr-2.5 flex items-center;
}
.file-component-variables-title-txt {
- @apply text-sm font-medium text-primary
+ @apply text-sm font-medium text-primary;
}
.file-component-accordion-div {
- @apply flex items-start gap-3
+ @apply flex items-start gap-3;
}
.file-component-badge-div {
- @apply flex-max-width items-center justify-between
+ @apply flex-max-width items-center justify-between;
}
.file-component-tab-column {
- @apply flex flex-col gap-2 p-1
+ @apply flex flex-col gap-2 p-1;
}
.tab-accordion-badge-div {
- @apply flex flex-1 items-center justify-between py-4 text-sm font-normal text-muted-foreground transition-all
+ @apply flex flex-1 items-center justify-between py-4 text-sm font-normal text-muted-foreground transition-all;
}
.eraser-column-arrangement {
- @apply flex-max-width flex-1 flex-col
+ @apply flex-max-width flex-1 flex-col;
}
.eraser-size {
- @apply relative flex h-full w-full flex-col rounded-md border bg-muted
+ @apply relative flex h-full w-full flex-col rounded-md border bg-muted;
}
.eraser-position {
- @apply absolute right-3 top-3 z-50
+ @apply absolute right-3 top-3 z-50;
}
.chat-message-div {
- @apply flex-max-width h-full flex-col items-center overflow-scroll scrollbar-hide
+ @apply flex-max-width h-full flex-col items-center overflow-scroll scrollbar-hide;
}
.chat-alert-box {
- @apply flex-max-width h-full flex-col items-center justify-center text-center align-middle
+ @apply flex-max-width h-full flex-col items-center justify-center text-center align-middle;
}
.langflow-chat-span {
- @apply text-lg text-foreground
+ @apply text-lg text-foreground;
}
.langflow-chat-desc {
- @apply w-2/4 rounded-md border border-border bg-muted px-6 py-8
+ @apply w-2/4 rounded-md border border-border bg-muted px-6 py-8;
}
.langflow-chat-desc-span {
- @apply text-base text-muted-foreground
+ @apply text-base text-muted-foreground;
}
.langflow-chat-input-div {
- @apply flex-max-width flex-col items-center justify-between px-8 pb-6
+ @apply flex-max-width flex-col items-center justify-between px-8 pb-6;
}
.langflow-chat-input {
- @apply relative w-full rounded-md shadow-sm
+ @apply relative w-full rounded-md shadow-sm;
}
- .tooltip-fixed-width{
- @apply max-w-[30vw] max-h-[20vh] overflow-auto
+ .tooltip-fixed-width {
+ @apply max-h-[25vh] max-w-[30vw] overflow-auto;
}
.ace-editor-arrangement {
- @apply flex-max-width h-full flex-col transition-all
+ @apply flex-max-width h-full flex-col transition-all;
}
.ace-editor {
- @apply h-full w-full rounded-lg border-[1px] border-border custom-scroll
+ @apply h-full w-full rounded-lg border-[1px] border-border custom-scroll;
}
.ace-editor-save-btn {
- @apply flex-max-width h-fit justify-end
+ @apply flex-max-width h-fit justify-end;
}
.export-modal-save-api {
- @apply font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70
+ @apply font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70;
+ }
+
+ .beta-badge-wrapper {
+ @apply absolute right-0 top-0 h-16 w-16 overflow-hidden rounded-tr-lg;
+ }
+ .beta-badge-content {
+ @apply mt-2 w-24 rotate-45 bg-beta-background text-center text-xs font-semibold text-beta-foreground;
}
.chat-message-highlight {
- @apply px-0.5 rounded-md bg-indigo-100 dark:bg-indigo-900
+ @apply rounded-md bg-indigo-100 px-0.5 dark:bg-indigo-900;
}
-
-
}
diff --git a/src/frontend/src/style/classes.css b/src/frontend/src/style/classes.css
new file mode 100644
index 000000000..b6662e7bf
--- /dev/null
+++ b/src/frontend/src/style/classes.css
@@ -0,0 +1,38 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
+ "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
+ monospace;
+}
+pre {
+ font-family: inherit;
+}
+
+.react-flow__pane {
+ cursor: default;
+}
+
+.AccordionContent {
+ overflow: hidden;
+}
+.AccordionContent[data-state="open"] {
+ animation: slideDown 300ms ease-out;
+}
+.AccordionContent[data-state="closed"] {
+ animation: slideUp 300ms ease-out;
+}
+
+
+.gradient-end {
+ animation: gradient-motion-end 3s infinite forwards;
+}
+.gradient-start {
+ animation: gradient-motion-start 4s infinite forwards;
+}
diff --git a/src/frontend/src/style/index.css b/src/frontend/src/style/index.css
new file mode 100644
index 000000000..e57a89eae
--- /dev/null
+++ b/src/frontend/src/style/index.css
@@ -0,0 +1,128 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+/* TODO: Confirm that all colors here are found in tailwind config */
+
+@layer base {
+ :root {
+ --background: 0 0% 100%; /* hsl(0 0% 100%) */
+ --foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
+ --muted: 210 40% 98%; /* hsl(210 40% 98%) */
+ --muted-foreground: 215.4 16.3% 46.9%; /* hsl(215 16% 46%) */
+ --popover: 0 0% 100%; /* hsl(0 0% 100%) */
+ --popover-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
+ --card: 0 0% 100%; /* hsl(0 0% 100%) */
+ --card-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
+ --border: 214.3 21.8% 91.4%; /* hsl(214 32% 91%) */
+ --input: 214.3 21.8% 91.4%; /* hsl(214 32% 91%) */
+ --primary: 222.2 27% 11.2%; /* hsl(222 27% 18%) */
+ --primary-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
+ --secondary: 210 40% 96.1%; /* hsl(210 40% 96%) */
+ --secondary-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
+ --accent: 210 30% 96.1%; /* hsl(210 30% 96%) */
+ --accent-foreground: 222.2 47.4% 11.2%; /* hsl(222 47% 11%) */
+ --destructive: 0 100% 50%; /* hsl(0 100% 50%) */
+ --destructive-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
+ --radius: 0.5rem;
+ --ring: 215 20.2% 65.1%; /* hsl(215 20% 65%) */
+ --round-btn-shadow: #00000063;
+
+ --error-background: #fef2f2;
+ --error-foreground: #991b1b;
+
+ --success-background: #f0fdf4;
+ --success-foreground: #14532d;
+
+ --info-background: #f0f4fd;
+ --info-foreground: #141653;
+
+ --high-indigo: #4338ca;
+ --medium-indigo: #6366f1;
+ --low-indigo: #e0e7ff;
+
+ --beta-background: rgb(219 234 254);
+ --beta-foreground: rgb(37 99 235);
+
+ --chat-bot-icon: #afe6ef;
+ --chat-user-icon: #aface9;
+
+ /* Colors that are shared in dark and light mode */
+ --blur-shared: #151923de;
+ --build-trigger: #dc735b;
+ --chat-trigger: #5c8be1;
+ --chat-trigger-disabled: #b4c3da;
+ --status-red: #ef4444;
+ --status-yellow: #eab308;
+ --chat-send: #059669;
+ --status-green: #4ade80;
+ --status-blue: #2563eb;
+ --connection: #555;
+ }
+
+ .dark {
+ --background: 224 35% 7.5%; /* hsl(224 40% 10%) */
+ --foreground: 213 31% 80%; /* hsl(213 31% 91%) */
+
+ --muted: 223 27% 11%; /* hsl(223 27% 11%) */
+ --muted-foreground: 215.4 16.3% 56.9%; /* hsl(215 16% 56%) */
+
+ --popover: 224 71% 4%; /* hsl(224 71% 4%) */
+ --popover-foreground: 215 20.2% 65.1%; /* hsl(215 20% 65%) */
+
+ --card: 224 25% 15.5%; /* hsl(224 71% 4%) */
+ --card-foreground: 213 31% 80%; /* hsl(213 31% 91%) */
+
+ --border: 216 24% 17%; /* hsl(216 34% 17%) */
+ --input: 216 24% 17%; /* hsl(216 34% 17%) */
+
+ --primary: 210 20% 80%; /* hsl(210 20% 80%) */
+ --primary-foreground: 222.2 27.4% 1.2%; /* hsl(222 47% 1%) */
+
+ --secondary: 222.2 37.4% 7.2%; /* hsl(222 47% 11%) */
+ --secondary-foreground: 210 40% 80%; /* hsl(210 40% 80%) */
+
+ --accent: 216 24% 20%; /* hsl(216 34% 17%) */
+ --accent-foreground: 210 30% 98%; /* hsl(210 40% 98%) */
+
+ --destructive: 0 63% 31%; /* hsl(0 63% 31%) */
+ --destructive-foreground: 210 40% 98%; /* hsl(210 40% 98%) */
+
+ --ring: 216 24% 30%; /* hsl(216 24% 30%) */
+
+ --radius: 0.5rem;
+
+ --round-btn-shadow: #00000063;
+
+ --success-background: #022c22;
+ --success-foreground: #ecfdf5;
+
+ --error-foreground: #fef2f2;
+ --error-background: #450a0a;
+
+ --info-foreground: #eff6ff;
+ --info-background: #172554;
+
+ --high-indigo: #4338ca;
+ --medium-indigo: #6366f1;
+ --low-indigo: #e0e7ff;
+
+ /* Colors that are shared in dark and light mode */
+ --blur-shared: #151923d2;
+ --build-trigger: #dc735b;
+ --chat-trigger: #5c8be1;
+ --chat-trigger-disabled: #2d3b54;
+ --status-red: #ef4444;
+ --status-yellow: #eab308;
+ --chat-send: #059669;
+ --status-green: #4ade80;
+ --status-blue: #2563eb;
+ --connection: #555;
+
+ --beta-background: rgb(37 99 235);
+ --beta-foreground: rgb(219 234 254);
+
+ --chat-bot-icon: #235d70;
+ --chat-user-icon: #4f3d6e;
+ }
+}
diff --git a/src/frontend/src/types/alerts/index.ts b/src/frontend/src/types/alerts/index.ts
index 7033d99eb..1d01f0aef 100644
--- a/src/frontend/src/types/alerts/index.ts
+++ b/src/frontend/src/types/alerts/index.ts
@@ -19,7 +19,9 @@ export type SingleAlertComponentType = {
dropItem: AlertItemType;
removeAlert: (index: string) => void;
};
-export type AlertDropdownType = {};
+export type AlertDropdownType = {
+ children: JSX.Element;
+};
export type AlertItemType = {
type: "notice" | "error" | "success";
title: string;
diff --git a/src/frontend/src/types/api/index.ts b/src/frontend/src/types/api/index.ts
index eaf862f29..3fa848326 100644
--- a/src/frontend/src/types/api/index.ts
+++ b/src/frontend/src/types/api/index.ts
@@ -14,8 +14,10 @@ export type APIClassType = {
display_name: string;
input_types?: Array
;
output_types?: Array;
+ beta?: boolean;
documentation: string;
- [key: string]: Array | string | APITemplateType;
+ error?: string;
+ [key: string]: Array | string | APITemplateType | boolean;
};
export type TemplateVariableType = {
diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts
index 4ce9e526f..5cf87b8d3 100644
--- a/src/frontend/src/types/components/index.ts
+++ b/src/frontend/src/types/components/index.ts
@@ -7,7 +7,6 @@ export type InputComponentType = {
disabled?: boolean;
onChange: (value: string) => void;
password: boolean;
- disableCopyPaste?: boolean;
editNode?: boolean;
onChangePass?: (value: boolean | boolean) => void;
showPass?: boolean;
@@ -28,6 +27,7 @@ export type DropDownComponentType = {
};
export type ParameterComponentType = {
data: NodeDataType;
+ setData: (value: NodeDataType) => void;
title: string;
id: string;
color: string;
@@ -45,7 +45,6 @@ export type InputListComponentType = {
onChange: (value: string[]) => void;
disabled: boolean;
editNode?: boolean;
- onAddInput?: (value?: string[]) => void;
};
export type TextAreaComponentType = {
@@ -63,8 +62,9 @@ export type CodeAreaComponentType = {
onChange: (value: string[] | string) => void;
value: string;
editNode?: boolean;
- nodeClass: APIClassType;
- setNodeClass: (value: APIClassType) => void;
+ nodeClass?: APIClassType;
+ setNodeClass?: (value: APIClassType) => void;
+ dynamic?: boolean;
};
export type FileComponentType = {
@@ -93,7 +93,6 @@ export type DisclosureComponentType = {
export type FloatComponentType = {
value: string;
disabled?: boolean;
- disableCopyPaste?: boolean;
onChange: (value: string) => void;
editNode?: boolean;
};
@@ -130,7 +129,8 @@ export type RadialProgressType = {
export type AccordionComponentType = {
children?: ReactElement;
open?: string[];
- trigger?: string;
+ trigger?: string | ReactElement;
+ keyValue?: string;
};
export type Side = "top" | "right" | "bottom" | "left";
@@ -161,3 +161,13 @@ export type TextHighlightType = {
export interface IVarHighlightType {
name: string;
}
+
+export type IconComponentProps = {
+ name: string;
+ className: string;
+ iconColor?: string;
+};
+
+export interface languageMap {
+ [key: string]: string | undefined;
+}
diff --git a/src/frontend/src/types/tabs/index.ts b/src/frontend/src/types/tabs/index.ts
index 82e75e4e4..82934cf35 100644
--- a/src/frontend/src/types/tabs/index.ts
+++ b/src/frontend/src/types/tabs/index.ts
@@ -18,11 +18,10 @@ export type TabsContextType = {
) => void;
downloadFlows: () => void;
uploadFlows: () => void;
+ isBuilt: boolean;
+ setIsBuilt: (state: boolean) => void;
uploadFlow: (newFlow?: boolean, file?: File) => void;
hardReset: () => void;
- //disable CopyPaste
- disableCopyPaste: boolean;
- setDisableCopyPaste: (value: boolean) => void;
getNodeId: (nodeType: string) => string;
tabsState: TabsState;
setTabsState: Dispatch>;
diff --git a/src/frontend/src/util/reactflowUtils.ts b/src/frontend/src/util/reactflowUtils.ts
deleted file mode 100644
index da04cc75c..000000000
--- a/src/frontend/src/util/reactflowUtils.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import _ from "lodash";
-import { cleanEdgesType } from "./../types/utils/reactflowUtils";
-
-export function cleanEdges({
- flow: { edges, nodes },
- updateEdge,
-}: cleanEdgesType) {
- let newEdges = _.cloneDeep(edges);
- edges.forEach((edge) => {
- // check if the source and target node still exists
- const sourceNode = nodes.find((node) => node.id === edge.source);
- const targetNode = nodes.find((node) => node.id === edge.target);
- if (!sourceNode || !targetNode) {
- newEdges = newEdges.filter((e) => e.id !== edge.id);
- }
- // check if the source and target handle still exists
- if (sourceNode && targetNode) {
- const sourceHandle = edge.sourceHandle; //right
- const targetHandle = edge.targetHandle; //left
- if (targetHandle) {
- const field = targetHandle.split("|")[1];
- const id =
- (targetNode.data.node.template[field]?.input_types?.join(";") ??
- targetNode.data.node.template[field]?.type) +
- "|" +
- field +
- "|" +
- targetNode.data.id;
- if (id !== targetHandle) {
- newEdges = newEdges.filter((e) => e.id !== edge.id);
- }
- }
- if (sourceHandle) {
- const id = [
- sourceNode.data.type,
- sourceNode.data.id,
- ...sourceNode.data.node.base_classes,
- ].join("|");
- if (id !== sourceHandle) {
- newEdges = newEdges.filter((e) => e.id !== edge.id);
- }
- }
- }
- });
- updateEdge(newEdges);
-}
diff --git a/src/frontend/src/utils.ts b/src/frontend/src/utils.ts
deleted file mode 100644
index 5ae191c67..000000000
--- a/src/frontend/src/utils.ts
+++ /dev/null
@@ -1,1043 +0,0 @@
-import clsx, { ClassValue } from "clsx";
-import _ from "lodash";
-import {
- Compass,
- Cpu,
- FileSearch,
- Fingerprint,
- Gift,
- Hammer,
- HelpCircle,
- Laptop2,
- Layers,
- Lightbulb,
- Link,
- MessageCircle,
- Paperclip,
- Rocket,
- Scissors,
- TerminalSquare,
- Wand2,
- Wrench,
-} from "lucide-react";
-import { ComponentType, SVGProps } from "react";
-import { Connection, Edge, Node, ReactFlowInstance } from "reactflow";
-import { twMerge } from "tailwind-merge";
-import { ADJECTIVES, DESCRIPTIONS, NOUNS } from "./flow_constants";
-import { AirbyteIcon } from "./icons/Airbyte";
-import { AnthropicIcon } from "./icons/Anthropic";
-import { BingIcon } from "./icons/Bing";
-import { ChromaIcon } from "./icons/ChromaIcon";
-import { CohereIcon } from "./icons/Cohere";
-import { EvernoteIcon } from "./icons/Evernote";
-import { FBIcon } from "./icons/FacebookMessenger";
-import { GitBookIcon } from "./icons/GitBook";
-import { GoogleIcon } from "./icons/Google";
-import { HuggingFaceIcon } from "./icons/HuggingFace";
-import { IFixIcon } from "./icons/IFixIt";
-import { MetaIcon } from "./icons/Meta";
-import { MidjourneyIcon } from "./icons/Midjorney";
-import { MongoDBIcon } from "./icons/MongoDB";
-import { NotionIcon } from "./icons/Notion";
-import { OpenAiIcon } from "./icons/OpenAi";
-import { PineconeIcon } from "./icons/Pinecone";
-import { QDrantIcon } from "./icons/QDrant";
-import { SearxIcon } from "./icons/Searx";
-import { SlackIcon } from "./icons/Slack";
-import { VertexAIIcon } from "./icons/VertexAI";
-import { HackerNewsIcon } from "./icons/hackerNews";
-import { SupabaseIcon } from "./icons/supabase";
-import { APITemplateType } from "./types/api";
-import { IVarHighlightType } from "./types/components";
-import { FlowType, NodeType } from "./types/flow";
-
-export function classNames(...classes: Array) {
- return classes.filter(Boolean).join(" ");
-}
-
-export const limitScrollFieldsModal = 10;
-
-export enum TypeModal {
- TEXT = 1,
- PROMPT = 2,
-}
-
-export const textColors = {
- white: "text-white",
- red: "text-red-700",
- orange: "text-orange-700",
- amber: "text-amber-700",
- yellow: "text-yellow-700",
- lime: "text-lime-700",
- green: "text-green-700",
- emerald: "text-emerald-700",
- teal: "text-teal-700",
- cyan: "text-cyan-700",
- sky: "text-sky-700",
- blue: "text-blue-700",
- indigo: "text-indigo-700",
- violet: "text-violet-700",
- purple: "text-purple-700",
- fuchsia: "text-fuchsia-700",
- pink: "text-pink-700",
- rose: "text-rose-700",
- black: "text-black-700",
- gray: "text-gray-700",
-};
-
-export const borderLColors = {
- white: "border-l-white",
- red: "border-l-red-500",
- orange: "border-l-orange-500",
- amber: "border-l-amber-500",
- yellow: "border-l-yellow-500",
- lime: "border-l-lime-500",
- green: "border-l-green-500",
- emerald: "border-l-emerald-500",
- teal: "border-l-teal-500",
- cyan: "border-l-cyan-500",
- sky: "border-l-sky-500",
- blue: "border-l-blue-500",
- indigo: "border-l-indigo-500",
- violet: "border-l-violet-500",
- purple: "border-l-purple-500",
- fuchsia: "border-l-fuchsia-500",
- pink: "border-l-pink-500",
- rose: "border-l-rose-500",
- black: "border-l-black-500",
- gray: "border-l-gray-500",
-};
-
-export const nodeColors: { [char: string]: string } = {
- prompts: "#4367BF",
- llms: "#6344BE",
- chains: "#FE7500",
- agents: "#903BBE",
- tools: "#FF3434",
- memories: "#F5B85A",
- advanced: "#000000",
- chat: "#198BF6",
- thought: "#272541",
- embeddings: "#42BAA7",
- documentloaders: "#7AAE42",
- vectorstores: "#AA8742",
- textsplitters: "#B47CB5",
- toolkits: "#DB2C2C",
- wrappers: "#E6277A",
- utilities: "#31A3CC",
- output_parsers: "#E6A627",
- str: "#049524",
- retrievers: "#e6b25a",
- unknown: "#9CA3AF",
-};
-
-export const nodeNames: { [char: string]: string } = {
- prompts: "Prompts",
- llms: "LLMs",
- chains: "Chains",
- agents: "Agents",
- tools: "Tools",
- memories: "Memories",
- advanced: "Advanced",
- chat: "Chat",
- embeddings: "Embeddings",
- documentloaders: "Loaders",
- vectorstores: "Vector Stores",
- toolkits: "Toolkits",
- wrappers: "Wrappers",
- textsplitters: "Text Splitters",
- retrievers: "Retrievers",
- utilities: "Utilities",
- output_parsers: "Output Parsers",
- unknown: "Unknown",
-};
-
-export const nodeIconsLucide: {
- [char: string]: React.ForwardRefExoticComponent<
- ComponentType>
- >;
-} = {
- Chroma: ChromaIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- AirbyteJSONLoader: AirbyteIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Anthropic: AnthropicIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- ChatAnthropic: AnthropicIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- BingSearchAPIWrapper: BingIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- BingSearchRun: BingIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Cohere: CohereIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- CohereEmbeddings: CohereIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- EverNoteLoader: EvernoteIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- FacebookChatLoader: FBIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- GitbookLoader: GitBookIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- GoogleSearchAPIWrapper: GoogleIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- GoogleSearchResults: GoogleIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- GoogleSearchRun: GoogleIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- HNLoader: HackerNewsIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- HuggingFaceHub: HuggingFaceIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- HuggingFaceEmbeddings: HuggingFaceIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- IFixitLoader: IFixIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Meta: MetaIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Midjorney: MidjourneyIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- MongoDBAtlasVectorSearch: MongoDBIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- NotionDirectoryLoader: NotionIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- ChatOpenAI: OpenAiIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- OpenAI: OpenAiIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- OpenAIEmbeddings: OpenAiIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Pinecone: PineconeIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Qdrant: QDrantIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- Searx: SearxIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- SlackDirectoryLoader: SlackIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- SupabaseVectorStore: SupabaseIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- VertexAI: VertexAIIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- ChatVertexAI: VertexAIIcon as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- agents: Rocket as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- chains: Link as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- memories: Cpu as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- llms: Lightbulb as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- prompts: TerminalSquare as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- tools: Wrench as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- advanced: Laptop2 as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- chat: MessageCircle as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- embeddings: Fingerprint as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- documentloaders: Paperclip as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- vectorstores: Layers as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- toolkits: Hammer as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- textsplitters: Scissors as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- wrappers: Gift as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- utilities: Wand2 as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- output_parsers: Compass as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- retrievers: FileSearch as React.ForwardRefExoticComponent<
- ComponentType>
- >,
- unknown: HelpCircle as React.ForwardRefExoticComponent<
- ComponentType>
- >,
-};
-
-export const gradients = [
- "bg-gradient-to-br from-gray-800 via-rose-700 to-violet-900",
- "bg-gradient-to-br from-green-200 via-green-300 to-blue-500",
- "bg-gradient-to-br from-yellow-200 via-yellow-400 to-yellow-700",
- "bg-gradient-to-br from-green-200 via-green-400 to-purple-700",
- "bg-gradient-to-br from-blue-100 via-blue-300 to-blue-500",
- "bg-gradient-to-br from-purple-400 to-yellow-400",
- "bg-gradient-to-br from-red-800 via-yellow-600 to-yellow-500",
- "bg-gradient-to-br from-blue-300 via-green-200 to-yellow-300",
- "bg-gradient-to-br from-blue-700 via-blue-800 to-gray-900",
- "bg-gradient-to-br from-green-300 to-purple-400",
- "bg-gradient-to-br from-yellow-200 via-pink-200 to-pink-400",
- "bg-gradient-to-br from-green-500 to-green-700",
- "bg-gradient-to-br from-rose-400 via-fuchsia-500 to-indigo-500",
- "bg-gradient-to-br from-sky-400 to-blue-500",
- "bg-gradient-to-br from-green-200 via-green-400 to-green-500",
- "bg-gradient-to-br from-red-400 via-gray-300 to-blue-500",
- "bg-gradient-to-br from-gray-900 to-gray-600 bg-gradient-to-r",
- "bg-gradient-to-br from-rose-500 via-red-400 to-red-500",
- "bg-gradient-to-br from-fuchsia-600 to-pink-600",
- "bg-gradient-to-br from-emerald-500 to-lime-600",
- "bg-gradient-to-br from-rose-500 to-indigo-700",
- "bg-gradient-to-br bg-gradient-to-tr from-violet-500 to-orange-300",
- "bg-gradient-to-br from-gray-900 via-purple-900 to-violet-600",
- "bg-gradient-to-br from-yellow-200 via-red-500 to-fuchsia-500",
- "bg-gradient-to-br from-sky-400 to-indigo-900",
- "bg-gradient-to-br from-amber-200 via-violet-600 to-sky-900",
- "bg-gradient-to-br from-amber-700 via-orange-300 to-rose-800",
- "bg-gradient-to-br from-gray-300 via-fuchsia-600 to-orange-600",
- "bg-gradient-to-br from-fuchsia-500 via-red-600 to-orange-400",
- "bg-gradient-to-br from-sky-400 via-rose-400 to-lime-400",
- "bg-gradient-to-br from-lime-600 via-yellow-300 to-red-600",
-];
-
-export const bgColors = {
- white: "bg-white",
- red: "bg-red-100",
- orange: "bg-orange-100",
- amber: "bg-amber-100",
- yellow: "bg-yellow-100",
- lime: "bg-lime-100",
- green: "bg-green-100",
- emerald: "bg-emerald-100",
- teal: "bg-teal-100",
- cyan: "bg-cyan-100",
- sky: "bg-sky-100",
- blue: "bg-blue-100",
- indigo: "bg-indigo-100",
- violet: "bg-violet-100",
- purple: "bg-purple-100",
- fuchsia: "bg-fuchsia-100",
- pink: "bg-pink-100",
- rose: "bg-rose-100",
- black: "bg-black-100",
- gray: "bg-gray-100",
-};
-
-export const bgColorsHover = {
- white: "hover:bg-white",
- black: "hover:bg-black-50",
- gray: "hover:bg-gray-50",
- red: "hover:bg-red-50",
- orange: "hover:bg-orange-50",
- amber: "hover:bg-amber-50",
- yellow: "hover:bg-yellow-50",
- lime: "hover:bg-lime-50",
- green: "hover:bg-green-50",
- emerald: "hover:bg-emerald-50",
- teal: "hover:bg-teal-50",
- cyan: "hover:bg-cyan-50",
- sky: "hover:bg-sky-50",
- blue: "hover:bg-blue-50",
- indigo: "hover:bg-indigo-50",
- violet: "hover:bg-violet-50",
- purple: "hover:bg-purple-50",
- fuchsia: "hover:bg-fuchsia-50",
- pink: "hover:bg-pink-50",
- rose: "hover:bg-rose-50",
-};
-
-export const textColorsHex = {
- red: "rgb(185 28 28)",
- orange: "rgb(194 65 12)",
- amber: "rgb(180 83 9)",
- yellow: "rgb(161 98 7)",
- lime: "rgb(77 124 15)",
- green: "rgb(21 128 61)",
- emerald: "rgb(4 120 87)",
- teal: "rgb(15 118 110)",
- cyan: "rgb(14 116 144)",
- sky: "rgb(3 105 161)",
- blue: "rgb(29 78 216)",
- indigo: "rgb(67 56 202)",
- violet: "rgb(109 40 217)",
- purple: "rgb(126 34 206)",
- fuchsia: "rgb(162 28 175)",
- pink: "rgb(190 24 93)",
- rose: "rgb(190 18 60)",
-};
-
-export const bgColorsHex = {
- red: "rgb(254 226 226)",
- orange: "rgb(255 237 213)",
- amber: "rgb(254 243 199)",
- yellow: "rgb(254 249 195)",
- lime: "rgb(236 252 203)",
- green: "rgb(220 252 231)",
- emerald: "rgb(209 250 229)",
- teal: "rgb(204 251 241)",
- cyan: "rgb(207 250 254)",
- sky: "rgb(224 242 254)",
- blue: "rgb(219 234 254)",
- indigo: "rgb(224 231 255)",
- violet: "rgb(237 233 254)",
- purple: "rgb(243 232 255)",
- fuchsia: "rgb(250 232 255)",
- pink: "rgb(252 231 243)",
- rose: "rgb(255 228 230)",
-};
-
-export const taskTypeMap: { [key: string]: string } = {
- MULTICLASS_CLASSIFICATION: "Multiclass Classification",
-};
-
-const charWidths: { [char: string]: number } = {
- " ": 0.2,
- "!": 0.2,
- '"': 0.3,
- "#": 0.5,
- $: 0.5,
- "%": 0.5,
- "&": 0.5,
- "(": 0.2,
- ")": 0.2,
- "*": 0.5,
- "+": 0.5,
- ",": 0.2,
- "-": 0.2,
- ".": 0.1,
- "/": 0.5,
- ":": 0.2,
- ";": 0.2,
- "<": 0.5,
- "=": 0.5,
- ">": 0.5,
- "?": 0.2,
- "@": 0.5,
- "[": 0.2,
- "\\": 0.5,
- "]": 0.2,
- "^": 0.5,
- _: 0.2,
- "`": 0.5,
- "{": 0.2,
- "|": 0.2,
- "}": 0.2,
- "~": 0.5,
-};
-
-for (let i = 65; i <= 90; i++) {
- charWidths[String.fromCharCode(i)] = 0.6;
-}
-for (let i = 97; i <= 122; i++) {
- charWidths[String.fromCharCode(i)] = 0.5;
-}
-
-export function measureTextWidth(text: string, fontSize: number) {
- let wordWidth = 0;
- for (let j = 0; j < text.length; j++) {
- let char = text[j];
- let charWidth = charWidths[char] || 0.5;
- wordWidth += charWidth * fontSize;
- }
- return wordWidth;
-}
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs));
-}
-
-export function measureTextHeight(
- text: string,
- width: number,
- fontSize: number
-) {
- const charHeight = fontSize;
- const lineHeight = charHeight * 1.5;
- const words = text.split(" ");
- let lineWidth = 0;
- let totalHeight = 0;
- for (let i = 0; i < words.length; i++) {
- let word = words[i];
- let wordWidth = measureTextWidth(word, fontSize);
- if (lineWidth + wordWidth + charWidths[" "] * fontSize <= width) {
- lineWidth += wordWidth + charWidths[" "] * fontSize;
- } else {
- totalHeight += lineHeight;
- lineWidth = wordWidth;
- }
- }
- totalHeight += lineHeight;
- return totalHeight;
-}
-
-export function toCamelCase(str: string) {
- return str
- .split(" ")
- .map((word, index) =>
- index === 0
- ? word.toLowerCase()
- : word[0].toUpperCase() + word.slice(1).toLowerCase()
- )
- .join("");
-}
-export function toFirstUpperCase(str: string) {
- return str
- .split(" ")
- .map((word, index) => word[0].toUpperCase() + word.slice(1).toLowerCase())
- .join("");
-}
-
-export function snakeToSpaces(str: string) {
- return str.split("_").join(" ");
-}
-
-export function toNormalCase(str: string) {
- let result = str
- .split("_")
- .map((word, index) => {
- if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
- }
- return word.toLowerCase();
- })
- .join(" ");
-
- return result
- .split("-")
- .map((word, index) => {
- if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
- }
- return word.toLowerCase();
- })
- .join(" ");
-}
-
-export function normalCaseToSnakeCase(str: string) {
- return str
- .split(" ")
- .map((word, index) => {
- if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
- }
- return word.toLowerCase();
- })
- .join("_");
-}
-
-export function roundNumber(x: number, decimals: number) {
- return Math.round(x * Math.pow(10, decimals)) / Math.pow(10, decimals);
-}
-
-export function getConnectedNodes(edge: Edge, nodes: Array): Array {
- const sourceId = edge.source;
- const targetId = edge.target;
- return nodes.filter((node) => node.id === targetId || node.id === sourceId);
-}
-
-export function isValidConnection(
- { source, target, sourceHandle, targetHandle }: Connection,
- reactFlowInstance: ReactFlowInstance
-) {
- if (
- targetHandle
- .split("|")[0]
- .split(";")
- .some((n) => n === sourceHandle.split("|")[0]) ||
- sourceHandle
- .split("|")
- .slice(2)
- .some((t) =>
- targetHandle
- .split("|")[0]
- .split(";")
- .some((n) => n === t)
- ) ||
- targetHandle.split("|")[0] === "str"
- ) {
- let targetNode = reactFlowInstance?.getNode(target)?.data?.node;
- if (!targetNode) {
- if (
- !reactFlowInstance
- .getEdges()
- .find((e) => e.targetHandle === targetHandle)
- ) {
- return true;
- }
- } else if (
- (!targetNode.template[targetHandle.split("|")[1]].list &&
- !reactFlowInstance
- .getEdges()
- .find((e) => e.targetHandle === targetHandle)) ||
- targetNode.template[targetHandle.split("|")[1]].list
- ) {
- return true;
- }
- }
- return false;
-}
-
-export function removeApiKeys(flow: FlowType): FlowType {
- let cleanFLow = _.cloneDeep(flow);
- cleanFLow.data.nodes.forEach((node) => {
- for (const key in node.data.node.template) {
- if (node.data.node.template[key].password) {
- node.data.node.template[key].value = "";
- }
- }
- });
- return cleanFLow;
-}
-
-export function updateObject>(
- reference: T,
- objectToUpdate: T
-): T {
- let clonedObject = _.cloneDeep(objectToUpdate);
- // Loop through each key in the object to update
- for (const key in clonedObject) {
- // If the key is not in the reference object, delete it
- if (!(key in reference)) {
- delete clonedObject[key];
- }
- }
- // Loop through each key in the reference object
- for (const key in reference) {
- // If the key is not in the object to update, add it
- if (!(key in clonedObject)) {
- clonedObject[key] = reference[key];
- }
- }
- return clonedObject;
-}
-
-export function debounce(func, wait) {
- let timeout;
- return function (...args) {
- const context = this;
- clearTimeout(timeout);
- timeout = setTimeout(() => func.apply(context, args), wait);
- };
-}
-
-export function updateTemplate(
- reference: APITemplateType,
- objectToUpdate: APITemplateType
-): APITemplateType {
- let clonedObject: APITemplateType = _.cloneDeep(reference);
-
- // Loop through each key in the reference object
- for (const key in clonedObject) {
- // If the key is not in the object to update, add it
- if (objectToUpdate[key] && objectToUpdate[key].value) {
- clonedObject[key].value = objectToUpdate[key].value;
- }
- if (
- objectToUpdate[key] &&
- objectToUpdate[key].advanced !== null &&
- objectToUpdate[key].advanced !== undefined
- ) {
- clonedObject[key].advanced = objectToUpdate[key].advanced;
- }
- }
- return clonedObject;
-}
-
-interface languageMap {
- [key: string]: string | undefined;
-}
-
-export const programmingLanguages: languageMap = {
- javascript: ".js",
- python: ".py",
- java: ".java",
- c: ".c",
- cpp: ".cpp",
- "c++": ".cpp",
- "c#": ".cs",
- ruby: ".rb",
- php: ".php",
- swift: ".swift",
- "objective-c": ".m",
- kotlin: ".kt",
- typescript: ".ts",
- go: ".go",
- perl: ".pl",
- rust: ".rs",
- scala: ".scala",
- haskell: ".hs",
- lua: ".lua",
- shell: ".sh",
- sql: ".sql",
- html: ".html",
- css: ".css",
- // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
-};
-
-export function toTitleCase(str: string) {
- let result = str
- .split("_")
- .map((word, index) => {
- if (index === 0) {
- return checkUpperWords(
- word[0].toUpperCase() + word.slice(1).toLowerCase()
- );
- }
- return checkUpperWords(word.toLowerCase());
- })
- .join(" ");
-
- return result
- .split("-")
- .map((word, index) => {
- if (index === 0) {
- return checkUpperWords(
- word[0].toUpperCase() + word.slice(1).toLowerCase()
- );
- }
- return checkUpperWords(word.toLowerCase());
- })
- .join(" ");
-}
-
-export const upperCaseWords: string[] = ["llm", "uri"];
-export function checkUpperWords(str: string) {
- const words = str.split(" ").map((word) => {
- return upperCaseWords.includes(word.toLowerCase())
- ? word.toUpperCase()
- : word[0].toUpperCase() + word.slice(1).toLowerCase();
- });
-
- return words.join(" ");
-}
-
-export function updateIds(newFlow, getNodeId) {
- let idsMap = {};
-
- newFlow.nodes.forEach((n: NodeType) => {
- // Generate a unique node ID
- let newId = getNodeId(n.data.type);
- idsMap[n.id] = newId;
- n.id = newId;
- n.data.id = newId;
- // Add the new node to the list of nodes in state
- });
-
- newFlow.edges.forEach((e) => {
- e.source = idsMap[e.source];
- e.target = idsMap[e.target];
- let sourceHandleSplitted = e.sourceHandle.split("|");
- e.sourceHandle =
- sourceHandleSplitted[0] +
- "|" +
- e.source +
- "|" +
- sourceHandleSplitted.slice(2).join("|");
- let targetHandleSplitted = e.targetHandle.split("|");
- e.targetHandle =
- targetHandleSplitted.slice(0, -1).join("|") + "|" + e.target;
- e.id =
- "reactflow__edge-" +
- e.source +
- e.sourceHandle +
- "-" +
- e.target +
- e.targetHandle;
- });
-}
-
-export function groupByFamily(data, baseClasses, left, type) {
- let parentOutput: string;
- let arrOfParent: string[] = [];
- let arrOfType: { family: string; type: string; component: string }[] = [];
- let arrOfLength: { length: number; type: string }[] = [];
- let lastType = "";
- Object.keys(data).map((d) => {
- Object.keys(data[d]).map((n) => {
- try {
- if (
- data[d][n].base_classes.some((r) =>
- baseClasses.split("\n").includes(r)
- )
- ) {
- arrOfParent.push(d);
- }
- if (n === type) {
- parentOutput = d;
- }
-
- if (d !== lastType) {
- arrOfLength.push({
- length: Object.keys(data[d]).length,
- type: d,
- });
-
- lastType = d;
- }
- } catch (e) {
- console.log(e);
- }
- });
- });
-
- Object.keys(data).map((d) => {
- Object.keys(data[d]).map((n) => {
- try {
- baseClasses.split("\n").forEach((tol) => {
- data[d][n].base_classes.forEach((data) => {
- if (tol == data) {
- arrOfType.push({
- family: d,
- type: data,
- component: n,
- });
- }
- });
- });
- } catch (e) {
- console.log(e);
- }
- });
- });
-
- if (left === false) {
- let groupedBy = arrOfType.filter((object, index, self) => {
- const foundIndex = self.findIndex(
- (o) => o.family === object.family && o.type === object.type
- );
- return foundIndex === index;
- });
-
- return groupedBy.reduce((result, item) => {
- const existingGroup = result.find(
- (group) => group.family === item.family
- );
-
- if (existingGroup) {
- existingGroup.type += `, ${item.type}`;
- } else {
- result.push({
- family: item.family,
- type: item.type,
- component: item.component,
- });
- }
-
- if (left === false) {
- let resFil = result.filter((group) => group.family === parentOutput);
- result = resFil;
- }
-
- return result;
- }, []);
- } else {
- const groupedArray = [];
- const groupedData = {};
-
- arrOfType.forEach((item) => {
- const { family, type, component } = item;
- const key = `${family}-${type}`;
-
- if (!groupedData[key]) {
- groupedData[key] = { family, type, component: [component] };
- } else {
- groupedData[key].component.push(component);
- }
- });
-
- for (const key in groupedData) {
- groupedArray.push(groupedData[key]);
- }
-
- groupedArray.forEach((object, index, self) => {
- const findObj = arrOfLength.find((x) => x.type === object.family);
- if (object.component.length === findObj.length) {
- self[index]["type"] = "";
- } else {
- self[index]["type"] = object.component.join(", ");
- }
- });
- return groupedArray;
- }
-}
-
-export function buildInputs(tabsState, id) {
- return tabsState &&
- tabsState[id] &&
- tabsState[id].formKeysData &&
- tabsState[id].formKeysData.input_keys &&
- Object.keys(tabsState[id].formKeysData.input_keys).length > 0
- ? JSON.stringify(tabsState[id].formKeysData.input_keys)
- : '{"input": "message"}';
-}
-
-export function buildTweaks(flow) {
- return flow.data.nodes.reduce((acc, node) => {
- acc[node.data.id] = {};
- return acc;
- }, {});
-}
-export function validateNode(
- n: NodeType,
- reactFlowInstance: ReactFlowInstance
-): Array {
- if (!n.data?.node?.template || !Object.keys(n.data.node.template)) {
- return [
- "We've noticed a potential issue with a node in the flow. Please review it and, if necessary, submit a bug report with your exported flow file. Thank you for your help!",
- ];
- }
-
- const {
- type,
- node: { template },
- } = n.data;
-
- return Object.keys(template).reduce(
- (errors: Array, t) =>
- errors.concat(
- template[t].required &&
- template[t].show &&
- (template[t].value === undefined ||
- template[t].value === null ||
- template[t].value === "") &&
- !reactFlowInstance
- .getEdges()
- .some(
- (e) =>
- e.targetHandle.split("|")[1] === t &&
- e.targetHandle.split("|")[2] === n.id
- )
- ? [
- `${type} is missing ${
- template.display_name || toNormalCase(template[t].name)
- }.`,
- ]
- : []
- ),
- [] as string[]
- );
-}
-
-export function validateNodes(reactFlowInstance: ReactFlowInstance) {
- if (reactFlowInstance.getNodes().length === 0) {
- return [
- "No nodes found in the flow. Please add at least one node to the flow.",
- ];
- }
- return reactFlowInstance
- .getNodes()
- .flatMap((n: NodeType) => validateNode(n, reactFlowInstance));
-}
-
-export function getRandomElement(array: T[]): T {
- return array[Math.floor(Math.random() * array.length)];
-}
-export function getRandomDescription(): string {
- return getRandomElement(DESCRIPTIONS);
-}
-
-export function getRandomName(
- retry: number = 0,
- noSpace: boolean = false,
- maxRetries: number = 3
-): string {
- const left: string[] = ADJECTIVES;
- const right: string[] = NOUNS;
-
- const lv = getRandomElement(left);
- const rv = getRandomElement(right);
-
- // Condition to avoid "boring wozniak"
- if (lv === "boring" && rv === "wozniak") {
- if (retry < maxRetries) {
- return getRandomName(retry + 1, noSpace, maxRetries);
- } else {
- console.warn("Max retries reached, returning as is");
- }
- }
-
- // Append a suffix if retrying and noSpace is true
- if (retry > 0 && noSpace) {
- const retrySuffix = Math.floor(Math.random() * 10);
- return `${lv}_${rv}${retrySuffix}`;
- }
-
- // Construct the final name
- let final_name = noSpace ? `${lv}_${rv}` : `${lv} ${rv}`;
- // Return title case final name
- return toTitleCase(final_name);
-}
-
-export function getRandomKeyByssmm(): string {
- const now = new Date();
- const seconds = String(now.getSeconds()).padStart(2, "0");
- const milliseconds = String(now.getMilliseconds()).padStart(3, "0");
- return seconds + milliseconds + Math.abs(Math.floor(Math.random() * 10001));
-}
-
-export const INVALID_CHARACTERS = [
- " ",
- ",",
- ".",
- ":",
- ";",
- "!",
- "?",
- "/",
- "\\",
- "(",
- ")",
- "[",
- "]",
- "\n",
-];
-
-export const regexHighlight = /\{([^}]+)\}/g;
-
-export const varHighlightHTML = ({ name }: IVarHighlightType) => {
- const html = `{${name}} `;
- return html;
-};
diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts
new file mode 100644
index 000000000..063daee74
--- /dev/null
+++ b/src/frontend/src/utils/reactflowUtils.ts
@@ -0,0 +1,234 @@
+import _ from "lodash";
+import { Connection, ReactFlowInstance } from "reactflow";
+import { APITemplateType } from "../types/api";
+import { FlowType, NodeType } from "../types/flow";
+import { cleanEdgesType } from "../types/utils/reactflowUtils";
+import { toNormalCase } from "./utils";
+
+export function cleanEdges({
+ flow: { edges, nodes },
+ updateEdge,
+}: cleanEdgesType) {
+ let newEdges = _.cloneDeep(edges);
+ edges.forEach((edge) => {
+ // check if the source and target node still exists
+ const sourceNode = nodes.find((node) => node.id === edge.source);
+ const targetNode = nodes.find((node) => node.id === edge.target);
+ if (!sourceNode || !targetNode) {
+ newEdges = newEdges.filter((e) => e.id !== edge.id);
+ }
+ // check if the source and target handle still exists
+ if (sourceNode && targetNode) {
+ const sourceHandle = edge.sourceHandle; //right
+ const targetHandle = edge.targetHandle; //left
+ if (targetHandle) {
+ const field = targetHandle.split("|")[1];
+ const id =
+ (targetNode.data.node.template[field]?.input_types?.join(";") ??
+ targetNode.data.node.template[field]?.type) +
+ "|" +
+ field +
+ "|" +
+ targetNode.data.id;
+ if (id !== targetHandle) {
+ newEdges = newEdges.filter((e) => e.id !== edge.id);
+ }
+ }
+ if (sourceHandle) {
+ const id = [
+ sourceNode.data.type,
+ sourceNode.data.id,
+ ...sourceNode.data.node.base_classes,
+ ].join("|");
+ if (id !== sourceHandle) {
+ newEdges = newEdges.filter((e) => e.id !== edge.id);
+ }
+ }
+ }
+ });
+ updateEdge(newEdges);
+}
+
+export function isValidConnection(
+ { source, target, sourceHandle, targetHandle }: Connection,
+ reactFlowInstance: ReactFlowInstance
+) {
+ if (
+ targetHandle
+ .split("|")[0]
+ .split(";")
+ .some((n) => n === sourceHandle.split("|")[0]) ||
+ sourceHandle
+ .split("|")
+ .slice(2)
+ .some((t) =>
+ targetHandle
+ .split("|")[0]
+ .split(";")
+ .some((n) => n === t)
+ ) ||
+ targetHandle.split("|")[0] === "str"
+ ) {
+ let targetNode = reactFlowInstance?.getNode(target)?.data?.node;
+ if (!targetNode) {
+ if (
+ !reactFlowInstance
+ .getEdges()
+ .find((e) => e.targetHandle === targetHandle)
+ ) {
+ return true;
+ }
+ } else if (
+ (!targetNode.template[targetHandle.split("|")[1]].list &&
+ !reactFlowInstance
+ .getEdges()
+ .find((e) => e.targetHandle === targetHandle)) ||
+ targetNode.template[targetHandle.split("|")[1]].list
+ ) {
+ return true;
+ }
+ }
+ return false;
+}
+
+export function removeApiKeys(flow: FlowType): FlowType {
+ let cleanFLow = _.cloneDeep(flow);
+ cleanFLow.data.nodes.forEach((node) => {
+ for (const key in node.data.node.template) {
+ if (node.data.node.template[key].password) {
+ node.data.node.template[key].value = "";
+ }
+ }
+ });
+ return cleanFLow;
+}
+
+export function updateTemplate(
+ reference: APITemplateType,
+ objectToUpdate: APITemplateType
+): APITemplateType {
+ let clonedObject: APITemplateType = _.cloneDeep(reference);
+
+ // Loop through each key in the reference object
+ for (const key in clonedObject) {
+ // If the key is not in the object to update, add it
+ if (objectToUpdate[key] && objectToUpdate[key].value) {
+ clonedObject[key].value = objectToUpdate[key].value;
+ }
+ if (
+ objectToUpdate[key] &&
+ objectToUpdate[key].advanced !== null &&
+ objectToUpdate[key].advanced !== undefined
+ ) {
+ clonedObject[key].advanced = objectToUpdate[key].advanced;
+ }
+ }
+ return clonedObject;
+}
+
+export function updateIds(newFlow, getNodeId) {
+ let idsMap = {};
+
+ newFlow.nodes.forEach((n: NodeType) => {
+ // Generate a unique node ID
+ let newId = getNodeId(n.data.type);
+ idsMap[n.id] = newId;
+ n.id = newId;
+ n.data.id = newId;
+ // Add the new node to the list of nodes in state
+ });
+
+ newFlow.edges.forEach((e) => {
+ e.source = idsMap[e.source];
+ e.target = idsMap[e.target];
+ let sourceHandleSplitted = e.sourceHandle.split("|");
+ e.sourceHandle =
+ sourceHandleSplitted[0] +
+ "|" +
+ e.source +
+ "|" +
+ sourceHandleSplitted.slice(2).join("|");
+ let targetHandleSplitted = e.targetHandle.split("|");
+ e.targetHandle =
+ targetHandleSplitted.slice(0, -1).join("|") + "|" + e.target;
+ e.id =
+ "reactflow__edge-" +
+ e.source +
+ e.sourceHandle +
+ "-" +
+ e.target +
+ e.targetHandle;
+ });
+}
+
+export function buildTweaks(flow) {
+ return flow.data.nodes.reduce((acc, node) => {
+ acc[node.data.id] = {};
+ return acc;
+ }, {});
+}
+
+export function validateNode(
+ n: NodeType,
+ reactFlowInstance: ReactFlowInstance
+): Array {
+ if (!n.data?.node?.template || !Object.keys(n.data.node.template)) {
+ return [
+ "We've noticed a potential issue with a node in the flow. Please review it and, if necessary, submit a bug report with your exported flow file. Thank you for your help!",
+ ];
+ }
+
+ const {
+ type,
+ node: { template },
+ } = n.data;
+
+ return Object.keys(template).reduce(
+ (errors: Array, t) =>
+ errors.concat(
+ template[t].required &&
+ template[t].show &&
+ (template[t].value === undefined ||
+ template[t].value === null ||
+ template[t].value === "") &&
+ !reactFlowInstance
+ .getEdges()
+ .some(
+ (e) =>
+ e.targetHandle.split("|")[1] === t &&
+ e.targetHandle.split("|")[2] === n.id
+ )
+ ? [
+ `${type} is missing ${
+ template.display_name || toNormalCase(template[t].name)
+ }.`,
+ ]
+ : []
+ ),
+ [] as string[]
+ );
+}
+
+export function validateNodes(reactFlowInstance: ReactFlowInstance) {
+ if (reactFlowInstance.getNodes().length === 0) {
+ return [
+ "No nodes found in the flow. Please add at least one node to the flow.",
+ ];
+ }
+ return reactFlowInstance
+ .getNodes()
+ .flatMap((n: NodeType) => validateNode(n, reactFlowInstance));
+}
+
+export function addVersionToDuplicates(flow: FlowType, flows: FlowType[]) {
+ const existingNames = flows.map((item) => item.name);
+ let newName = flow.name;
+ let count = 1;
+
+ while (existingNames.includes(newName)) {
+ newName = `${flow.name} (${count})`;
+ count++;
+ }
+
+ return newName;
+}
diff --git a/src/frontend/src/utils/styleUtils.ts b/src/frontend/src/utils/styleUtils.ts
new file mode 100644
index 000000000..dd34b5001
--- /dev/null
+++ b/src/frontend/src/utils/styleUtils.ts
@@ -0,0 +1,284 @@
+import {
+ Bell,
+ Check,
+ CheckCircle2,
+ ChevronDown,
+ ChevronLeft,
+ ChevronRight,
+ ChevronsUpDown,
+ Circle,
+ Clipboard,
+ Code2,
+ Compass,
+ Copy,
+ Cpu,
+ Download,
+ DownloadCloud,
+ Edit,
+ Eraser,
+ ExternalLink,
+ File,
+ FileDown,
+ FileSearch,
+ FileSearch2,
+ FileText,
+ FileUp,
+ Fingerprint,
+ Gift,
+ GitFork,
+ GithubIcon,
+ Hammer,
+ HelpCircle,
+ Home,
+ Info,
+ Laptop2,
+ Layers,
+ Lightbulb,
+ Link,
+ Lock,
+ LucideSend,
+ Menu,
+ MessageCircle,
+ MessageSquare,
+ MessagesSquare,
+ MoonIcon,
+ MoreHorizontal,
+ Paperclip,
+ Plus,
+ Redo,
+ Rocket,
+ Save,
+ Scissors,
+ Search,
+ Settings2,
+ Sparkles,
+ SunIcon,
+ TerminalSquare,
+ Trash2,
+ Undo,
+ Upload,
+ Users2,
+ Variable,
+ Wand2,
+ Wrench,
+ X,
+ XCircle,
+ Zap,
+} from "lucide-react";
+import { Edge, Node } from "reactflow";
+import { AirbyteIcon } from "../icons/Airbyte";
+import { AnthropicIcon } from "../icons/Anthropic";
+import { BingIcon } from "../icons/Bing";
+import { ChromaIcon } from "../icons/ChromaIcon";
+import { CohereIcon } from "../icons/Cohere";
+import { EvernoteIcon } from "../icons/Evernote";
+import { FBIcon } from "../icons/FacebookMessenger";
+import { GitBookIcon } from "../icons/GitBook";
+import { GoogleIcon } from "../icons/Google";
+import GradientSparkles from "../icons/GradientSparkles";
+import { HuggingFaceIcon } from "../icons/HuggingFace";
+import { IFixIcon } from "../icons/IFixIt";
+import { MetaIcon } from "../icons/Meta";
+import { MidjourneyIcon } from "../icons/Midjorney";
+import { MongoDBIcon } from "../icons/MongoDB";
+import { NotionIcon } from "../icons/Notion";
+import { OpenAiIcon } from "../icons/OpenAi";
+import { PineconeIcon } from "../icons/Pinecone";
+import { QDrantIcon } from "../icons/QDrant";
+import { SearxIcon } from "../icons/Searx";
+import SvgSlackIcon from "../icons/Slack/SlackIcon";
+import { VertexAIIcon } from "../icons/VertexAI";
+import SvgWikipedia from "../icons/Wikipedia/Wikipedia";
+import SvgWolfram from "../icons/Wolfram/Wolfram";
+import { HackerNewsIcon } from "../icons/hackerNews";
+import { SupabaseIcon } from "../icons/supabase";
+
+export const gradients = [
+ "bg-gradient-to-br from-gray-800 via-rose-700 to-violet-900",
+ "bg-gradient-to-br from-green-200 via-green-300 to-blue-500",
+ "bg-gradient-to-br from-yellow-200 via-yellow-400 to-yellow-700",
+ "bg-gradient-to-br from-green-200 via-green-400 to-purple-700",
+ "bg-gradient-to-br from-blue-100 via-blue-300 to-blue-500",
+ "bg-gradient-to-br from-purple-400 to-yellow-400",
+ "bg-gradient-to-br from-red-800 via-yellow-600 to-yellow-500",
+ "bg-gradient-to-br from-blue-300 via-green-200 to-yellow-300",
+ "bg-gradient-to-br from-blue-700 via-blue-800 to-gray-900",
+ "bg-gradient-to-br from-green-300 to-purple-400",
+ "bg-gradient-to-br from-yellow-200 via-pink-200 to-pink-400",
+ "bg-gradient-to-br from-green-500 to-green-700",
+ "bg-gradient-to-br from-rose-400 via-fuchsia-500 to-indigo-500",
+ "bg-gradient-to-br from-sky-400 to-blue-500",
+ "bg-gradient-to-br from-green-200 via-green-400 to-green-500",
+ "bg-gradient-to-br from-red-400 via-gray-300 to-blue-500",
+ "bg-gradient-to-br from-gray-900 to-gray-600 bg-gradient-to-r",
+ "bg-gradient-to-br from-rose-500 via-red-400 to-red-500",
+ "bg-gradient-to-br from-fuchsia-600 to-pink-600",
+ "bg-gradient-to-br from-emerald-500 to-lime-600",
+ "bg-gradient-to-br from-rose-500 to-indigo-700",
+ "bg-gradient-to-br bg-gradient-to-tr from-violet-500 to-orange-300",
+ "bg-gradient-to-br from-gray-900 via-purple-900 to-violet-600",
+ "bg-gradient-to-br from-yellow-200 via-red-500 to-fuchsia-500",
+ "bg-gradient-to-br from-sky-400 to-indigo-900",
+ "bg-gradient-to-br from-amber-200 via-violet-600 to-sky-900",
+ "bg-gradient-to-br from-amber-700 via-orange-300 to-rose-800",
+ "bg-gradient-to-br from-gray-300 via-fuchsia-600 to-orange-600",
+ "bg-gradient-to-br from-fuchsia-500 via-red-600 to-orange-400",
+ "bg-gradient-to-br from-sky-400 via-rose-400 to-lime-400",
+ "bg-gradient-to-br from-lime-600 via-yellow-300 to-red-600",
+];
+
+export const nodeColors: { [char: string]: string } = {
+ prompts: "#4367BF",
+ llms: "#6344BE",
+ chains: "#FE7500",
+ agents: "#903BBE",
+ tools: "#FF3434",
+ memories: "#F5B85A",
+ advanced: "#000000",
+ chat: "#198BF6",
+ thought: "#272541",
+ embeddings: "#42BAA7",
+ documentloaders: "#7AAE42",
+ vectorstores: "#AA8742",
+ textsplitters: "#B47CB5",
+ toolkits: "#DB2C2C",
+ wrappers: "#E6277A",
+ utilities: "#31A3CC",
+ output_parsers: "#E6A627",
+ str: "#049524",
+ retrievers: "#e6b25a",
+ unknown: "#9CA3AF",
+ custom_components: "#ab11ab",
+};
+
+export const nodeNames: { [char: string]: string } = {
+ prompts: "Prompts",
+ llms: "LLMs",
+ chains: "Chains",
+ agents: "Agents",
+ tools: "Tools",
+ memories: "Memories",
+ advanced: "Advanced",
+ chat: "Chat",
+ embeddings: "Embeddings",
+ documentloaders: "Loaders",
+ vectorstores: "Vector Stores",
+ toolkits: "Toolkits",
+ wrappers: "Wrappers",
+ textsplitters: "Text Splitters",
+ retrievers: "Retrievers",
+ utilities: "Utilities",
+ output_parsers: "Output Parsers",
+ custom_components: "Custom",
+ unknown: "Other",
+};
+
+export const nodeIconsLucide = {
+ Chroma: ChromaIcon,
+ AirbyteJSONLoader: AirbyteIcon,
+ Anthropic: AnthropicIcon,
+ ChatAnthropic: AnthropicIcon,
+ BingSearchAPIWrapper: BingIcon,
+ BingSearchRun: BingIcon,
+ Cohere: CohereIcon,
+ CohereEmbeddings: CohereIcon,
+ EverNoteLoader: EvernoteIcon,
+ FacebookChatLoader: FBIcon,
+ GitbookLoader: GitBookIcon,
+ GoogleSearchAPIWrapper: GoogleIcon,
+ GoogleSearchResults: GoogleIcon,
+ GoogleSearchRun: GoogleIcon,
+ HNLoader: HackerNewsIcon,
+ HuggingFaceHub: HuggingFaceIcon,
+ HuggingFaceEmbeddings: HuggingFaceIcon,
+ IFixitLoader: IFixIcon,
+ Meta: MetaIcon,
+ Midjorney: MidjourneyIcon,
+ MongoDBAtlasVectorSearch: MongoDBIcon,
+ NotionDirectoryLoader: NotionIcon,
+ ChatOpenAI: OpenAiIcon,
+ OpenAI: OpenAiIcon,
+ OpenAIEmbeddings: OpenAiIcon,
+ Pinecone: PineconeIcon,
+ Qdrant: QDrantIcon,
+ Searx: SearxIcon,
+ SlackDirectoryLoader: SvgSlackIcon,
+ SupabaseVectorStore: SupabaseIcon,
+ VertexAI: VertexAIIcon,
+ ChatVertexAI: VertexAIIcon,
+ agents: Rocket,
+ WikipediaAPIWrapper: SvgWikipedia,
+ chains: Link,
+ memories: Cpu,
+ llms: Lightbulb,
+ prompts: TerminalSquare,
+ tools: Wrench,
+ advanced: Laptop2,
+ chat: MessageCircle,
+ embeddings: Fingerprint,
+ documentloaders: Paperclip,
+ vectorstores: Layers,
+ toolkits: Hammer,
+ textsplitters: Scissors,
+ wrappers: Gift,
+ utilities: Wand2,
+ WolframAlphaAPIWrapper: SvgWolfram,
+ output_parsers: Compass,
+ retrievers: FileSearch,
+ unknown: HelpCircle,
+ WikipediaQueryRun: SvgWikipedia,
+ WolframAlphaQueryRun: SvgWolfram,
+ custom_components: GradientSparkles,
+ custom: Edit,
+ Trash2,
+ X,
+ XCircle,
+ Info,
+ CheckCircle2,
+ Zap,
+ MessagesSquare,
+ ExternalLink,
+ ChevronsUpDown,
+ Check,
+ Home,
+ Users2,
+ SunIcon,
+ MoonIcon,
+ Bell,
+ ChevronLeft,
+ ChevronDown,
+ Plus,
+ Redo,
+ Settings2,
+ Undo,
+ FileSearch2,
+ ChevronRight,
+ Circle,
+ Clipboard,
+ Code2,
+ Variable,
+ Download,
+ Eraser,
+ Lock,
+ LucideSend,
+ Sparkles,
+ DownloadCloud,
+ File,
+ FileText,
+ GitFork,
+ GithubIcon,
+ FileDown,
+ FileUp,
+ Menu,
+ Save,
+ Search,
+ Copy,
+ Upload,
+ MessageSquare,
+ MoreHorizontal,
+};
+export function getConnectedNodes(edge: Edge, nodes: Array): Array {
+ const sourceId = edge.source;
+ const targetId = edge.target;
+ return nodes.filter((node) => node.id === targetId || node.id === sourceId);
+}
diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.ts
new file mode 100644
index 000000000..462e72084
--- /dev/null
+++ b/src/frontend/src/utils/utils.ts
@@ -0,0 +1,387 @@
+import clsx, { ClassValue } from "clsx";
+import { twMerge } from "tailwind-merge";
+import { ADJECTIVES, DESCRIPTIONS, NOUNS } from "../flow_constants";
+import { IVarHighlightType } from "../types/components";
+import { FlowType, NodeType } from "../types/flow";
+import { TabsState } from "../types/tabs";
+import { buildTweaks } from "./reactflowUtils";
+
+export function classNames(...classes: Array) {
+ return classes.filter(Boolean).join(" ");
+}
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
+
+export function toNormalCase(str: string) {
+ let result = str
+ .split("_")
+ .map((word, index) => {
+ if (index === 0) {
+ return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ }
+ return word.toLowerCase();
+ })
+ .join(" ");
+
+ return result
+ .split("-")
+ .map((word, index) => {
+ if (index === 0) {
+ return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ }
+ return word.toLowerCase();
+ })
+ .join(" ");
+}
+
+export function normalCaseToSnakeCase(str: string) {
+ return str
+ .split(" ")
+ .map((word, index) => {
+ if (index === 0) {
+ return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ }
+ return word.toLowerCase();
+ })
+ .join("_");
+}
+
+export function toTitleCase(str: string) {
+ let result = str
+ .split("_")
+ .map((word, index) => {
+ if (index === 0) {
+ return checkUpperWords(
+ word[0].toUpperCase() + word.slice(1).toLowerCase()
+ );
+ }
+ return checkUpperWords(word.toLowerCase());
+ })
+ .join(" ");
+
+ return result
+ .split("-")
+ .map((word, index) => {
+ if (index === 0) {
+ return checkUpperWords(
+ word[0].toUpperCase() + word.slice(1).toLowerCase()
+ );
+ }
+ return checkUpperWords(word.toLowerCase());
+ })
+ .join(" ");
+}
+
+export const upperCaseWords: string[] = ["llm", "uri"];
+export function checkUpperWords(str: string) {
+ const words = str.split(" ").map((word) => {
+ return upperCaseWords.includes(word.toLowerCase())
+ ? word.toUpperCase()
+ : word[0].toUpperCase() + word.slice(1).toLowerCase();
+ });
+
+ return words.join(" ");
+}
+
+export const isWrappedWithClass = (event: any, className: string | undefined) =>
+ event.target.closest(`.${className}`);
+
+export function groupByFamily(data, baseClasses, left, flow?: NodeType[]) {
+ const baseClassesSet = new Set(baseClasses.split("\n"));
+ let arrOfPossibleInputs = [];
+ let arrOfPossibleOutputs = [];
+ let checkedNodes = new Map();
+ const excludeTypes = new Set([
+ "str",
+ "bool",
+ "float",
+ "code",
+ "prompt",
+ "file",
+ "int",
+ ]);
+
+ const checkBaseClass = (t: any) =>
+ t.type &&
+ t.show &&
+ ((!excludeTypes.has(t.type) && baseClassesSet.has(t.type)) ||
+ (t.input_types && t.input_types.some((x) => baseClassesSet.has(x))));
+
+ if (flow) {
+ for (const node of flow) {
+ const nodeData = node.data;
+ const foundNode = checkedNodes.get(nodeData.type);
+ checkedNodes.set(nodeData.type, {
+ hasBaseClassInTemplate:
+ foundNode?.hasBaseClassInTemplate ||
+ Object.values(nodeData.node.template).some(checkBaseClass),
+ hasBaseClassInBaseClasses:
+ foundNode?.hasBaseClassInBaseClasses ||
+ nodeData.node.base_classes.some((t) => baseClassesSet.has(t)),
+ });
+ }
+ }
+
+ for (const [d, nodes] of Object.entries(data)) {
+ let tempInputs = [],
+ tempOutputs = [];
+
+ for (const [n, node] of Object.entries(nodes)) {
+ let foundNode = checkedNodes.get(n);
+ if (!foundNode) {
+ foundNode = {
+ hasBaseClassInTemplate: Object.values(node.template).some(
+ checkBaseClass
+ ),
+ hasBaseClassInBaseClasses: node.base_classes.some((t) =>
+ baseClassesSet.has(t)
+ ),
+ };
+ checkedNodes.set(n, foundNode);
+ }
+
+ if (foundNode.hasBaseClassInTemplate) tempInputs.push(n);
+ if (foundNode.hasBaseClassInBaseClasses) tempOutputs.push(n);
+ }
+
+ const totalNodes = Object.keys(nodes).length;
+ if (tempInputs.length)
+ arrOfPossibleInputs.push({
+ category: d,
+ nodes: tempInputs,
+ full: tempInputs.length === totalNodes,
+ });
+ if (tempOutputs.length)
+ arrOfPossibleOutputs.push({
+ category: d,
+ nodes: tempOutputs,
+ full: tempOutputs.length === totalNodes,
+ });
+ }
+
+ return left
+ ? arrOfPossibleOutputs.map((t) => ({
+ family: t.category,
+ type: t.full ? "" : t.nodes.join(", "),
+ }))
+ : arrOfPossibleInputs.map((t) => ({
+ family: t.category,
+ type: t.full ? "" : t.nodes.join(", "),
+ }));
+}
+
+export function buildInputs(tabsState, id) {
+ return tabsState &&
+ tabsState[id] &&
+ tabsState[id].formKeysData &&
+ tabsState[id].formKeysData.input_keys &&
+ Object.keys(tabsState[id].formKeysData.input_keys).length > 0
+ ? JSON.stringify(tabsState[id].formKeysData.input_keys)
+ : '{"input": "message"}';
+}
+
+export function getRandomElement(array: T[]): T {
+ return array[Math.floor(Math.random() * array.length)];
+}
+export function getRandomDescription(): string {
+ return getRandomElement(DESCRIPTIONS);
+}
+
+export function getRandomName(
+ retry: number = 0,
+ noSpace: boolean = false,
+ maxRetries: number = 3
+): string {
+ const left: string[] = ADJECTIVES;
+ const right: string[] = NOUNS;
+
+ const lv = getRandomElement(left);
+ const rv = getRandomElement(right);
+
+ // Condition to avoid "boring wozniak"
+ if (lv === "boring" && rv === "wozniak") {
+ if (retry < maxRetries) {
+ return getRandomName(retry + 1, noSpace, maxRetries);
+ } else {
+ console.warn("Max retries reached, returning as is");
+ }
+ }
+
+ // Append a suffix if retrying and noSpace is true
+ if (retry > 0 && noSpace) {
+ const retrySuffix = Math.floor(Math.random() * 10);
+ return `${lv}_${rv}${retrySuffix}`;
+ }
+
+ // Construct the final name
+ let final_name = noSpace ? `${lv}_${rv}` : `${lv} ${rv}`;
+ // Return title case final name
+ return toTitleCase(final_name);
+}
+
+export function getRandomKeyByssmm(): string {
+ const now = new Date();
+ const seconds = String(now.getSeconds()).padStart(2, "0");
+ const milliseconds = String(now.getMilliseconds()).padStart(3, "0");
+ return seconds + milliseconds + Math.abs(Math.floor(Math.random() * 10001));
+}
+
+export function varHighlightHTML({ name }: IVarHighlightType): string {
+ const html = `{${name}} `;
+ return html;
+}
+
+export function buildTweakObject(tweak) {
+ tweak.forEach((el) => {
+ Object.keys(el).forEach((key) => {
+ for (let kp in el[key]) {
+ try {
+ el[key][kp] = JSON.parse(el[key][kp]);
+ } catch {}
+ }
+ });
+ });
+
+ const tweakString = JSON.stringify(tweak.at(-1), null, 2);
+ return tweakString;
+}
+
+/**
+ * Function to get the python code for the API
+ * @param {string} flowId - The id of the flow
+ * @returns {string} - The python code
+ */
+export function getPythonApiCode(
+ flow: FlowType,
+ tweak?: any[],
+ tabsState?: TabsState
+): string {
+ const flowId = flow.id;
+
+ // create a dictionary of node ids and the values is an empty dictionary
+ // flow.data.nodes.forEach((node) => {
+ // node.data.id
+ // }
+ const tweaks = buildTweaks(flow);
+ const inputs = buildInputs(tabsState, flow.id);
+ return `import requests
+from typing import Optional
+
+BASE_API_URL = "${window.location.protocol}//${
+ window.location.host
+ }/api/v1/process"
+FLOW_ID = "${flowId}"
+# You can tweak the flow by adding a tweaks dictionary
+# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
+TWEAKS = ${
+ tweak && tweak.length > 0
+ ? buildTweakObject(tweak)
+ : JSON.stringify(tweaks, null, 2)
+ }
+
+def run_flow(inputs: dict, flow_id: str, tweaks: Optional[dict] = None) -> dict:
+ """
+ Run a flow with a given message and optional tweaks.
+
+ :param message: The message to send to the flow
+ :param flow_id: The ID of the flow to run
+ :param tweaks: Optional tweaks to customize the flow
+ :return: The JSON response from the flow
+ """
+ api_url = f"{BASE_API_URL}/{flow_id}"
+
+ payload = {"inputs": inputs}
+
+ if tweaks:
+ payload["tweaks"] = tweaks
+
+ response = requests.post(api_url, json=payload)
+ return response.json()
+
+# Setup any tweaks you want to apply to the flow
+inputs = ${inputs}
+print(run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS))`;
+}
+
+/**
+ * Function to get the curl code for the API
+ * @param {string} flowId - The id of the flow
+ * @returns {string} - The curl code
+ */
+export function getCurlCode(
+ flow: FlowType,
+ tweak?: any[],
+ tabsState?: TabsState
+): string {
+ const flowId = flow.id;
+ const tweaks = buildTweaks(flow);
+ const inputs = buildInputs(tabsState, flow.id);
+
+ return `curl -X POST \\
+ ${window.location.protocol}//${
+ window.location.host
+ }/api/v1/process/${flowId} \\
+ -H 'Content-Type: application/json' \\
+ -d '{"inputs": ${inputs}, "tweaks": ${
+ tweak && tweak.length > 0
+ ? buildTweakObject(tweak)
+ : JSON.stringify(tweaks, null, 2)
+ }}'`;
+}
+
+/**
+ * Function to get the python code for the API
+ * @param {string} flow - The current flow
+ * @returns {string} - The python code
+ */
+export function getPythonCode(
+ flow: FlowType,
+ tweak?: any[],
+ tabsState?: TabsState
+): string {
+ const flowName = flow.name;
+ const tweaks = buildTweaks(flow);
+ const inputs = buildInputs(tabsState, flow.id);
+ return `from langflow import load_flow_from_json
+TWEAKS = ${
+ tweak && tweak.length > 0
+ ? buildTweakObject(tweak)
+ : JSON.stringify(tweaks, null, 2)
+ }
+flow = load_flow_from_json("${flowName}.json", tweaks=TWEAKS)
+# Now you can use it like any chain
+inputs = ${inputs}
+flow(inputs)`;
+}
+
+/**
+ * Function to get the widget code for the API
+ * @param {string} flow - The current flow.
+ * @returns {string} - The widget code
+ */
+export function getWidgetCode(flow: FlowType, tabsState?: TabsState): string {
+ const flowId = flow.id;
+ const flowName = flow.name;
+ const inputs = buildInputs(tabsState, flow.id);
+
+ return `
+
+
+ `;
+}
diff --git a/src/frontend/tailwind.config.js b/src/frontend/tailwind.config.js
index 429b9b26a..ea683e844 100644
--- a/src/frontend/tailwind.config.js
+++ b/src/frontend/tailwind.config.js
@@ -28,21 +28,9 @@ module.exports = {
},
},
extend: {
- keyframes: {
- "accordion-down": {
- from: { height: 0 },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: 0 },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- },
colors: {
+ "low-indigo": "var(--low-indigo)",
+ "chat-send": "var(--chat-send)",
connection: "var(--connection)",
"almost-dark-gray": "var(--almost-dark-gray)",
"almost-light-blue": "var(--almost-light-blue)",
@@ -83,6 +71,8 @@ module.exports = {
"status-yellow": "var(--status-yellow)",
"success-background": "var(--success-background)",
"success-foreground": "var(--success-foreground)",
+ "beta-background": "var(--beta-background)",
+ "beta-foreground": "var(--beta-foreground)",
"chat-bot-icon": "var(--chat-bot-icon)",
"chat-user-icon": "var(--chat-user-icon)",
@@ -129,20 +119,6 @@ module.exports = {
fontFamily: {
sans: ["var(--font-sans)", ...fontFamily.sans],
},
- keyframes: {
- slideDown: {
- from: { height: 0 },
- to: { height: 100 },
- },
- slideUp: {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: 0 },
- },
- },
- animation: {
- "accordion-down": "slideDown 300ms ease-out",
- "accordion-up": "slideUp 300ms ease-in",
- },
},
},
@@ -214,6 +190,7 @@ module.exports = {
"&::-webkit-scrollbar-thumb:hover": {
backgroundColor: "#bbb",
},
+ cursor: "auto",
},
".dark .theme-attribution .react-flow__attribution": {
backgroundColor: "rgba(255, 255, 255, 0.2)",
diff --git a/tests/conftest.py b/tests/conftest.py
index f893533ac..45a8f8f1f 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,3 +1,4 @@
+from contextlib import contextmanager
import json
from pathlib import Path
from typing import AsyncGenerator
@@ -93,8 +94,8 @@ def json_flow():
return f.read()
-@pytest.fixture(name="session") #
-def session_fixture(): #
+@pytest.fixture(name="session")
+def session_fixture():
engine = create_engine(
"sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool
)
@@ -103,16 +104,45 @@ def session_fixture(): #
yield session
-@pytest.fixture(name="client") #
-def client_fixture(session: Session): #
- def get_session_override(): #
+@pytest.fixture(name="client")
+def client_fixture(session: Session):
+ def get_session_override():
return session
from langflow.main import create_app
app = create_app()
- app.dependency_overrides[get_session] = get_session_override #
+ app.dependency_overrides[get_session] = get_session_override
yield TestClient(app)
- app.dependency_overrides.clear() #
+ app.dependency_overrides.clear()
+
+
+# @contextmanager
+# def session_getter():
+# try:
+# session = Session(engine)
+# yield session
+# except Exception as e:
+# print("Session rollback because of exception:", e)
+# session.rollback()
+# raise
+# finally:
+# session.close()
+
+
+# create a fixture for session_getter above
+@pytest.fixture(name="session_getter")
+def session_getter_fixture():
+ engine = create_engine(
+ "sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool
+ )
+ SQLModel.metadata.create_all(engine)
+
+ @contextmanager
+ def blank_session_getter():
+ with Session(engine) as session:
+ yield session
+
+ yield blank_session_getter
diff --git a/tests/test_agents_template.py b/tests/test_agents_template.py
index 93f4f8b5b..0b5fb7c3a 100644
--- a/tests/test_agents_template.py
+++ b/tests/test_agents_template.py
@@ -18,6 +18,7 @@ def test_zero_shot_agent(client: TestClient):
assert template["tools"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -32,6 +33,7 @@ def test_zero_shot_agent(client: TestClient):
# Additional assertions for other template variables
assert template["callback_manager"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -44,6 +46,7 @@ def test_zero_shot_agent(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -56,6 +59,7 @@ def test_zero_shot_agent(client: TestClient):
}
assert template["output_parser"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -68,6 +72,7 @@ def test_zero_shot_agent(client: TestClient):
}
assert template["input_variables"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -80,6 +85,7 @@ def test_zero_shot_agent(client: TestClient):
}
assert template["prefix"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": True,
@@ -93,6 +99,7 @@ def test_zero_shot_agent(client: TestClient):
}
assert template["suffix"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": True,
@@ -118,6 +125,7 @@ def test_json_agent(client: TestClient):
assert template["toolkit"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -130,6 +138,7 @@ def test_json_agent(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -155,6 +164,7 @@ def test_csv_agent(client: TestClient):
assert template["path"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -171,6 +181,7 @@ def test_csv_agent(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -196,6 +207,7 @@ def test_initialize_agent(client: TestClient):
assert template["agent"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -217,6 +229,7 @@ def test_initialize_agent(client: TestClient):
}
assert template["memory"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -229,6 +242,7 @@ def test_initialize_agent(client: TestClient):
}
assert template["tools"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -241,6 +255,7 @@ def test_initialize_agent(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
diff --git a/tests/test_chains_template.py b/tests/test_chains_template.py
index e183cb0d0..4339dbe3b 100644
--- a/tests/test_chains_template.py
+++ b/tests/test_chains_template.py
@@ -1,13 +1,12 @@
from fastapi.testclient import TestClient
-from langflow.settings import settings
-def test_chains_settings(client: TestClient):
- response = client.get("api/v1/all")
- assert response.status_code == 200
- json_response = response.json()
- chains = json_response["chains"]
- assert set(chains.keys()) == set(settings.chains)
+# def test_chains_settings(client: TestClient):
+# response = client.get("api/v1/all")
+# assert response.status_code == 200
+# json_response = response.json()
+# chains = json_response["chains"]
+# assert set(chains.keys()) == set(settings.chains)
# Test the ConversationChain object
@@ -29,6 +28,7 @@ def test_conversation_chain(client: TestClient):
template = chain["template"]
assert template["memory"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -41,6 +41,7 @@ def test_conversation_chain(client: TestClient):
}
assert template["verbose"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -53,6 +54,7 @@ def test_conversation_chain(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -65,6 +67,7 @@ def test_conversation_chain(client: TestClient):
}
assert template["input_key"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -78,6 +81,7 @@ def test_conversation_chain(client: TestClient):
}
assert template["output_key"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -115,6 +119,7 @@ def test_llm_chain(client: TestClient):
template = chain["template"]
assert template["memory"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -127,6 +132,7 @@ def test_llm_chain(client: TestClient):
}
assert template["verbose"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -140,6 +146,7 @@ def test_llm_chain(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -152,6 +159,7 @@ def test_llm_chain(client: TestClient):
}
assert template["output_key"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -182,6 +190,7 @@ def test_llm_checker_chain(client: TestClient):
template = chain["template"]
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -215,6 +224,7 @@ def test_llm_math_chain(client: TestClient):
template = chain["template"]
assert template["memory"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -227,6 +237,7 @@ def test_llm_math_chain(client: TestClient):
}
assert template["verbose"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -240,6 +251,7 @@ def test_llm_math_chain(client: TestClient):
}
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -252,6 +264,7 @@ def test_llm_math_chain(client: TestClient):
}
assert template["input_key"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -265,6 +278,7 @@ def test_llm_math_chain(client: TestClient):
}
assert template["output_key"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -306,6 +320,7 @@ def test_series_character_chain(client: TestClient):
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"display_name": "LLM",
"placeholder": "",
"show": True,
@@ -319,6 +334,7 @@ def test_series_character_chain(client: TestClient):
}
assert template["character"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -331,6 +347,7 @@ def test_series_character_chain(client: TestClient):
}
assert template["series"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -372,6 +389,7 @@ def test_mid_journey_prompt_chain(client: TestClient):
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"display_name": "LLM",
"placeholder": "",
"show": True,
@@ -412,6 +430,7 @@ def test_time_travel_guide_chain(client: TestClient):
assert template["llm"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"display_name": "LLM",
"show": True,
@@ -425,6 +444,7 @@ def test_time_travel_guide_chain(client: TestClient):
}
assert template["memory"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
diff --git a/tests/test_creators.py b/tests/test_creators.py
index 5453b57eb..2098e87cd 100644
--- a/tests/test_creators.py
+++ b/tests/test_creators.py
@@ -35,6 +35,7 @@ def test_lang_chain_type_creator_to_dict(
sample_lang_chain_type_creator: LangChainTypeCreator,
):
type_dict = sample_lang_chain_type_creator.to_dict()
+
assert len(type_dict) == 1
assert "test_type" in type_dict
assert "node1" in type_dict["test_type"]
diff --git a/tests/test_custom_component.py b/tests/test_custom_component.py
new file mode 100644
index 000000000..199906dda
--- /dev/null
+++ b/tests/test_custom_component.py
@@ -0,0 +1,558 @@
+import ast
+import pytest
+import types
+from uuid import uuid4
+
+
+from fastapi import HTTPException
+from langflow.database.models.flow import Flow, FlowCreate
+from langflow.interface.custom.base import CustomComponent
+from langflow.interface.custom.component import (
+ Component,
+ ComponentCodeNullError,
+ ComponentFunctionEntrypointNameNullError,
+)
+from langflow.interface.custom.code_parser import CodeParser, CodeSyntaxError
+
+
+code_default = """
+from langflow import Prompt
+from langflow.interface.custom.custom_component import CustomComponent
+
+from langchain.llms.base import BaseLLM
+from langchain.chains import LLMChain
+from langchain import PromptTemplate
+from langchain.schema import Document
+
+import requests
+
+class YourComponent(CustomComponent):
+ display_name: str = "Your Component"
+ description: str = "Your description"
+ field_config = { "url": { "multiline": True, "required": True } }
+
+ def build(self, url: str, llm: BaseLLM, template: Prompt) -> Document:
+ response = requests.get(url)
+ prompt = PromptTemplate.from_template(template)
+ chain = LLMChain(llm=llm, prompt=prompt)
+ result = chain.run(response.text[:300])
+ return Document(page_content=str(result))
+"""
+
+
+def test_code_parser_init():
+ """
+ Test the initialization of the CodeParser class.
+ """
+ parser = CodeParser(code_default)
+ assert parser.code == code_default
+
+
+def test_code_parser_get_tree():
+ """
+ Test the __get_tree method of the CodeParser class.
+ """
+ parser = CodeParser(code_default)
+ tree = parser._CodeParser__get_tree()
+ assert isinstance(tree, ast.AST)
+
+
+def test_code_parser_syntax_error():
+ """
+ Test the __get_tree method raises the
+ CodeSyntaxError when given incorrect syntax.
+ """
+ code_syntax_error = "zzz import os"
+
+ parser = CodeParser(code_syntax_error)
+ with pytest.raises(CodeSyntaxError):
+ parser._CodeParser__get_tree()
+
+
+def test_component_init():
+ """
+ Test the initialization of the Component class.
+ """
+ component = Component(code=code_default, function_entrypoint_name="build")
+ assert component.code == code_default
+ assert component.function_entrypoint_name == "build"
+
+
+def test_component_get_code_tree():
+ """
+ Test the get_code_tree method of the Component class.
+ """
+ component = Component(code=code_default, function_entrypoint_name="build")
+ tree = component.get_code_tree(component.code)
+ assert "imports" in tree
+
+
+def test_component_code_null_error():
+ """
+ Test the get_function method raises the
+ ComponentCodeNullError when the code is empty.
+ """
+ component = Component(code="", function_entrypoint_name="")
+ with pytest.raises(ComponentCodeNullError):
+ component.get_function()
+
+
+def test_component_function_entrypoint_name_null_error():
+ """
+ Test the get_function method raises the ComponentFunctionEntrypointNameNullError
+ when the function_entrypoint_name is empty.
+ """
+ component = Component(code=code_default, function_entrypoint_name="")
+ with pytest.raises(ComponentFunctionEntrypointNameNullError):
+ component.get_function()
+
+
+def test_custom_component_init():
+ """
+ Test the initialization of the CustomComponent class.
+ """
+ function_entrypoint_name = "build"
+
+ custom_component = CustomComponent(
+ code=code_default, function_entrypoint_name=function_entrypoint_name
+ )
+ assert custom_component.code == code_default
+ assert custom_component.function_entrypoint_name == function_entrypoint_name
+
+
+def test_custom_component_build_template_config():
+ """
+ Test the build_template_config property of the CustomComponent class.
+ """
+ custom_component = CustomComponent(
+ code=code_default, function_entrypoint_name="build"
+ )
+ config = custom_component.build_template_config
+ assert isinstance(config, dict)
+
+
+def test_custom_component_get_function():
+ """
+ Test the get_function property of the CustomComponent class.
+ """
+ custom_component = CustomComponent(
+ code="def build(): pass", function_entrypoint_name="build"
+ )
+ my_function = custom_component.get_function
+ assert isinstance(my_function, types.FunctionType)
+
+
+def test_code_parser_parse_imports_import():
+ """
+ Test the parse_imports method of the CodeParser
+ class with an import statement.
+ """
+ parser = CodeParser(code_default)
+ tree = parser._CodeParser__get_tree()
+ for node in ast.walk(tree):
+ if isinstance(node, ast.Import):
+ parser.parse_imports(node)
+ assert "requests" in parser.data["imports"]
+
+
+def test_code_parser_parse_imports_importfrom():
+ """
+ Test the parse_imports method of the CodeParser
+ class with an import from statement.
+ """
+ parser = CodeParser("from os import path")
+ tree = parser._CodeParser__get_tree()
+ for node in ast.walk(tree):
+ if isinstance(node, ast.ImportFrom):
+ parser.parse_imports(node)
+ assert ("os", "path") in parser.data["imports"]
+
+
+def test_code_parser_parse_functions():
+ """
+ Test the parse_functions method of the CodeParser class.
+ """
+ parser = CodeParser("def test(): pass")
+ tree = parser._CodeParser__get_tree()
+ for node in ast.walk(tree):
+ if isinstance(node, ast.FunctionDef):
+ parser.parse_functions(node)
+ assert len(parser.data["functions"]) == 1
+ assert parser.data["functions"][0]["name"] == "test"
+
+
+def test_code_parser_parse_classes():
+ """
+ Test the parse_classes method of the CodeParser class.
+ """
+ parser = CodeParser("class Test: pass")
+ tree = parser._CodeParser__get_tree()
+ for node in ast.walk(tree):
+ if isinstance(node, ast.ClassDef):
+ parser.parse_classes(node)
+ assert len(parser.data["classes"]) == 1
+ assert parser.data["classes"][0]["name"] == "Test"
+
+
+def test_code_parser_parse_global_vars():
+ """
+ Test the parse_global_vars method of the CodeParser class.
+ """
+ parser = CodeParser("x = 1")
+ tree = parser._CodeParser__get_tree()
+ for node in ast.walk(tree):
+ if isinstance(node, ast.Assign):
+ parser.parse_global_vars(node)
+ assert len(parser.data["global_vars"]) == 1
+ assert parser.data["global_vars"][0]["targets"] == ["x"]
+
+
+def test_component_get_function_valid():
+ """
+ Test the get_function method of the Component
+ class with valid code and function_entrypoint_name.
+ """
+ component = Component(code="def build(): pass", function_entrypoint_name="build")
+ my_function = component.get_function()
+ assert callable(my_function)
+
+
+def test_custom_component_get_function_entrypoint_args():
+ """
+ Test the get_function_entrypoint_args
+ property of the CustomComponent class.
+ """
+ custom_component = CustomComponent(
+ code=code_default, function_entrypoint_name="build"
+ )
+ args = custom_component.get_function_entrypoint_args
+ assert len(args) == 4
+ assert args[0]["name"] == "self"
+ assert args[1]["name"] == "url"
+ assert args[2]["name"] == "llm"
+
+
+def test_custom_component_get_function_entrypoint_return_type():
+ """
+ Test the get_function_entrypoint_return_type
+ property of the CustomComponent class.
+ """
+ custom_component = CustomComponent(
+ code=code_default, function_entrypoint_name="build"
+ )
+ return_type = custom_component.get_function_entrypoint_return_type
+ assert return_type == "Document"
+
+
+def test_custom_component_get_main_class_name():
+ """
+ Test the get_main_class_name property of the CustomComponent class.
+ """
+ custom_component = CustomComponent(
+ code=code_default, function_entrypoint_name="build"
+ )
+ class_name = custom_component.get_main_class_name
+ assert class_name == "YourComponent"
+
+
+def test_custom_component_get_function_valid():
+ """
+ Test the get_function property of the CustomComponent
+ class with valid code and function_entrypoint_name.
+ """
+ custom_component = CustomComponent(
+ code="def build(): pass", function_entrypoint_name="build"
+ )
+ my_function = custom_component.get_function
+ assert callable(my_function)
+
+
+def test_code_parser_parse_arg_no_annotation():
+ """
+ Test the parse_arg method of the CodeParser class without an annotation.
+ """
+ parser = CodeParser("")
+ arg = ast.arg(arg="x", annotation=None)
+ result = parser.parse_arg(arg, None)
+ assert result["name"] == "x"
+ assert "type" not in result
+
+
+def test_code_parser_parse_arg_with_annotation():
+ """
+ Test the parse_arg method of the CodeParser class with an annotation.
+ """
+ parser = CodeParser("")
+ arg = ast.arg(arg="x", annotation=ast.Name(id="int", ctx=ast.Load()))
+ result = parser.parse_arg(arg, None)
+ assert result["name"] == "x"
+ assert result["type"] == "int"
+
+
+def test_code_parser_parse_callable_details_no_args():
+ """
+ Test the parse_callable_details method of the
+ CodeParser class with a function with no arguments.
+ """
+ parser = CodeParser("")
+ node = ast.FunctionDef(
+ name="test",
+ args=ast.arguments(
+ args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]
+ ),
+ body=[],
+ decorator_list=[],
+ returns=None,
+ )
+ result = parser.parse_callable_details(node)
+ assert result["name"] == "test"
+ assert len(result["args"]) == 0
+
+
+def test_code_parser_parse_assign():
+ """
+ Test the parse_assign method of the CodeParser class.
+ """
+ parser = CodeParser("")
+ stmt = ast.Assign(targets=[ast.Name(id="x", ctx=ast.Store())], value=ast.Num(n=1))
+ result = parser.parse_assign(stmt)
+ assert result["name"] == "x"
+ assert result["value"] == "1"
+
+
+def test_code_parser_parse_ann_assign():
+ """
+ Test the parse_ann_assign method of the CodeParser class.
+ """
+ parser = CodeParser("")
+ stmt = ast.AnnAssign(
+ target=ast.Name(id="x", ctx=ast.Store()),
+ annotation=ast.Name(id="int", ctx=ast.Load()),
+ value=ast.Num(n=1),
+ simple=1,
+ )
+ result = parser.parse_ann_assign(stmt)
+ assert result["name"] == "x"
+ assert result["value"] == "1"
+ assert result["annotation"] == "int"
+
+
+def test_code_parser_parse_function_def_not_init():
+ """
+ Test the parse_function_def method of the
+ CodeParser class with a function that is not __init__.
+ """
+ parser = CodeParser("")
+ stmt = ast.FunctionDef(
+ name="test",
+ args=ast.arguments(
+ args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]
+ ),
+ body=[],
+ decorator_list=[],
+ returns=None,
+ )
+ result, is_init = parser.parse_function_def(stmt)
+ assert result["name"] == "test"
+ assert not is_init
+
+
+def test_code_parser_parse_function_def_init():
+ """
+ Test the parse_function_def method of the
+ CodeParser class with an __init__ function.
+ """
+ parser = CodeParser("")
+ stmt = ast.FunctionDef(
+ name="__init__",
+ args=ast.arguments(
+ args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]
+ ),
+ body=[],
+ decorator_list=[],
+ returns=None,
+ )
+ result, is_init = parser.parse_function_def(stmt)
+ assert result["name"] == "__init__"
+ assert is_init
+
+
+def test_component_get_code_tree_syntax_error():
+ """
+ Test the get_code_tree method of the Component class
+ raises the CodeSyntaxError when given incorrect syntax.
+ """
+ component = Component(code="import os as", function_entrypoint_name="build")
+ with pytest.raises(CodeSyntaxError):
+ component.get_code_tree(component.code)
+
+
+def test_custom_component_class_template_validation_no_code():
+ """
+ Test the _class_template_validation method of the CustomComponent class
+ raises the HTTPException when the code is None.
+ """
+ custom_component = CustomComponent(code=None, function_entrypoint_name="build")
+ with pytest.raises(HTTPException):
+ custom_component._class_template_validation(custom_component.code)
+
+
+def test_custom_component_get_code_tree_syntax_error():
+ """
+ Test the get_code_tree method of the CustomComponent class
+ raises the CodeSyntaxError when given incorrect syntax.
+ """
+ custom_component = CustomComponent(
+ code="import os as", function_entrypoint_name="build"
+ )
+ with pytest.raises(CodeSyntaxError):
+ custom_component.get_code_tree(custom_component.code)
+
+
+def test_custom_component_get_function_entrypoint_args_no_args():
+ """
+ Test the get_function_entrypoint_args property of
+ the CustomComponent class with a build method with no arguments.
+ """
+ my_code = """
+class MyMainClass(CustomComponent):
+ def build():
+ pass"""
+
+ custom_component = CustomComponent(code=my_code, function_entrypoint_name="build")
+ args = custom_component.get_function_entrypoint_args
+ assert len(args) == 0
+
+
+def test_custom_component_get_function_entrypoint_return_type_no_return_type():
+ """
+ Test the get_function_entrypoint_return_type property of the
+ CustomComponent class with a build method with no return type.
+ """
+ my_code = """
+class MyClass(CustomComponent):
+ def build():
+ pass"""
+
+ custom_component = CustomComponent(code=my_code, function_entrypoint_name="build")
+ return_type = custom_component.get_function_entrypoint_return_type
+ assert return_type is None
+
+
+def test_custom_component_get_main_class_name_no_main_class():
+ """
+ Test the get_main_class_name property of the
+ CustomComponent class when there is no main class.
+ """
+ my_code = """
+def build():
+ pass"""
+
+ custom_component = CustomComponent(code=my_code, function_entrypoint_name="build")
+ class_name = custom_component.get_main_class_name
+ assert class_name == ""
+
+
+def test_custom_component_build_not_implemented():
+ """
+ Test the build method of the CustomComponent
+ class raises the NotImplementedError.
+ """
+ custom_component = CustomComponent(
+ code="def build(): pass", function_entrypoint_name="build"
+ )
+ with pytest.raises(NotImplementedError):
+ custom_component.build()
+
+
+def test_build_config_no_code():
+ component = CustomComponent(code=None)
+
+ assert component.get_function_entrypoint_args == ""
+ assert component.get_function_entrypoint_return_type == ""
+
+
+@pytest.fixture
+def component():
+ return CustomComponent(
+ field_config={
+ "fields": {
+ "llm": {"type": "str"},
+ "url": {"type": "str"},
+ "year": {"type": "int"},
+ }
+ }
+ )
+
+
+@pytest.fixture(scope="session")
+def test_flow(db):
+ flow_data = {
+ "nodes": [{"id": "1"}, {"id": "2"}],
+ "edges": [{"source": "1", "target": "2"}],
+ }
+
+ # Create flow
+ flow = FlowCreate(
+ id=uuid4(), name="Test Flow", description="Fixture flow", data=flow_data
+ )
+
+ # Add to database
+ db.add(flow)
+ db.commit()
+
+ yield flow
+
+ # Clean up
+ db.delete(flow)
+ db.commit()
+
+
+@pytest.fixture(scope="session")
+def db(app):
+ # Setup database for tests
+ yield app.db
+
+ # Teardown
+ app.db.drop_all()
+
+
+def test_list_flows_return_type(component, session_getter):
+ flows = component.list_flows(get_session=session_getter)
+ assert isinstance(flows, list)
+
+
+def test_list_flows_flow_objects(component, session_getter):
+ flows = component.list_flows(get_session=session_getter)
+ assert all(isinstance(flow, Flow) for flow in flows)
+
+
+def test_build_config_return_type(component):
+ config = component.build_config()
+ assert isinstance(config, dict)
+
+
+def test_build_config_has_fields(component):
+ config = component.build_config()
+ assert "fields" in config
+
+
+def test_build_config_fields_dict(component):
+ config = component.build_config()
+ assert isinstance(config["fields"], dict)
+
+
+def test_build_config_field_keys(component):
+ config = component.build_config()
+ assert all(isinstance(key, str) for key in config["fields"])
+
+
+def test_build_config_field_values_dict(component):
+ config = component.build_config()
+ assert all(isinstance(value, dict) for value in config["fields"].values())
+
+
+def test_build_config_field_value_keys(component):
+ config = component.build_config()
+ field_values = config["fields"].values()
+ assert all("type" in value for value in field_values)
diff --git a/tests/test_llms_template.py b/tests/test_llms_template.py
index 7679ba9c0..6bb1bc28d 100644
--- a/tests/test_llms_template.py
+++ b/tests/test_llms_template.py
@@ -113,6 +113,7 @@ def test_openai(client: TestClient):
assert template["cache"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -125,6 +126,7 @@ def test_openai(client: TestClient):
}
assert template["verbose"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -137,6 +139,7 @@ def test_openai(client: TestClient):
}
assert template["client"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -149,6 +152,7 @@ def test_openai(client: TestClient):
}
assert template["model_name"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -170,6 +174,7 @@ def test_openai(client: TestClient):
# Add more assertions for other properties here
assert template["temperature"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -183,6 +188,7 @@ def test_openai(client: TestClient):
}
assert template["max_tokens"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -196,6 +202,7 @@ def test_openai(client: TestClient):
}
assert template["top_p"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -209,6 +216,7 @@ def test_openai(client: TestClient):
}
assert template["frequency_penalty"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -222,6 +230,7 @@ def test_openai(client: TestClient):
}
assert template["presence_penalty"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -235,6 +244,7 @@ def test_openai(client: TestClient):
}
assert template["n"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -248,6 +258,7 @@ def test_openai(client: TestClient):
}
assert template["best_of"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -261,6 +272,7 @@ def test_openai(client: TestClient):
}
assert template["model_kwargs"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -273,6 +285,7 @@ def test_openai(client: TestClient):
}
assert template["openai_api_key"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -287,6 +300,7 @@ def test_openai(client: TestClient):
}
assert template["batch_size"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -300,6 +314,7 @@ def test_openai(client: TestClient):
}
assert template["request_timeout"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -312,6 +327,7 @@ def test_openai(client: TestClient):
}
assert template["logit_bias"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -324,6 +340,7 @@ def test_openai(client: TestClient):
}
assert template["max_retries"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -337,6 +354,7 @@ def test_openai(client: TestClient):
}
assert template["streaming"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -361,6 +379,7 @@ def test_chat_open_ai(client: TestClient):
assert template["verbose"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -374,6 +393,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["client"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -386,6 +406,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["model_name"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -409,6 +430,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["temperature"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -422,6 +444,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["model_kwargs"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -434,6 +457,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["openai_api_key"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
@@ -448,6 +472,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["request_timeout"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -460,6 +485,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["max_retries"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -473,6 +499,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["streaming"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -486,6 +513,7 @@ def test_chat_open_ai(client: TestClient):
}
assert template["n"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -500,6 +528,7 @@ def test_chat_open_ai(client: TestClient):
assert template["max_tokens"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": False,
diff --git a/tests/test_prompts_template.py b/tests/test_prompts_template.py
index 5486f3034..afc595a41 100644
--- a/tests/test_prompts_template.py
+++ b/tests/test_prompts_template.py
@@ -20,6 +20,7 @@ def test_prompt_template(client: TestClient):
template = prompt["template"]
assert template["input_variables"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -30,8 +31,10 @@ def test_prompt_template(client: TestClient):
"advanced": False,
"info": "",
}
+
assert template["output_parser"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -42,8 +45,10 @@ def test_prompt_template(client: TestClient):
"advanced": False,
"info": "",
}
+
assert template["partial_variables"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -54,8 +59,10 @@ def test_prompt_template(client: TestClient):
"advanced": False,
"info": "",
}
+
assert template["template"] == {
"required": True,
+ "dynamic": False,
"placeholder": "",
"show": True,
"multiline": True,
@@ -66,8 +73,10 @@ def test_prompt_template(client: TestClient):
"advanced": False,
"info": "",
}
+
assert template["template_format"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,
@@ -79,8 +88,10 @@ def test_prompt_template(client: TestClient):
"advanced": False,
"info": "",
}
+
assert template["validate_template"] == {
"required": False,
+ "dynamic": False,
"placeholder": "",
"show": False,
"multiline": False,