diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 8c66075aef238..502058015a091 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -18,24 +18,24 @@ diverse, inclusive, and healthy community. Examples of behavior that contributes to a positive environment for our community include: -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback +* Demonstrating empathy and kindness toward other people. +* Being respectful of differing opinions, viewpoints, and experiences. +* Giving and gracefully accepting constructive feedback. * Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience + and learning from the experience. * Focusing on what is best not just for us as individuals, but for the overall - community + community. Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of - any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment + any kind. +* Trolling, insulting or derogatory comments, and personal or political attacks. +* Public or private harassment. * Publishing others' private information, such as a physical or email address, - without their explicit permission + without their explicit permission. * Other conduct which could reasonably be considered inappropriate in a - professional setting + professional setting. ## Enforcement Responsibilities @@ -61,7 +61,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -contact@all-hands.dev +contact@all-hands.dev. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1914cbd5b29d..2ffc73c9c65bb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,11 +11,11 @@ To understand the codebase, please refer to the README in each module: - [agenthub](./openhands/agenthub/README.md) - [server](./openhands/server/README.md) -## Setting up your development environment +## Setting up Your Development Environment We have a separate doc [Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md) that tells you how to set up a development workflow. -## How can I contribute? +## How Can I Contribute? There are many ways that you can contribute: @@ -23,7 +23,7 @@ There are many ways that you can contribute: 2. **Send feedback** after each session by [clicking the thumbs-up thumbs-down buttons](https://docs.all-hands.dev/modules/usage/feedback), so we can see where things are working and failing, and also build an open dataset for training code agents. 3. **Improve the Codebase** by sending [PRs](#sending-pull-requests-to-openhands) (see details below). In particular, we have some [good first issues](https://github.com/All-Hands-AI/OpenHands/labels/good%20first%20issue) that may be ones to start on. -## What can I build? +## What Can I Build? Here are a few ways you can help improve the codebase. #### UI/UX @@ -35,7 +35,7 @@ of the application, please open an issue first, or better, join the #frontend ch to gather consensus from our design team first. #### Improving the agent -Our main agent is the CodeAct agent. You can [see its prompts here](https://github.com/All-Hands-AI/OpenHands/tree/main/openhands/agenthub/codeact_agent) +Our main agent is the CodeAct agent. You can [see its prompts here](https://github.com/All-Hands-AI/OpenHands/tree/main/openhands/agenthub/codeact_agent). Changes to these prompts, and to the underlying behavior in Python, can have a huge impact on user experience. You can try modifying the prompts to see how they change the behavior of the agent as you use the app @@ -63,7 +63,7 @@ At the moment, we have two kinds of tests: [`unit`](./tests/unit) and [`integrat ## Sending Pull Requests to OpenHands You'll need to fork our repository to send us a Pull Request. You can learn more -about how to fork a GitHub repo and open a PR with your changes in [this article](https://medium.com/swlh/forks-and-pull-requests-how-to-contribute-to-github-repos-8843fac34ce8) +about how to fork a GitHub repo and open a PR with your changes in [this article](https://medium.com/swlh/forks-and-pull-requests-how-to-contribute-to-github-repos-8843fac34ce8). ### Pull Request title As described [here](https://github.com/commitizen/conventional-commit-types/blob/master/index.json), a valid PR title should begin with one of the following prefixes: @@ -103,7 +103,7 @@ Further, if you see an issue you like, please leave a "thumbs-up" or a comment, ### Making Pull Requests -We're generally happy to consider all [PRs](https://github.com/All-Hands-AI/OpenHands/pulls), with the evaluation process varying based on the type of change: +We're generally happy to consider all pull requests with the evaluation process varying based on the type of change: #### For Small Improvements diff --git a/Development.md b/Development.md index 2698a33d4bfb5..3ac856c2cea69 100644 --- a/Development.md +++ b/Development.md @@ -3,7 +3,7 @@ This guide is for people working on OpenHands and editing the source code. If you wish to contribute your changes, check out the [CONTRIBUTING.md](https://github.com/All-Hands-AI/OpenHands/blob/main/CONTRIBUTING.md) on how to clone and setup the project initially before moving on. Otherwise, you can clone the OpenHands project directly. -## Start the server for development +## Start the Server for Development ### 1. Requirements * Linux, Mac OS, or [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install) [Ubuntu <= 22.04] * [Docker](https://docs.docker.com/engine/install/) (For those on MacOS, make sure to allow the default Docker socket to be used from advanced settings!) @@ -58,7 +58,7 @@ See [our documentation](https://docs.all-hands.dev/modules/usage/llms) for recom ### 4. Running the application #### Option A: Run the Full Application -Once the setup is complete, launching OpenHands is as simple as running a single command. This command starts both the backend and frontend servers seamlessly, allowing you to interact with OpenHands: +Once the setup is complete, this command starts both the backend and frontend servers, allowing you to interact with OpenHands: ```bash make run ``` @@ -75,11 +75,11 @@ make run ``` ### 6. LLM Debugging -If you encounter any issues with the Language Model (LM) or you're simply curious, you can inspect the actual LLM prompts and responses. To do so, export DEBUG=1 in the environment and restart the backend. -OpenHands will then log the prompts and responses in the logs/llm/CURRENT_DATE directory, allowing you to identify the causes. +If you encounter any issues with the Language Model (LM) or you're simply curious, export DEBUG=1 in the environment and restart the backend. +OpenHands will log the prompts and responses in the logs/llm/CURRENT_DATE directory, allowing you to identify the causes. ### 7. Help -Need assistance or information on available targets and commands? The help command provides all the necessary guidance to ensure a smooth experience with OpenHands. +Need help or info on available targets and commands? Use the help command for all the guidance you need with OpenHands. ```bash make help ``` @@ -93,14 +93,14 @@ poetry run pytest ./tests/unit/test_*.py ``` ### 9. Add or update dependency -1. Add your dependency in `pyproject.toml` or use `poetry add xxx` -2. Update the poetry.lock file via `poetry lock --no-update` +1. Add your dependency in `pyproject.toml` or use `poetry add xxx`. +2. Update the poetry.lock file via `poetry lock --no-update`. ### 9. Use existing Docker image To reduce build time (e.g., if no changes were made to the client-runtime component), you can use an existing Docker container image by setting the SANDBOX_RUNTIME_CONTAINER_IMAGE environment variable to the desired Docker image. -Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.18-nikolaik` +Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.19-nikolaik` ## Develop inside Docker container @@ -110,7 +110,7 @@ TL;DR make docker-dev ``` -See more details [here](./containers/dev/README.md) +See more details [here](./containers/dev/README.md). If you are just interested in running `OpenHands` without installing all the required tools on your host. diff --git a/ISSUE_TRIAGE.md b/ISSUE_TRIAGE.md index 1cb12cc9ea6eb..0bec6484825ab 100644 --- a/ISSUE_TRIAGE.md +++ b/ISSUE_TRIAGE.md @@ -2,8 +2,8 @@ These are the procedures and guidelines on how issues are triaged in this repo by the maintainers. ## General -* Most issues must be tagged with **enhancement** or **bug** -* Issues may be tagged with what it relates to (**backend**, **frontend**, **agent quality**, etc.) +* Most issues must be tagged with **enhancement** or **bug**. +* Issues may be tagged with what it relates to (**backend**, **frontend**, **agent quality**, etc.). ## Severity * **Low**: Minor issues or affecting single user. @@ -11,10 +11,10 @@ These are the procedures and guidelines on how issues are triaged in this repo b * **Critical**: Affecting all users or potential security issues. ## Effort -* Issues may be estimated with effort required (**small effort**, **medium effort**, **large effort**) +* Issues may be estimated with effort required (**small effort**, **medium effort**, **large effort**). ## Difficulty -* Issues with low implementation difficulty may be tagged with **good first issue** +* Issues with low implementation difficulty may be tagged with **good first issue**. ## Not Enough Information * User is asked to provide more information (logs, how to reproduce, etc.) when the issue is not clear. diff --git a/README.md b/README.md index fbf479e07efde..b4f8384be94e7 100644 --- a/README.md +++ b/README.md @@ -43,17 +43,17 @@ See the [Installation](https://docs.all-hands.dev/modules/usage/installation) gu system requirements and more information. ```bash -docker pull docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik +docker pull docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik docker run -it --rm --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 + docker.all-hands.dev/all-hands-ai/openhands:0.19 ``` You'll find OpenHands running at [http://localhost:3000](http://localhost:3000)! diff --git a/compose.yml b/compose.yml index 8e8dcd03d3987..dc36f0d43bce8 100644 --- a/compose.yml +++ b/compose.yml @@ -7,7 +7,7 @@ services: image: openhands:latest container_name: openhands-app-${DATE:-} environment: - - SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.18-nikolaik} + - SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.19-nikolaik} - SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234} - WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace} ports: diff --git a/containers/dev/compose.yml b/containers/dev/compose.yml index 952e7d2d10906..582774206e449 100644 --- a/containers/dev/compose.yml +++ b/containers/dev/compose.yml @@ -11,7 +11,7 @@ services: - BACKEND_HOST=${BACKEND_HOST:-"0.0.0.0"} - SANDBOX_API_HOSTNAME=host.docker.internal # - - SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.18-nikolaik} + - SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.19-nikolaik} - SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234} - WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace} ports: diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md index a5a7a2cae45f3..7883ddb1050b1 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md @@ -52,7 +52,7 @@ LLM_API_KEY="sk_test_12345" ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -61,7 +61,7 @@ docker run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.cli ``` diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md index 130da64e78d74..debe50e6253c8 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md @@ -46,7 +46,7 @@ LLM_API_KEY="sk_test_12345" ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -56,6 +56,6 @@ docker run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.main -t "write a bash script that prints hi" --no-auto-continue ``` diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx index 21cf973215eea..733a39c5c3ae2 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/installation.mdx @@ -13,16 +13,16 @@ La façon la plus simple d'exécuter OpenHands est avec Docker. ```bash -docker pull docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik +docker pull docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik docker run -it --rm --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 + docker.all-hands.dev/all-hands-ai/openhands:0.19 ``` Vous pouvez également exécuter OpenHands en mode [headless scriptable](https://docs.all-hands.dev/modules/usage/how-to/headless-mode), en tant que [CLI interactive](https://docs.all-hands.dev/modules/usage/how-to/cli-mode), ou en utilisant l'[Action GitHub OpenHands](https://docs.all-hands.dev/modules/usage/how-to/github-action). diff --git a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes.md b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes.md index c2853d0b0d742..c9662bfc9f4df 100644 --- a/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes.md +++ b/docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes.md @@ -13,7 +13,7 @@ C'est le Runtime par défaut qui est utilisé lorsque vous démarrez OpenHands. ``` docker run # ... - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -v /var/run/docker.sock:/var/run/docker.sock \ # ... ``` diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md index 615e1b23d8e86..2bec7449c35b7 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/cli-mode.md @@ -50,7 +50,7 @@ LLM_API_KEY="sk_test_12345" ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -59,7 +59,7 @@ docker run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.cli ``` diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md index 6dd7554893f8b..606d7c1184bd5 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/headless-mode.md @@ -47,7 +47,7 @@ LLM_API_KEY="sk_test_12345" ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -57,6 +57,6 @@ docker run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.main -t "write a bash script that prints hi" --no-auto-continue ``` diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/installation.mdx b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/installation.mdx index 648ed6a764507..f49e1270e7d5d 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/installation.mdx +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/installation.mdx @@ -11,16 +11,16 @@ 在 Docker 中运行 OpenHands 是最简单的方式。 ```bash -docker pull docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik +docker pull docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik docker run -it --rm --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 + docker.all-hands.dev/all-hands-ai/openhands:0.19 ``` 你也可以在可脚本化的[无头模式](https://docs.all-hands.dev/modules/usage/how-to/headless-mode)下运行 OpenHands,作为[交互式 CLI](https://docs.all-hands.dev/modules/usage/how-to/cli-mode),或使用 [OpenHands GitHub Action](https://docs.all-hands.dev/modules/usage/how-to/github-action)。 diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes.md b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes.md index 51f7269047913..ec6d3152e7548 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes.md +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes.md @@ -11,7 +11,7 @@ ``` docker run # ... - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -v /var/run/docker.sock:/var/run/docker.sock \ # ... ``` diff --git a/docs/modules/usage/how-to/cli-mode.md b/docs/modules/usage/how-to/cli-mode.md index 7f4b89a4bc169..0bb888c4ff955 100644 --- a/docs/modules/usage/how-to/cli-mode.md +++ b/docs/modules/usage/how-to/cli-mode.md @@ -35,7 +35,7 @@ To run OpenHands in CLI mode with Docker: ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -45,7 +45,7 @@ docker run -it \ -v ~/.openhands-state:/.openhands-state \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.cli ``` diff --git a/docs/modules/usage/how-to/headless-mode.md b/docs/modules/usage/how-to/headless-mode.md index 133ba1fd4ba69..e1d064d7f4bc6 100644 --- a/docs/modules/usage/how-to/headless-mode.md +++ b/docs/modules/usage/how-to/headless-mode.md @@ -32,7 +32,7 @@ To run OpenHands in Headless mode with Docker: ```bash docker run -it \ --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e SANDBOX_USER_ID=$(id -u) \ -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ -e LLM_API_KEY=$LLM_API_KEY \ @@ -43,7 +43,7 @@ docker run -it \ -v ~/.openhands-state:/.openhands-state \ --add-host host.docker.internal:host-gateway \ --name openhands-app-$(date +%Y%m%d%H%M%S) \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 \ + docker.all-hands.dev/all-hands-ai/openhands:0.19 \ python -m openhands.core.main -t "write a bash script that prints hi" ``` diff --git a/docs/modules/usage/installation.mdx b/docs/modules/usage/installation.mdx index 7b59b2baa121e..7ce09c3c890df 100644 --- a/docs/modules/usage/installation.mdx +++ b/docs/modules/usage/installation.mdx @@ -11,17 +11,17 @@ The easiest way to run OpenHands is in Docker. ```bash -docker pull docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik +docker pull docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik docker run -it --rm --pull=always \ - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ - docker.all-hands.dev/all-hands-ai/openhands:0.18 + docker.all-hands.dev/all-hands-ai/openhands:0.19 ``` You'll find OpenHands running at http://localhost:3000! diff --git a/docs/modules/usage/llms/llms.md b/docs/modules/usage/llms/llms.md index 709e86c3cf9a4..5e6a472d0c0a4 100644 --- a/docs/modules/usage/llms/llms.md +++ b/docs/modules/usage/llms/llms.md @@ -5,23 +5,14 @@ OpenHands can connect to any LLM supported by LiteLLM. However, it requires a po ## Model Recommendations Based on our evaluations of language models for coding tasks (using the SWE-bench dataset), we can provide some -recommendations for model selection. Some analyses can be found in [this blog article comparing LLMs](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed) and -[this blog article with some more recent results](https://www.all-hands.dev/blog/openhands-codeact-21-an-open-state-of-the-art-software-development-agent). - -When choosing a model, consider both the quality of outputs and the associated costs. Here's a summary of the findings: - -- Claude 3.5 Sonnet is the best by a fair amount, achieving a 53% resolve rate on SWE-Bench Verified with the default agent in OpenHands. -- GPT-4o lags behind, and o1-mini actually performed somewhat worse than GPT-4o. We went in and analyzed the results a little, and briefly it seemed like o1 was sometimes "overthinking" things, performing extra environment configuration tasks when it could just go ahead and finish the task. -- Finally, the strongest open models were Llama 3.1 405 B and deepseek-v2.5, and they performed reasonably, even besting some of the closed models. - -Please refer to the [full article](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed) for more details. +recommendations for model selection. Our latest benchmarking results can be found in [this spreadsheet](https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=0). Based on these findings and community feedback, the following models have been verified to work reasonably well with OpenHands: -- claude-3-5-sonnet (recommended) -- gpt-4 / gpt-4o -- llama-3.1-405b -- deepseek-v2.5 +- anthropic/claude-3-5-sonnet-20241022 (recommended) +- anthropic/claude-3-5-haiku-20241022 +- deepseek/deepseek-chat +- gpt-4o :::warning OpenHands will issue many prompts to the LLM you configure. Most of these LLMs cost money, so be sure to set spending diff --git a/docs/modules/usage/prompting/microagents.md b/docs/modules/usage/prompting/microagents-public.md similarity index 70% rename from docs/modules/usage/prompting/microagents.md rename to docs/modules/usage/prompting/microagents-public.md index 51f9f91b491c4..f966977bf202a 100644 --- a/docs/modules/usage/prompting/microagents.md +++ b/docs/modules/usage/prompting/microagents-public.md @@ -1,17 +1,31 @@ -# Micro-Agents +# Public Micro-Agents -OpenHands uses specialized micro-agents to handle specific tasks and contexts efficiently. These micro-agents are small, focused components that provide specialized behavior and knowledge for particular scenarios. +OpenHands uses specialized micro-agents to handle specific tasks and contexts efficiently. These micro-agents are small, +focused components that provide specialized behavior and knowledge for particular scenarios. ## Overview -Micro-agents are defined in markdown files under the `openhands/agenthub/codeact_agent/micro/` directory. Each micro-agent is configured with: +Public micro-agents are defined in markdown files under the +[`microagents/knowledge/`](https://github.com/All-Hands-AI/OpenHands/tree/main/microagents/knowledge) directory. +Each micro-agent is configured with: - A unique name. - The agent type (typically CodeActAgent). - Trigger keywords that activate the agent. - Specific instructions and capabilities. -## Available Micro-Agents +### Integration + +Public micro-agents are automatically integrated into OpenHands' workflow. They: +- Monitor incoming commands for their trigger words. +- Activate when relevant triggers are detected. +- Apply their specialized knowledge and capabilities. +- Follow their specific guidelines and restrictions. + +## Available Public Micro-Agents + +For more information about specific micro-agents, refer to their individual documentation files in +the [`micro-agents`](https://github.com/All-Hands-AI/OpenHands/tree/main/microagents) directory. ### GitHub Agent **File**: `github.md` @@ -29,6 +43,14 @@ Key features: - Git configuration management - API-first approach for GitHub operations +Usage Example: + +```bash +git checkout -b feature-branch +git commit -m "Add new feature" +git push origin feature-branch +``` + ### NPM Agent **File**: `npm.md` **Triggers**: `npm` @@ -38,9 +60,15 @@ Specializes in handling npm package management with specific focus on: - Automated confirmation handling using Unix 'yes' command. - Package installation automation. -### Custom Micro-Agents +Usage Example: + +```bash +yes | npm install package-name +``` -You can create your own micro-agents by adding new markdown files to the micro-agents directory. +### Custom Public Micro-Agents + +You can create your own public micro-agents by adding new markdown files to the `microagents/knowledge/` directory. Each file should follow this structure: ```markdown @@ -55,43 +83,29 @@ triggers: Instructions and capabilities for the micro-agent... ``` -## Best Practices +## Working With Public Micro-Agents -When working with micro-agents: +When working with public micro-agents: - **Use Appropriate Triggers**: Ensure your commands include the relevant trigger words to activate the correct micro-agent. - **Follow Agent Guidelines**: Each agent has specific instructions and limitations. Respect these for optimal results. - **API-First Approach**: When available, use API endpoints rather than web interfaces. - **Automation Friendly**: Design commands that work well in non-interactive environments. -## Integration +## Contributing a Public Micro-Agent -Micro-agents are automatically integrated into OpenHands' workflow. They: -- Monitor incoming commands for their trigger words. -- Activate when relevant triggers are detected. -- Apply their specialized knowledge and capabilities. -- Follow their specific guidelines and restrictions. +Best practices for creating public micro-agents: -## Example Usage - -```bash -# GitHub agent example -git checkout -b feature-branch -git commit -m "Add new feature" -git push origin feature-branch - -# NPM agent example -yes | npm install package-name -``` - -For more information about specific agents, refer to their individual documentation files in the micro-agents directory. - -## Contributing a Micro-Agent +- **Clear Scope**: Keep the micro-agent focused on a specific domain or task. +- **Explicit Instructions**: Provide clear, unambiguous guidelines. +- **Useful Examples**: Include practical examples of common use cases. +- **Safety First**: Include necessary warnings and constraints. +- **Integration Awareness**: Consider how the micro-agent interacts with other components. -To contribute a new micro-agent to OpenHands, follow these guidelines: +To contribute a new micro-agent to OpenHands: -### 1. Planning Your Micro-Agent +### 1. Plan the Public Micro-Agent -Before creating a micro-agent, consider: +Before creating a public micro-agent, consider: - What specific problem or use case will it address? - What unique capabilities or knowledge should it have? - What trigger words make sense for activating it? @@ -99,11 +113,11 @@ Before creating a micro-agent, consider: ### 2. File Structure -Create a new markdown file in `openhands/agenthub/codeact_agent/micro/` with a descriptive name (e.g., `docker.md` for a Docker-focused agent). +Create a new markdown file in `microagents/knowledge/` with a descriptive name (e.g., `docker.md` for a Docker-focused agent). ### 3. Required Components -Your micro-agent file must include: +The micro-agent file must include: - **Front Matter**: YAML metadata at the start of the file: ```markdown @@ -133,15 +147,7 @@ Examples of usage: [Example 2] ``` -### 4. Best Practices for Micro-Agent Development - -- **Clear Scope**: Keep the agent focused on a specific domain or task. -- **Explicit Instructions**: Provide clear, unambiguous guidelines. -- **Useful Examples**: Include practical examples of common use cases. -- **Safety First**: Include necessary warnings and constraints. -- **Integration Awareness**: Consider how the agent interacts with other components. - -### 5. Testing Your Micro-Agent +### 4. Testing the Public Micro-Agent Before submitting: - Test the agent with various prompts. @@ -149,7 +155,14 @@ Before submitting: - Ensure instructions are clear and comprehensive. - Check for potential conflicts with existing agents. -### 6. Example Implementation +### 5. Submission Process + +Submit a pull request with: +- The new micro-agent file. +- Updated documentation if needed. +- Description of the agent's purpose and capabilities. + +### Example Public Micro-Agent Implementation Here's a template for a new micro-agent: @@ -197,14 +210,5 @@ Remember to: - Optimize for build time and image size ``` -### 7. Submission Process - -1. Create your micro-agent file in the correct directory. -2. Test thoroughly. -3. Submit a pull request with: - - The new micro-agent file. - - Updated documentation if needed. - - Description of the agent's purpose and capabilities. - Remember that micro-agents are a powerful way to extend OpenHands' capabilities in specific domains. Well-designed agents can significantly improve the system's ability to handle specialized tasks. diff --git a/docs/modules/usage/prompting/customization.md b/docs/modules/usage/prompting/microagents-repo.md similarity index 80% rename from docs/modules/usage/prompting/customization.md rename to docs/modules/usage/prompting/microagents-repo.md index 362368d9ed390..3d294f22d4fe8 100644 --- a/docs/modules/usage/prompting/customization.md +++ b/docs/modules/usage/prompting/microagents-repo.md @@ -1,10 +1,12 @@ -# Customizing Agent Behavior +# Repository Micro-Agents -OpenHands can be customized to work more effectively with specific repositories by providing repository-specific context and guidelines. This section explains how to optimize OpenHands for your project. +OpenHands can be customized to work more effectively with specific repositories by providing repository-specific context +and guidelines. This section explains how to optimize OpenHands for your project. ## Repository Configuration -You can customize OpenHands' behavior for your repository by creating a `.openhands` directory in your repository's root. At minimum, it should contain the file +You can customize OpenHands' behavior for your repository by creating a `.openhands/microagents/` directory in your repository's root. +At minimum, it should contain the file `.openhands/microagents/repo.md`, which includes instructions that will be given to the agent every time it works with this repository. @@ -39,7 +41,8 @@ Guidelines: ### Customizing Prompts -When working with a repository: +You may also add customized prompts to the `.openhands/microagents/repo.md` file when working with a repository. +These could: - **Reference Project Standards**: Mention specific coding standards or patterns used in your project. - **Include Context**: Reference relevant documentation or existing implementations. @@ -54,14 +57,10 @@ The component should use our shared styling from src/styles/components. ### Best Practices for Repository Customization -- **Keep Instructions Updated**: Regularly update your `.openhands` directory as your project evolves. +- **Keep Instructions Updated**: Regularly update your `.openhands/microagents/` directory as your project evolves. - **Be Specific**: Include specific paths, patterns, and requirements unique to your project. - **Document Dependencies**: List all tools and dependencies required for development. - **Include Examples**: Provide examples of good code patterns from your project. - **Specify Conventions**: Document naming conventions, file organization, and code style preferences. By customizing OpenHands for your repository, you'll get more accurate and consistent results that align with your project's standards and requirements. - -## Other Microagents -You can create other instructions in the `.openhands/microagents/` directory -that will be sent to the agent if a particular keyword is found, like `test`, `frontend`, or `migration`. See [Micro-Agents](microagents.md) for more information. diff --git a/docs/modules/usage/runtimes.md b/docs/modules/usage/runtimes.md index 2b57855ea062a..90752efc1f084 100644 --- a/docs/modules/usage/runtimes.md +++ b/docs/modules/usage/runtimes.md @@ -16,7 +16,7 @@ some flags being passed to `docker run` that make this possible: ``` docker run # ... - -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik \ + -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.19-nikolaik \ -v /var/run/docker.sock:/var/run/docker.sock \ # ... ``` diff --git a/docs/package-lock.json b/docs/package-lock.json index 60d351b0ddb88..41fa9a8f52281 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,10 +8,10 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.6.3", - "@docusaurus/plugin-content-pages": "^3.6.3", - "@docusaurus/preset-classic": "^3.6.3", - "@docusaurus/theme-mermaid": "^3.6.3", + "@docusaurus/core": "^3.7.0", + "@docusaurus/plugin-content-pages": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.4.1", @@ -22,7 +22,7 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.1", - "@docusaurus/tsconfig": "^3.6.3", + "@docusaurus/tsconfig": "^3.7.0", "@docusaurus/types": "^3.5.1", "typescript": "~5.7.2" }, @@ -71,164 +71,93 @@ "algoliasearch": ">= 4.9.1 < 6" } }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", - "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", - "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", - "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, "node_modules/@algolia/client-abtesting": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.15.0.tgz", - "integrity": "sha512-FaEM40iuiv1mAipYyiptP4EyxkJ8qHfowCpEeusdHUC4C7spATJYArD2rX3AxkVeREkDIgYEOuXcwKUbDCr7Nw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.19.0.tgz", + "integrity": "sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-account": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", - "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, "node_modules/@algolia/client-analytics": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", - "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", + "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.15.0.tgz", - "integrity": "sha512-bDDEQGfFidDi0UQUCbxXOCdphbVAgbVmxvaV75cypBTQkJ+ABx/Npw7LkFGw1FsoVrttlrrQbwjvUB6mLVKs/w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.19.0.tgz", + "integrity": "sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", - "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", + "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.15.0.tgz", - "integrity": "sha512-wu8GVluiZ5+il8WIRsGKu8VxMK9dAlr225h878GGtpTL6VBvwyJvAyLdZsfFIpY0iN++jiNb31q2C1PlPL+n/A==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.19.0.tgz", + "integrity": "sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.15.0.tgz", - "integrity": "sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", + "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -240,147 +169,80 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/ingestion": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.15.0.tgz", - "integrity": "sha512-MkqkAxBQxtQ5if/EX2IPqFA7LothghVyvPoRNA/meS2AW2qkHwcxjuiBxv4H6mnAVEPfJlhu9rkdVz9LgCBgJg==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.19.0.tgz", + "integrity": "sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/logger-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", - "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", - "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", - "dependencies": { - "@algolia/logger-common": "4.24.0" - } - }, "node_modules/@algolia/monitoring": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.15.0.tgz", - "integrity": "sha512-QPrFnnGLMMdRa8t/4bs7XilPYnoUXDY8PMQJ1sf9ZFwhUysYYhQNX34/enoO0LBjpoOY6rLpha39YQEFbzgKyQ==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.19.0.tgz", + "integrity": "sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", - "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", + "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "dependencies": { - "@algolia/requester-common": "4.24.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/requester-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", - "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==" - }, "node_modules/@algolia/requester-fetch": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.15.0.tgz", - "integrity": "sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.19.0.tgz", + "integrity": "sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/transporter": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", - "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", - "dependencies": { - "@algolia/cache-common": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/requester-common": "4.24.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -2043,9 +1905,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.0.tgz", - "integrity": "sha512-X69PmFOrjTZfN5ijxtI8hZ9kRADFSLrmmQ6hgDJ272Il049WGKpDY64KhrFm/7rbWve0z81QepawzjkKlqkNGw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", "funding": [ { "type": "github", @@ -2065,9 +1927,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.6.tgz", - "integrity": "sha512-S/IjXqTHdpI4EtzGoNCHfqraXF37x12ZZHA1Lk7zoT5pm2lMjFuqhX/89L7dqX4CcMacKK+6ZCs5TmEGb/+wKw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", "funding": [ { "type": "github", @@ -2080,7 +1942,7 @@ ], "dependencies": { "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.0" + "@csstools/css-calc": "^2.1.1" }, "engines": { "node": ">=18" @@ -2210,9 +2072,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.6.tgz", - "integrity": "sha512-EcvXfC60cTIumzpsxWuvVjb7rsJEHPvqn3jeMEBUaE3JSc4FRuP7mEQ+1eicxWmIrs3FtzMH9gR3sgA5TH+ebQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz", + "integrity": "sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==", "funding": [ { "type": "github", @@ -2224,7 +2086,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2238,9 +2100,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.6.tgz", - "integrity": "sha512-jVKdJn4+JkASYGhyPO+Wa5WXSx1+oUgaXb3JsjJn/BlrtFh5zjocCY7pwWi0nuP24V1fY7glQsxEYcYNy0dMFg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz", + "integrity": "sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==", "funding": [ { "type": "github", @@ -2252,7 +2114,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2293,9 +2155,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.5.tgz", - "integrity": "sha512-mi8R6dVfA2nDoKM3wcEi64I8vOYEgQVtVKCfmLHXupeLpACfGAided5ddMt5f+CnEodNu4DifuVwb0I6fQDGGQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz", + "integrity": "sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==", "funding": [ { "type": "github", @@ -2307,7 +2169,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -2344,9 +2206,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.6.tgz", - "integrity": "sha512-0ke7fmXfc8H+kysZz246yjirAH6JFhyX9GTlyRnM0exHO80XcA9zeJpy5pOp5zo/AZiC/q5Pf+Hw7Pd6/uAoYA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz", + "integrity": "sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==", "funding": [ { "type": "github", @@ -2358,7 +2220,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -2370,9 +2232,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.6.tgz", - "integrity": "sha512-Itrbx6SLUzsZ6Mz3VuOlxhbfuyLTogG5DwEF1V8dAi24iMuvQPIHd7Ti+pNDp7j6WixndJGZaoNR0f9VSzwuTg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz", + "integrity": "sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==", "funding": [ { "type": "github", @@ -2384,7 +2246,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2398,9 +2260,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.6.tgz", - "integrity": "sha512-927Pqy3a1uBP7U8sTfaNdZVB0mNXzIrJO/GZ8us9219q9n06gOqCdfZ0E6d1P66Fm0fYHvxfDbfcUuwAn5UwhQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz", + "integrity": "sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==", "funding": [ { "type": "github", @@ -2412,7 +2274,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2670,9 +2532,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.5.tgz", - "integrity": "sha512-sdh5i5GToZOIAiwhdntRWv77QDtsxP2r2gXW/WbLSCoLr00KTq/yiF1qlQ5XX2+lmiFa8rATKMcbwl3oXDMNew==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz", + "integrity": "sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==", "funding": [ { "type": "github", @@ -2684,7 +2546,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/media-query-list-parser": "^4.0.2" @@ -2772,9 +2634,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.6.tgz", - "integrity": "sha512-Hptoa0uX+XsNacFBCIQKTUBrFKDiplHan42X73EklG6XmQLG7/aIvxoNhvZ7PvOWMt67Pw3bIlUY2nD6p5vL8A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz", + "integrity": "sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==", "funding": [ { "type": "github", @@ -2786,7 +2648,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2824,9 +2686,9 @@ } }, "node_modules/@csstools/postcss-random-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.1.tgz", - "integrity": "sha512-Ab/tF8/RXktQlFwVhiC70UNfpFQRhtE5fQQoP2pO+KCPGLsLdWFiOuHgSRtBOqEshCVAzR4H6o38nhvRZq8deA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz", + "integrity": "sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==", "funding": [ { "type": "github", @@ -2838,7 +2700,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -2850,9 +2712,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.6.tgz", - "integrity": "sha512-yxP618Xb+ji1I624jILaYM62uEmZcmbdmFoZHoaThw896sq0vU39kqTTF+ZNic9XyPtPMvq0vyvbgmHaszq8xg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz", + "integrity": "sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==", "funding": [ { "type": "github", @@ -2864,7 +2726,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -2914,9 +2776,9 @@ } }, "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.0.tgz", - "integrity": "sha512-SLcc20Nujx/kqbSwDmj6oaXgpy3UjFhBy1sfcqPgDkHfOIfUtUVH7OXO+j7BU4v/At5s61N5ZX6shvgPwluhsA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz", + "integrity": "sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==", "funding": [ { "type": "github", @@ -2928,7 +2790,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -2940,9 +2802,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.5.tgz", - "integrity": "sha512-G6SJ6hZJkhxo6UZojVlLo14MohH4J5J7z8CRBrxxUYy9JuZiIqUo5TBYyDGcE0PLdzpg63a7mHSJz3VD+gMwqw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz", + "integrity": "sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==", "funding": [ { "type": "github", @@ -2954,7 +2816,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -2991,9 +2853,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.5.tgz", - "integrity": "sha512-/YQThYkt5MLvAmVu7zxjhceCYlKrYddK6LEmK5I4ojlS6BmO9u2yO4+xjXzu2+NPYmHSTtP4NFSamBCMmJ1NJA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz", + "integrity": "sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==", "funding": [ { "type": "github", @@ -3005,7 +2867,7 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.0", + "@csstools/css-calc": "^2.1.1", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" }, @@ -3067,19 +2929,19 @@ } }, "node_modules/@docsearch/css": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.0.tgz", - "integrity": "sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==" + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==" }, "node_modules/@docsearch/react": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.0.tgz", - "integrity": "sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", "dependencies": { "@algolia/autocomplete-core": "1.17.7", "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.0", - "algoliasearch": "^5.12.0" + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", @@ -3102,75 +2964,10 @@ } } }, - "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.15.0.tgz", - "integrity": "sha512-lho0gTFsQDIdCwyUKTtMuf9nCLwq9jOGlLGIeQGKDxXF7HbiAysFIu5QW/iQr1LzMgDyM9NH7K98KY+BiIFriQ==", - "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.15.0.tgz", - "integrity": "sha512-LfaZqLUWxdYFq44QrasCDED5bSYOswpQjSiIL7Q5fYlefAAUO95PzBPKCfUhSwhb4rKxigHfDkd81AvEicIEoA==", - "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/recommend": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.15.0.tgz", - "integrity": "sha512-5eupMwSqMLDObgSMF0XG958zR6GJP3f7jHDQ3/WlzCM9/YIJiWIUoJFGsko9GYsA5xbLDHE/PhWtq4chcCdaGQ==", - "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/algoliasearch": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.15.0.tgz", - "integrity": "sha512-Yf3Swz1s63hjvBVZ/9f2P1Uu48GjmjCN+Esxb6MAONMGtZB1fRX8/S1AhUTtsuTlcGovbYLxpHgc7wEzstDZBw==", - "dependencies": { - "@algolia/client-abtesting": "5.15.0", - "@algolia/client-analytics": "5.15.0", - "@algolia/client-common": "5.15.0", - "@algolia/client-insights": "5.15.0", - "@algolia/client-personalization": "5.15.0", - "@algolia/client-query-suggestions": "5.15.0", - "@algolia/client-search": "5.15.0", - "@algolia/ingestion": "1.15.0", - "@algolia/monitoring": "1.15.0", - "@algolia/recommend": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@docusaurus/babel": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.6.3.tgz", - "integrity": "sha512-7dW9Hat9EHYCVicFXYA4hjxBY38+hPuCURL8oRF9fySRm7vzNWuEOghA1TXcykuXZp0HLG2td4RhDxCvGG7tNw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", + "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", "dependencies": { "@babel/core": "^7.25.9", "@babel/generator": "^7.25.9", @@ -3182,8 +2979,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.6.3", - "@docusaurus/utils": "3.6.3", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3193,16 +2990,16 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.6.3.tgz", - "integrity": "sha512-47JLuc8D4wA+6VOvmMd5fUC9rFppBQpQOnxDYiVXffm/DeV/wmm3sbpNd5Y+O+G2+nevLTRnvCm/qyancv0Y3A==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", + "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.6.3", - "@docusaurus/cssnano-preset": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", + "@docusaurus/babel": "3.7.0", + "@docusaurus/cssnano-preset": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.2", "copy-webpack-plugin": "^11.0.0", @@ -3236,17 +3033,17 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.6.3.tgz", - "integrity": "sha512-xL7FRY9Jr5DWqB6pEnqgKqcMPJOX5V0pgWXi5lCiih11sUBmcFKM7c3+GyxcVeeWFxyYSDP3grLTWqJoP4P9Vw==", - "dependencies": { - "@docusaurus/babel": "3.6.3", - "@docusaurus/bundler": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", + "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", + "dependencies": { + "@docusaurus/babel": "3.7.0", + "@docusaurus/bundler": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3267,13 +3064,12 @@ "p-map": "^4.0.0", "prompts": "^2.4.2", "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", - "rtl-detect": "^1.0.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", "shelljs": "^0.8.5", @@ -3292,8 +3088,8 @@ }, "peerDependencies": { "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/core/node_modules/webpack-merge": { @@ -3310,9 +3106,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.3.tgz", - "integrity": "sha512-qP7SXrwZ+23GFJdPN4aIHQrZW+oH/7tzwEuc/RNL0+BdZdmIjYQqUxdXsjE4lFxLNZjj0eUrSNYIS6xwfij+5Q==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", + "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", "dependencies": { "cssnano-preset-advanced": "^6.1.2", "postcss": "^8.4.38", @@ -3324,9 +3120,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.6.3.tgz", - "integrity": "sha512-xSubJixcNyMV9wMV4q0s47CBz3Rlc5jbcCCuij8pfQP8qn/DIpt0ks8W6hQWzHAedg/J/EwxxUOUrnEoKzJo8g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", + "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -3336,13 +3132,13 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.6.3.tgz", - "integrity": "sha512-3iJdiDz9540ppBseeI93tWTDtUGVkxzh59nMq4ignylxMuXBLK8dFqVeaEor23v1vx6TrGKZ2FuLaTB+U7C0QQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", + "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", "dependencies": { - "@docusaurus/logger": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -3369,21 +3165,21 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.3.tgz", - "integrity": "sha512-MjaXX9PN/k5ugNvfRZdWyKWq4FsrhN4LEXaj0pEmMebJuBNlFeGyKQUa9DRhJHpadNaiMLrbo9m3U7Ig5YlsZg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", + "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", "dependencies": { - "@docusaurus/types": "3.6.3", + "@docusaurus/types": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@*", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3392,18 +3188,18 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.3.tgz", - "integrity": "sha512-k0ogWwwJU3pFRFfvW1kRVHxzf2DutLGaaLjAnHVEU6ju+aRP0Z5ap/13DHyPOfHeE4WKpn/M0TqjdwZAcY3kAw==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", + "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -3420,24 +3216,24 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.3.tgz", - "integrity": "sha512-r2wS8y/fsaDcxkm20W5bbYJFPzdWdEaTWVYjNxlHlcmX086eqQR1Fomlg9BHTJ0dLXPzAlbC8EN4XqMr3QzNCQ==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/module-type-aliases": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", + "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -3451,20 +3247,20 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.3.tgz", - "integrity": "sha512-eHrmTgjgLZsuqfsYr5X2xEwyIcck0wseSofWrjTwT9FLOWp+KDmMAuVK+wRo7sFImWXZk3oV/xX/g9aZrhD7OA==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", + "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3473,18 +3269,18 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.6.3.tgz", - "integrity": "sha512-zB9GXfIZNPRfzKnNjU6xGVrqn9bPXuGhpjgsuc/YtcTDjnjhasg38NdYd5LEqXex5G/zIorQgWB3n6x/Ut62vQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", + "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -3493,36 +3289,36 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.3.tgz", - "integrity": "sha512-rCDNy1QW8Dag7nZq67pcum0bpFLrwvxJhYuVprhFh8BMBDxV0bY+bAkGHbSf68P3Bk9C3hNOAXX1srGLIDvcTA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", + "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.3.tgz", - "integrity": "sha512-+OyDvhM6rqVkQOmLVkQWVJAizEEfkPzVWtIHXlWPOCFGK9X4/AWeBSrU0WG4iMg9Z4zD4YDRrU+lvI4s6DSC+w==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", + "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3530,39 +3326,39 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.3.tgz", - "integrity": "sha512-1M6UPB13gWUtN2UHX083/beTn85PlRI9ABItTl/JL1FJ5dJTWWFXXsHf9WW/6hrVwthwTeV/AGbGKvLKV+IlCA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", + "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.3.tgz", - "integrity": "sha512-94qOO4M9Fwv9KfVQJsgbe91k+fPJ4byf1L3Ez8TUa6TAFPo/BrLwQ80zclHkENlL1824TuxkcMKv33u6eydQCg==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", + "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3571,55 +3367,78 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", + "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.6.3.tgz", - "integrity": "sha512-VHSYWROT3flvNNI1SrnMOtW1EsjeHNK9dhU6s9eY5hryZe79lUqnZJyze/ymDe2LXAqzyj6y5oYvyBoZZk6ErA==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/plugin-content-blog": "3.6.3", - "@docusaurus/plugin-content-docs": "3.6.3", - "@docusaurus/plugin-content-pages": "3.6.3", - "@docusaurus/plugin-debug": "3.6.3", - "@docusaurus/plugin-google-analytics": "3.6.3", - "@docusaurus/plugin-google-gtag": "3.6.3", - "@docusaurus/plugin-google-tag-manager": "3.6.3", - "@docusaurus/plugin-sitemap": "3.6.3", - "@docusaurus/theme-classic": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/theme-search-algolia": "3.6.3", - "@docusaurus/types": "3.6.3" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", + "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/plugin-debug": "3.7.0", + "@docusaurus/plugin-google-analytics": "3.7.0", + "@docusaurus/plugin-google-gtag": "3.7.0", + "@docusaurus/plugin-google-tag-manager": "3.7.0", + "@docusaurus/plugin-sitemap": "3.7.0", + "@docusaurus/plugin-svgr": "3.7.0", + "@docusaurus/theme-classic": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-search-algolia": "3.7.0", + "@docusaurus/types": "3.7.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.6.3.tgz", - "integrity": "sha512-1RRLK1tSArI2c00qugWYO3jRocjOZwGF1mBzPPylDVRwWCS/rnWWR91ChdbbaxIupRJ+hX8ZBYrwr5bbU0oztQ==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/module-type-aliases": "3.6.3", - "@docusaurus/plugin-content-blog": "3.6.3", - "@docusaurus/plugin-content-docs": "3.6.3", - "@docusaurus/plugin-content-pages": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/theme-translations": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", + "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -3638,19 +3457,19 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-common": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.6.3.tgz", - "integrity": "sha512-b8ZkhczXHDxWWyvz+YJy4t/PlPbEogTTbgnHoflYnH7rmRtyoodTsu8WVM12la5LmlMJBclBXFl29OH8kPE7gg==", - "dependencies": { - "@docusaurus/mdx-loader": "3.6.3", - "@docusaurus/module-type-aliases": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", + "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", + "dependencies": { + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3665,20 +3484,20 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.6.3.tgz", - "integrity": "sha512-kIqpjNCP/9R2GGf8UmiDxD3CkOAEJuJIEFlaKMgQtjVxa/vH+9PLI1+DFbArGoG4+0ENTYUq8phHPW7SeL36uQ==", - "dependencies": { - "@docusaurus/core": "3.6.3", - "@docusaurus/module-type-aliases": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.7.0.tgz", + "integrity": "sha512-7kNDvL7hm+tshjxSxIqYMtsLUPsEBYnkevej/ext6ru9xyLgCed+zkvTfGzTWNeq8rJIEe2YSS8/OV5gCVaPCw==", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "mermaid": ">=10.4", "tslib": "^2.6.0" }, @@ -3686,25 +3505,25 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.3.tgz", - "integrity": "sha512-rt+MGCCpYgPyWCGXtbxlwFbTSobu15jWBTPI2LHsHNa5B0zSmOISX6FWYAPt5X1rNDOqMGM0FATnh7TBHRohVA==", - "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.6.3", - "@docusaurus/logger": "3.6.3", - "@docusaurus/plugin-content-docs": "3.6.3", - "@docusaurus/theme-common": "3.6.3", - "@docusaurus/theme-translations": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-validation": "3.6.3", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", + "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", + "dependencies": { + "@docsearch/react": "^3.8.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "algoliasearch": "^5.17.1", + "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", @@ -3716,14 +3535,14 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.6.3.tgz", - "integrity": "sha512-Gb0regclToVlngSIIwUCtBMQBq48qVUaN1XQNKW4XwlsgUyk0vP01LULdqbem7czSwIeBAFXFoORJ0RPX7ht/w==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", + "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3733,40 +3552,39 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.6.3.tgz", - "integrity": "sha512-1pT/rTrRpMV15E4tJH95W5PrjboMn5JkKF+Ys8cTjMegetiXjs0gPFOSDA5hdTlberKQLDO50xPjMJHondLuzA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", + "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", "dev": true }, "node_modules/@docusaurus/types": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.6.3.tgz", - "integrity": "sha512-xD9oTGDrouWzefkhe9ogB2fDV96/82cRpNGx2HIvI5L87JHNhQVIWimQ/3JIiiX/TEd5S9s+VO6FFguwKNRVow==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", + "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "utility-types": "^3.10.0", "webpack": "^5.95.0", "webpack-merge": "^5.9.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/utils": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.6.3.tgz", - "integrity": "sha512-0R/FR3bKVl4yl8QwbL4TYFfR+OXBRpVUaTJdENapBGR3YMwfM6/JnhGilWQO8AOwPJGtGoDK7ib8+8UF9f3OZQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", + "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", "dependencies": { - "@docusaurus/logger": "3.6.3", - "@docusaurus/types": "3.6.3", - "@docusaurus/utils-common": "3.6.3", - "@svgr/webpack": "^8.1.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", @@ -3790,11 +3608,11 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.6.3.tgz", - "integrity": "sha512-v4nKDaANLgT3pMBewHYEMAl/ufY0LkXao1QkFWzI5huWFOmNQ2UFzv2BiKeHX5Ownis0/w6cAyoxPhVdDonlSQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", + "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", "dependencies": { - "@docusaurus/types": "3.6.3", + "@docusaurus/types": "3.7.0", "tslib": "^2.6.0" }, "engines": { @@ -3802,13 +3620,13 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.6.3.tgz", - "integrity": "sha512-bhEGGiN5BE38h21vjqD70Gxg++j+PfYVddDUE5UFvLDup68QOcpD33CLr+2knPorlxRbEaNfz6HQDUMQ3HuqKw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", + "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", "dependencies": { - "@docusaurus/logger": "3.6.3", - "@docusaurus/utils": "3.6.3", - "@docusaurus/utils-common": "3.6.3", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4987,31 +4805,32 @@ } }, "node_modules/algoliasearch": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", - "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-account": "4.24.0", - "@algolia/client-analytics": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-personalization": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/recommend": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", + "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", + "dependencies": { + "@algolia/client-abtesting": "5.19.0", + "@algolia/client-analytics": "5.19.0", + "@algolia/client-common": "5.19.0", + "@algolia/client-insights": "5.19.0", + "@algolia/client-personalization": "5.19.0", + "@algolia/client-query-suggestions": "5.19.0", + "@algolia/client-search": "5.19.0", + "@algolia/ingestion": "1.19.0", + "@algolia/monitoring": "1.19.0", + "@algolia/recommend": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", + "version": "3.22.6", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.6.tgz", + "integrity": "sha512-F2gSb43QHyvZmvH/2hxIjbk/uFdO2MguQYTFP7J+RowMW1csjIODMobEnpLI8nbLQuzZnGZdIxl5Bpy1k9+CFQ==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -5019,41 +4838,6 @@ "algoliasearch": ">= 3.1 < 6" } }, - "node_modules/algoliasearch/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -5511,15 +5295,41 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -5986,9 +5796,9 @@ } }, "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz", + "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==", "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -6132,9 +5942,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", - "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz", + "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6265,9 +6075,9 @@ } }, "node_modules/css-has-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.1.tgz", - "integrity": "sha512-EOcoyJt+OsuKfCADgLT7gADZI5jMzIe/AeI6MeAYKiFBDmNmM7kk46DtSfMj5AohUJisqVzopBpnQTlvbyaBWg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", + "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", "funding": [ { "type": "github", @@ -6476,9 +6286,9 @@ } }, "node_modules/cssdb": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.1.tgz", - "integrity": "sha512-KwEPys7lNsC8OjASI8RrmwOYYDcm0JOW9zQhcV83ejYcQkirTEyeAGui8aO2F5PiS6SLpxuTzl6qlMElIdsgIg==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", + "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", "funding": [ { "type": "opencollective", @@ -7457,6 +7267,19 @@ "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -7557,12 +7380,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -7580,6 +7400,17 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -8403,15 +8234,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8425,6 +8261,18 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -8561,11 +8409,11 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8683,21 +8531,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -9883,9 +9720,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "engines": { "node": ">=14" }, @@ -10025,6 +9862,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdast-util-directive": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", @@ -12950,13 +12795,15 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -13479,9 +13326,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.6.tgz", - "integrity": "sha512-wLXvm8RmLs14Z2nVpB4CWlnvaWPRcOZFltJSlcbYwSJ1EDZKsKDhPKIMecCnuU054KSmlmubkqczmm6qBPCBhA==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz", + "integrity": "sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==", "funding": [ { "type": "github", @@ -13493,7 +13340,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -13929,9 +13776,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.6.tgz", - "integrity": "sha512-HPwvsoK7C949vBZ+eMyvH2cQeMr3UREoHvbtra76/UhDuiViZH6pir+z71UaJQohd7VDSVUdR6TkWYKExEc9aQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz", + "integrity": "sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==", "funding": [ { "type": "github", @@ -13943,7 +13790,7 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.6", + "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/postcss-progressive-custom-properties": "^4.0.0", @@ -14120,9 +13967,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", - "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", @@ -14484,9 +14331,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.1.tgz", - "integrity": "sha512-wqqsnBFD6VIwcHHRbhjTOcOi4qRVlB26RwSr0ordPj7OubRRxdWebv/aLjKLRR8zkZrbxZyuus03nOIgC5elMQ==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", + "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", "funding": [ { "type": "github", @@ -14499,14 +14346,14 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.6", - "@csstools/postcss-color-mix-function": "^3.0.6", + "@csstools/postcss-color-function": "^4.0.7", + "@csstools/postcss-color-mix-function": "^3.0.7", "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.5", + "@csstools/postcss-exponential-functions": "^2.0.6", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.6", - "@csstools/postcss-gradients-interpolation-method": "^5.0.6", - "@csstools/postcss-hwb-function": "^4.0.6", + "@csstools/postcss-gamut-mapping": "^2.0.7", + "@csstools/postcss-gradients-interpolation-method": "^5.0.7", + "@csstools/postcss-hwb-function": "^4.0.7", "@csstools/postcss-ic-unit": "^4.0.0", "@csstools/postcss-initial": "^2.0.0", "@csstools/postcss-is-pseudo-class": "^5.0.1", @@ -14516,29 +14363,29 @@ "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.5", + "@csstools/postcss-media-minmax": "^2.0.6", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.6", + "@csstools/postcss-oklab-function": "^4.0.7", "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.6", + "@csstools/postcss-random-function": "^1.0.2", + "@csstools/postcss-relative-color-syntax": "^3.0.7", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.0", - "@csstools/postcss-stepped-value-functions": "^4.0.5", + "@csstools/postcss-sign-functions": "^1.1.1", + "@csstools/postcss-stepped-value-functions": "^4.0.6", "@csstools/postcss-text-decoration-shorthand": "^4.0.1", - "@csstools/postcss-trigonometric-functions": "^4.0.5", + "@csstools/postcss-trigonometric-functions": "^4.0.6", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.19", "browserslist": "^4.23.1", "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.1", + "cssdb": "^8.2.3", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.6", + "postcss-color-functional-notation": "^7.0.7", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.5", @@ -14551,7 +14398,7 @@ "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.6", + "postcss-lab-function": "^7.0.7", "postcss-logical": "^8.0.0", "postcss-nesting": "^13.0.1", "postcss-opacity-percentage": "^3.0.0", @@ -15786,11 +15633,6 @@ "@babel/runtime": "^7.1.2" } }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==" - }, "node_modules/rtlcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", diff --git a/docs/package.json b/docs/package.json index aeed2f5674ebb..689bcfce1885a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,10 +15,10 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.6.3", - "@docusaurus/plugin-content-pages": "^3.6.3", - "@docusaurus/preset-classic": "^3.6.3", - "@docusaurus/theme-mermaid": "^3.6.3", + "@docusaurus/core": "^3.7.0", + "@docusaurus/plugin-content-pages": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.4.1", @@ -29,7 +29,7 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.1", - "@docusaurus/tsconfig": "^3.6.3", + "@docusaurus/tsconfig": "^3.7.0", "@docusaurus/types": "^3.5.1", "typescript": "~5.7.2" }, diff --git a/docs/sidebars.ts b/docs/sidebars.ts index f67d54cdb5856..12911c317227a 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -23,15 +23,21 @@ const sidebars: SidebarsConfig = { id: 'usage/prompting/prompting-best-practices', }, { - type: 'doc', - label: 'Customization', - id: 'usage/prompting/customization', - }, - { - type: 'doc', - label: 'Microagents', - id: 'usage/prompting/microagents', - }, + type: 'category', + label: 'Micro-Agents', + items: [ + { + type: 'doc', + label: 'Public', + id: 'usage/prompting/microagents-public', + }, + { + type: 'doc', + label: 'Repository', + id: 'usage/prompting/microagents-repo', + }, + ], + } ], }, { diff --git a/evaluation/benchmarks/swe_bench/run_infer.py b/evaluation/benchmarks/swe_bench/run_infer.py index 4f0dff6508f49..bf065ada97347 100644 --- a/evaluation/benchmarks/swe_bench/run_infer.py +++ b/evaluation/benchmarks/swe_bench/run_infer.py @@ -15,6 +15,7 @@ EvalOutput, assert_and_raise, codeact_user_response, + get_metrics, is_fatal_evaluation_error, make_metadata, prepare_dataset, @@ -148,6 +149,7 @@ def get_config( codeact_enable_jupyter=False, codeact_enable_browsing=RUN_WITH_BROWSING, codeact_enable_llm_editor=False, + condenser=metadata.condenser_config, ) config.set_agent_config(agent_config) return config @@ -448,7 +450,7 @@ def process_instance( # NOTE: this is NO LONGER the event stream, but an agent history that includes delegate agent's events histories = [event_to_dict(event) for event in state.history] - metrics = state.metrics.get() if state.metrics else None + metrics = get_metrics(state) # Save the output output = EvalOutput( diff --git a/evaluation/utils/shared.py b/evaluation/utils/shared.py index 514e90519724d..23c5b319d3c26 100644 --- a/evaluation/utils/shared.py +++ b/evaluation/utils/shared.py @@ -17,6 +17,10 @@ from openhands.controller.state.state import State from openhands.core.config import LLMConfig +from openhands.core.config.condenser_config import ( + CondenserConfig, + NoOpCondenserConfig, +) from openhands.core.exceptions import ( AgentRuntimeBuildError, AgentRuntimeDisconnectedError, @@ -33,6 +37,7 @@ from openhands.events.event import Event from openhands.events.serialization.event import event_to_dict from openhands.events.utils import get_pairs_from_events +from openhands.memory.condenser import get_condensation_metadata class EvalMetadata(BaseModel): @@ -45,11 +50,17 @@ class EvalMetadata(BaseModel): dataset: str | None = None data_split: str | None = None details: dict[str, Any] | None = None + condenser_config: CondenserConfig | None = None def model_dump(self, *args, **kwargs): dumped_dict = super().model_dump(*args, **kwargs) # avoid leaking sensitive information dumped_dict['llm_config'] = self.llm_config.to_safe_dict() + if hasattr(self.condenser_config, 'llm_config'): + dumped_dict['condenser_config']['llm_config'] = ( + self.condenser_config.llm_config.to_safe_dict() + ) + return dumped_dict def model_dump_json(self, *args, **kwargs): @@ -57,6 +68,11 @@ def model_dump_json(self, *args, **kwargs): dumped_dict = json.loads(dumped) # avoid leaking sensitive information dumped_dict['llm_config'] = self.llm_config.to_safe_dict() + if hasattr(self.condenser_config, 'llm_config'): + dumped_dict['condenser_config']['llm_config'] = ( + self.condenser_config.llm_config.to_safe_dict() + ) + logger.debug(f'Dumped metadata: {dumped_dict}') return json.dumps(dumped_dict) @@ -192,6 +208,7 @@ def make_metadata( eval_output_dir: str, data_split: str | None = None, details: dict[str, Any] | None = None, + condenser_config: CondenserConfig | None = None, ) -> EvalMetadata: model_name = llm_config.model.split('/')[-1] model_path = model_name.replace(':', '_').replace('@', '-') @@ -222,6 +239,9 @@ def make_metadata( dataset=dataset_name, data_split=data_split, details=details, + condenser_config=condenser_config + if condenser_config + else NoOpCondenserConfig(), ) metadata_json = metadata.model_dump_json() logger.info(f'Metadata: {metadata_json}') @@ -551,3 +571,10 @@ def is_fatal_evaluation_error(error: str | None) -> bool: return True return False + + +def get_metrics(state: State) -> dict[str, Any]: + """Extract metrics from the state.""" + metrics = state.metrics.get() if state.metrics else {} + metrics['condenser'] = get_condensation_metadata(state) + return metrics diff --git a/frontend/__tests__/components/features/conversation-panel/conversation-card.test.tsx b/frontend/__tests__/components/features/conversation-panel/conversation-card.test.tsx index e07eb25a3d00b..9a1e105f53575 100644 --- a/frontend/__tests__/components/features/conversation-panel/conversation-card.test.tsx +++ b/frontend/__tests__/components/features/conversation-panel/conversation-card.test.tsx @@ -3,11 +3,13 @@ import { afterEach, describe, expect, it, test, vi } from "vitest"; import userEvent from "@testing-library/user-event"; import { formatTimeDelta } from "#/utils/format-time-delta"; import { ConversationCard } from "#/components/features/conversation-panel/conversation-card"; +import { clickOnEditButton } from "./utils"; describe("ConversationCard", () => { const onClick = vi.fn(); const onDelete = vi.fn(); const onChangeTitle = vi.fn(); + const onDownloadWorkspace = vi.fn(); afterEach(() => { vi.clearAllMocks(); @@ -17,8 +19,8 @@ describe("ConversationCard", () => { render( { const { rerender } = render( { rerender( { screen.getByTestId("conversation-card-selected-repository"); }); - it("should call onClick when the card is clicked", async () => { - const user = userEvent.setup(); - render( - , - ); - - const card = screen.getByTestId("conversation-card"); - await user.click(card); - - expect(onClick).toHaveBeenCalled(); - }); - it("should toggle a context menu when clicking the ellipsis button", async () => { const user = userEvent.setup(); render( { const user = userEvent.setup(); render( { const user = userEvent.setup(); render( { />, ); - const selectedRepository = screen.getByTestId("conversation-card-selected-repository"); + const selectedRepository = screen.getByTestId( + "conversation-card-selected-repository", + ); await user.click(selectedRepository); expect(onClick).not.toHaveBeenCalled(); @@ -154,8 +139,8 @@ describe("ConversationCard", () => { const user = userEvent.setup(); render( { ); const title = screen.getByTestId("conversation-card-title"); + expect(title).toBeDisabled(); + + await clickOnEditButton(user); + + expect(title).toBeEnabled(); + expect(screen.queryByTestId("context-menu")).not.toBeInTheDocument(); + // expect to be focused + expect(document.activeElement).toBe(title); await user.clear(title); await user.type(title, "New Conversation Name "); @@ -171,14 +164,15 @@ describe("ConversationCard", () => { expect(onChangeTitle).toHaveBeenCalledWith("New Conversation Name"); expect(title).toHaveValue("New Conversation Name"); + expect(title).toBeDisabled(); }); it("should reset title and not call onChangeTitle when the title is empty", async () => { const user = userEvent.setup(); render( { />, ); + await clickOnEditButton(user); + const title = screen.getByTestId("conversation-card-title"); await user.clear(title); @@ -199,8 +195,8 @@ describe("ConversationCard", () => { const user = userEvent.setup(); render( { const user = userEvent.setup(); render( { expect(onClick).not.toHaveBeenCalled(); }); + it("should call onDownloadWorkspace when the download button is clicked", async () => { + const user = userEvent.setup(); + render( + , + ); + + const ellipsisButton = screen.getByTestId("ellipsis-button"); + await user.click(ellipsisButton); + + const menu = screen.getByTestId("context-menu"); + const downloadButton = within(menu).getByTestId("download-button"); + + await user.click(downloadButton); + + expect(onDownloadWorkspace).toHaveBeenCalled(); + }); + + it("should not display the edit or delete options if the handler is not provided", async () => { + const user = userEvent.setup(); + const { rerender } = render( + , + ); + + const ellipsisButton = screen.getByTestId("ellipsis-button"); + await user.click(ellipsisButton); + + expect(screen.queryByTestId("edit-button")).toBeInTheDocument(); + expect(screen.queryByTestId("delete-button")).not.toBeInTheDocument(); + + // toggle to hide the context menu + await user.click(ellipsisButton); + + rerender( + , + ); + + await user.click(ellipsisButton); + + expect(screen.queryByTestId("edit-button")).not.toBeInTheDocument(); + expect(screen.queryByTestId("delete-button")).toBeInTheDocument(); + }); + + it("should not render the ellipsis button if there are no actions", () => { + const { rerender } = render( + , + ); + + expect(screen.getByTestId("ellipsis-button")).toBeInTheDocument(); + + rerender( + , + ); + + expect(screen.getByTestId("ellipsis-button")).toBeInTheDocument(); + + rerender( + , + ); + + expect(screen.queryByTestId("ellipsis-button")).toBeInTheDocument(); + + rerender( + , + ); + + expect(screen.queryByTestId("ellipsis-button")).not.toBeInTheDocument(); + }); + describe("state indicator", () => { it("should render the 'STOPPED' indicator by default", () => { render( { it("should render the other indicators when provided", () => { render( { const onCloseMock = vi.fn(); + const RouterStub = createRoutesStub([ + { + Component: () => , + path: "/", + }, + ]); const renderConversationPanel = (config?: QueryClientConfig) => - render(, { + render(, { wrapper: ({ children }) => ( @@ -52,6 +60,8 @@ describe("ConversationPanel", () => { renderConversationPanel(); const cards = await screen.findAllByTestId("conversation-card"); + // NOTE that we filter out conversations that don't have a created_at property + // (mock data has 4 conversations, but only 3 have a created_at property) expect(cards).toHaveLength(3); }); @@ -169,6 +179,8 @@ describe("ConversationPanel", () => { const cards = await screen.findAllByTestId("conversation-card"); const title = within(cards[0]).getByTestId("conversation-card-title"); + await clickOnEditButton(user); + await user.clear(title); await user.type(title, "Conversation 1 Renamed"); await user.tab(); @@ -196,6 +208,8 @@ describe("ConversationPanel", () => { // Ensure the conversation is not renamed expect(updateUserConversationSpy).not.toHaveBeenCalled(); + await clickOnEditButton(user); + await user.type(title, "Conversation 1"); await user.click(title); await user.tab(); @@ -217,51 +231,4 @@ describe("ConversationPanel", () => { expect(onCloseMock).toHaveBeenCalledOnce(); }); - - describe("New Conversation Button", () => { - it("should display a confirmation modal when clicking", async () => { - const user = userEvent.setup(); - renderConversationPanel(); - - expect( - screen.queryByTestId("confirm-new-conversation-modal"), - ).not.toBeInTheDocument(); - - const newProjectButton = screen.getByTestId("new-conversation-button"); - await user.click(newProjectButton); - - const modal = screen.getByTestId("confirm-new-conversation-modal"); - expect(modal).toBeInTheDocument(); - }); - - it("should call endSession and close panel after confirming", async () => { - const user = userEvent.setup(); - renderConversationPanel(); - - const newProjectButton = screen.getByTestId("new-conversation-button"); - await user.click(newProjectButton); - - const confirmButton = screen.getByText("Confirm"); - await user.click(confirmButton); - - expect(endSessionMock).toHaveBeenCalledOnce(); - expect(onCloseMock).toHaveBeenCalledOnce(); - }); - - it("should close the modal when cancelling", async () => { - const user = userEvent.setup(); - renderConversationPanel(); - - const newProjectButton = screen.getByTestId("new-conversation-button"); - await user.click(newProjectButton); - - const cancelButton = screen.getByText("Cancel"); - await user.click(cancelButton); - - expect(endSessionMock).not.toHaveBeenCalled(); - expect( - screen.queryByTestId("confirm-new-conversation-modal"), - ).not.toBeInTheDocument(); - }); - }); }); diff --git a/frontend/__tests__/components/features/conversation-panel/utils.ts b/frontend/__tests__/components/features/conversation-panel/utils.ts new file mode 100644 index 0000000000000..5963dc0a08a72 --- /dev/null +++ b/frontend/__tests__/components/features/conversation-panel/utils.ts @@ -0,0 +1,12 @@ +import { screen, within } from "@testing-library/react"; +import { UserEvent } from "@testing-library/user-event"; + +export const clickOnEditButton = async (user: UserEvent) => { + const ellipsisButton = screen.getByTestId("ellipsis-button"); + await user.click(ellipsisButton); + + const menu = screen.getByTestId("context-menu"); + const editButton = within(menu).getByTestId("edit-button"); + + await user.click(editButton); +}; diff --git a/frontend/__tests__/components/features/sidebar/sidebar.test.tsx b/frontend/__tests__/components/features/sidebar/sidebar.test.tsx index 1e80607301b04..9d96e7a49bdc1 100644 --- a/frontend/__tests__/components/features/sidebar/sidebar.test.tsx +++ b/frontend/__tests__/components/features/sidebar/sidebar.test.tsx @@ -1,10 +1,12 @@ -import { screen } from "@testing-library/react"; +import { screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import { describe, expect, it } from "vitest"; +import { afterEach, describe, expect, it, vi } from "vitest"; import { renderWithProviders } from "test-utils"; import { createRoutesStub } from "react-router"; import { Sidebar } from "#/components/features/sidebar/sidebar"; import { MULTI_CONVERSATION_UI } from "#/utils/feature-flags"; +import OpenHands from "#/api/open-hands"; +import { MOCK_USER_PREFERENCES } from "#/mocks/handlers"; const renderSidebar = () => { const RouterStub = createRoutesStub([ @@ -43,4 +45,101 @@ describe("Sidebar", () => { ).not.toBeInTheDocument(); }, ); + + describe("Settings", () => { + const getSettingsSpy = vi.spyOn(OpenHands, "getSettings"); + const saveSettingsSpy = vi.spyOn(OpenHands, "saveSettings"); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it("should fetch settings data on mount", () => { + renderSidebar(); + expect(getSettingsSpy).toHaveBeenCalledOnce(); + }); + + it("should send all settings data when saving AI configuration", async () => { + const user = userEvent.setup(); + renderSidebar(); + + const settingsButton = screen.getByTestId("settings-button"); + await user.click(settingsButton); + + const settingsModal = screen.getByTestId("ai-config-modal"); + const saveButton = within(settingsModal).getByTestId( + "save-settings-button", + ); + await user.click(saveButton); + + expect(saveSettingsSpy).toHaveBeenCalledWith({ + ...MOCK_USER_PREFERENCES.settings, + // the actual values are falsey (null or "") but we're checking for undefined + llm_api_key: undefined, + llm_base_url: undefined, + security_analyzer: undefined, + }); + }); + + it("should send all settings data when saving account settings", async () => { + const user = userEvent.setup(); + renderSidebar(); + + const userAvatar = screen.getByTestId("user-avatar"); + await user.click(userAvatar); + + const menu = screen.getByTestId("account-settings-context-menu"); + const accountSettingsButton = within(menu).getByTestId( + "account-settings-button", + ); + await user.click(accountSettingsButton); + + const accountSettingsModal = screen.getByTestId("account-settings-form"); + const saveButton = + within(accountSettingsModal).getByTestId("save-settings"); + await user.click(saveButton); + + expect(saveSettingsSpy).toHaveBeenCalledWith({ + ...MOCK_USER_PREFERENCES.settings, + llm_api_key: undefined, // null or undefined + }); + }); + + it("should not reset AI configuration when saving account settings", async () => { + const user = userEvent.setup(); + renderSidebar(); + + const userAvatar = screen.getByTestId("user-avatar"); + await user.click(userAvatar); + + const menu = screen.getByTestId("account-settings-context-menu"); + const accountSettingsButton = within(menu).getByTestId( + "account-settings-button", + ); + await user.click(accountSettingsButton); + + const accountSettingsModal = screen.getByTestId("account-settings-form"); + + const languageInput = + within(accountSettingsModal).getByLabelText(/language/i); + await user.click(languageInput); + + const norskOption = screen.getByText(/norsk/i); + await user.click(norskOption); + + const tokenInput = + within(accountSettingsModal).getByLabelText(/github token/i); + await user.type(tokenInput, "new-token"); + + const saveButton = + within(accountSettingsModal).getByTestId("save-settings"); + await user.click(saveButton); + + expect(saveSettingsSpy).toHaveBeenCalledWith({ + ...MOCK_USER_PREFERENCES.settings, + language: "no", + llm_api_key: undefined, // null or undefined + }); + }); + }); }); diff --git a/frontend/__tests__/components/shared/modals/settings/settings-form.test.tsx b/frontend/__tests__/components/shared/modals/settings/settings-form.test.tsx index e373fdfb3e4ff..06d1628e1f749 100644 --- a/frontend/__tests__/components/shared/modals/settings/settings-form.test.tsx +++ b/frontend/__tests__/components/shared/modals/settings/settings-form.test.tsx @@ -1,13 +1,22 @@ import { screen, fireEvent } from "@testing-library/react"; -import { describe, it, expect, vi } from "vitest"; +import { describe, it, expect, vi, afterEach } from "vitest"; import { renderWithProviders } from "test-utils"; import { createRoutesStub } from "react-router"; +import userEvent from "@testing-library/user-event"; import { DEFAULT_SETTINGS } from "#/services/settings"; import { SettingsForm } from "#/components/shared/modals/settings/settings-form"; import OpenHands from "#/api/open-hands"; describe("SettingsForm", () => { const getConfigSpy = vi.spyOn(OpenHands, "getConfig"); + const saveSettingsSpy = vi.spyOn(OpenHands, "saveSettings"); + + const onCloseMock = vi.fn(); + + afterEach(() => { + vi.clearAllMocks(); + }); + getConfigSpy.mockResolvedValue({ APP_MODE: "saas", GITHUB_CLIENT_ID: "123", @@ -19,10 +28,10 @@ describe("SettingsForm", () => { Component: () => ( {}} + models={["anthropic/claude-3-5-sonnet-20241022", "model2"]} + agents={["CodeActAgent", "agent2"]} + securityAnalyzers={["analyzer1", "analyzer2"]} + onClose={onCloseMock} /> ), path: "/", @@ -35,11 +44,33 @@ describe("SettingsForm", () => { }); it("should show runtime size selector when advanced options are enabled", async () => { + const user = userEvent.setup(); renderWithProviders(); - const advancedSwitch = screen.getByRole("switch", { - name: "SETTINGS_FORM$ADVANCED_OPTIONS_LABEL", - }); - fireEvent.click(advancedSwitch); - await screen.findByText("SETTINGS_FORM$RUNTIME_SIZE_LABEL"); + + const toggleAdvancedMode = screen.getByTestId("advanced-option-switch"); + await user.click(toggleAdvancedMode); + + await screen.findByTestId("runtime-size"); + }); + + it("should not submit the form if required fields are empty", async () => { + const user = userEvent.setup(); + renderWithProviders(); + + expect(screen.queryByTestId("custom-model-input")).not.toBeInTheDocument(); + + const toggleAdvancedMode = screen.getByTestId("advanced-option-switch"); + await user.click(toggleAdvancedMode); + + const customModelInput = screen.getByTestId("custom-model-input"); + expect(customModelInput).toBeInTheDocument(); + + await user.clear(customModelInput); + + const saveButton = screen.getByTestId("save-settings-button"); + await user.click(saveButton); + + expect(saveSettingsSpy).not.toHaveBeenCalled(); + expect(onCloseMock).not.toHaveBeenCalled(); }); }); diff --git a/frontend/__tests__/context/ws-client-provider.test.tsx b/frontend/__tests__/context/ws-client-provider.test.tsx new file mode 100644 index 0000000000000..6c3bf564b3013 --- /dev/null +++ b/frontend/__tests__/context/ws-client-provider.test.tsx @@ -0,0 +1,43 @@ +import { describe, it, expect, vi } from "vitest"; +import { render, screen } from "@testing-library/react"; +import * as ChatSlice from "#/state/chat-slice"; +import { + updateStatusWhenErrorMessagePresent, +} from "#/context/ws-client-provider"; + +describe("Propagate error message", () => { + it("should do nothing when no message was passed from server", () => { + const addErrorMessageSpy = vi.spyOn(ChatSlice, "addErrorMessage"); + updateStatusWhenErrorMessagePresent(null) + updateStatusWhenErrorMessagePresent(undefined) + updateStatusWhenErrorMessagePresent({}) + updateStatusWhenErrorMessagePresent({message: null}) + + expect(addErrorMessageSpy).not.toHaveBeenCalled(); + }); + + it("should display error to user when present", () => { + const message = "We have a problem!" + const addErrorMessageSpy = vi.spyOn(ChatSlice, "addErrorMessage") + updateStatusWhenErrorMessagePresent({message}) + + expect(addErrorMessageSpy).toHaveBeenCalledWith({ + message, + status_update: true, + type: 'error' + }); + }); + + it("should display error including translation id when present", () => { + const message = "We have a problem!" + const addErrorMessageSpy = vi.spyOn(ChatSlice, "addErrorMessage") + updateStatusWhenErrorMessagePresent({message, data: {msg_id: '..id..'}}) + + expect(addErrorMessageSpy).toHaveBeenCalledWith({ + message, + id: '..id..', + status_update: true, + type: 'error' + }); + }); +}); diff --git a/frontend/__tests__/routes/_oh.app.test.tsx b/frontend/__tests__/routes/_oh.app.test.tsx index e034c74765454..4fc96b25d3e5c 100644 --- a/frontend/__tests__/routes/_oh.app.test.tsx +++ b/frontend/__tests__/routes/_oh.app.test.tsx @@ -60,6 +60,7 @@ describe("App", () => { getConversationSpy.mockResolvedValue({ conversation_id: "9999", last_updated_at: "", + created_at: "", title: "", selected_repository: "", status: "STOPPED", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 56c17008e97f6..a02fcb8bce267 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,40 +1,40 @@ { "name": "openhands-frontend", - "version": "0.18.0", + "version": "0.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openhands-frontend", - "version": "0.18.0", + "version": "0.19.0", "dependencies": { "@monaco-editor/react": "^4.7.0-rc.0", - "@nextui-org/react": "^2.6.10", + "@nextui-org/react": "^2.6.11", "@react-router/node": "^7.1.1", "@react-router/serve": "^7.1.1", "@react-types/shared": "^3.25.0", "@reduxjs/toolkit": "^2.5.0", - "@tanstack/react-query": "^5.62.12", + "@tanstack/react-query": "^5.63.0", "@vitejs/plugin-react": "^4.3.2", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.4.0", "axios": "^1.7.9", "clsx": "^2.1.1", "eslint-config-airbnb-typescript": "^18.0.0", - "i18next": "^24.2.0", + "i18next": "^24.2.1", "i18next-browser-languagedetector": "^8.0.2", "i18next-http-backend": "^3.0.1", - "isbot": "^5.1.19", + "isbot": "^5.1.21", "jose": "^5.9.4", "monaco-editor": "^0.52.2", - "posthog-js": "^1.203.3", + "posthog-js": "^1.205.0", "react": "^19.0.0", "react-dom": "^19.0.0", "react-highlight": "^0.15.0", "react-hot-toast": "^2.5.1", "react-i18next": "^15.4.0", "react-icons": "^5.4.0", - "react-markdown": "^9.0.1", + "react-markdown": "^9.0.3", "react-redux": "^9.2.0", "react-router": "^7.1.1", "react-syntax-highlighter": "^15.6.1", @@ -51,13 +51,19 @@ "@mswjs/socket.io-binding": "^0.1.1", "@playwright/test": "^1.49.1", "@react-router/dev": "^7.1.1", +<<<<<<< HEAD "@tailwindcss/typography": "^0.5.15", "@tanstack/eslint-plugin-query": "^5.62.15", "@testing-library/jest-dom": "^6.6.3", +======= + "@tailwindcss/typography": "^0.5.16", + "@tanstack/eslint-plugin-query": "^5.62.16", + "@testing-library/jest-dom": "^6.6.1", +>>>>>>> main "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/node": "^22.10.5", - "@types/react": "^19.0.2", + "@types/react": "^19.0.4", "@types/react-dom": "^19.0.2", "@types/react-highlight": "^0.12.8", "@types/react-syntax-highlighter": "^15.5.13", @@ -76,14 +82,19 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^4.6.2", +<<<<<<< HEAD "husky": "^9.1.7", "jsdom": "^25.0.1", +======= + "husky": "^9.1.6", + "jsdom": "^26.0.0", +>>>>>>> main "lint-staged": "^15.3.0", "msw": "^2.6.6", "postcss": "^8.4.47", "prettier": "^3.4.2", "tailwindcss": "^3.4.17", - "typescript": "^5.7.2", + "typescript": "^5.7.3", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^1.6.0" @@ -124,6 +135,28 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", + "integrity": "sha512-RtWv9jFN2/bLExuZgFFZ0I3pWWeezAHGgrmjqGGWclATl1aDe3yhCUaI0Ilkp6OCk9zX7+FjvDasEX8Q9Rxc5w==", + "dev": true, + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^11.0.2" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -691,6 +724,116 @@ "node": ">= 4.0.0" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -1176,52 +1319,47 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.1.tgz", - "integrity": "sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw==", - "license": "MIT", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.2.tgz", + "integrity": "sha512-6sE5nyvDloULiyOMbOTJEEgWL32w+VHkZQs8S02Lnn8Y/O5aQhjOEXwWzvR7SsBE/exxlSpY2EsWZgqHbtLatg==", "dependencies": { - "@formatjs/fast-memoize": "2.2.5", - "@formatjs/intl-localematcher": "0.5.9", + "@formatjs/fast-memoize": "2.2.6", + "@formatjs/intl-localematcher": "0.5.10", "decimal.js": "10", "tslib": "2" } }, "node_modules/@formatjs/fast-memoize": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.5.tgz", - "integrity": "sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.6.tgz", + "integrity": "sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==", "dependencies": { "tslib": "2" } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.7.tgz", - "integrity": "sha512-cuEHyRM5VqLQobANOjtjlgU7+qmk9Q3fDQuBiRRJ3+Wp3ZoZhpUPtUfuimZXsir6SaI2TaAJ+SLo9vLnV5QcbA==", - "license": "MIT", + "version": "2.9.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.8.tgz", + "integrity": "sha512-hZlLNI3+Lev8IAXuwehLoN7QTKqbx3XXwFW1jh0AdIA9XJdzn9Uzr+2LLBspPm/PX0+NLIfykj/8IKxQqHUcUQ==", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.1", - "@formatjs/icu-skeleton-parser": "1.8.11", + "@formatjs/ecma402-abstract": "2.3.2", + "@formatjs/icu-skeleton-parser": "1.8.12", "tslib": "2" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.11.tgz", - "integrity": "sha512-8LlHHE/yL/zVJZHAX3pbKaCjZKmBIO6aJY1mkVh4RMSEu/2WRZ4Ysvv3kKXJ9M8RJLBHdnk1/dUQFdod1Dt7Dw==", - "license": "MIT", + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.12.tgz", + "integrity": "sha512-QRAY2jC1BomFQHYDMcZtClqHR55EEnB96V7Xbk/UiBodsuFc5kujybzt87+qj1KqmJozFhk6n4KiT1HKwAkcfg==", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.1", + "@formatjs/ecma402-abstract": "2.3.2", "tslib": "2" } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.9.tgz", - "integrity": "sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA==", - "license": "MIT", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.10.tgz", + "integrity": "sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==", "dependencies": { "tslib": "2" } @@ -1429,7 +1567,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.6.0.tgz", "integrity": "sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -1438,7 +1575,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.6.tgz", "integrity": "sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0", "intl-messageformat": "^10.1.0" @@ -1448,7 +1584,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz", "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -1457,7 +1592,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.5.tgz", "integrity": "sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -1643,16 +1777,15 @@ } }, "node_modules/@nextui-org/accordion": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.2.6.tgz", - "integrity": "sha512-injM1MJDdAxQ2TWHRXWM8aM2fELwsdQuvWSz4QINMMauS6qgWxWVF1OqxTd0FxSAAOyMuJIdm45p2K6eV9Ocsw==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.2.7.tgz", + "integrity": "sha512-jdobOwUxSi617m+LpxHFzg64UhDuOfDJI2CMk3MP+b2WBJ7SNW4hmN2NW5Scx5JiY+kyBGmlxJ4Y++jZpZgQjQ==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", + "@nextui-org/aria-utils": "2.2.7", "@nextui-org/divider": "2.2.5", "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-aria-accordion": "2.2.2", @@ -1673,13 +1806,12 @@ } }, "node_modules/@nextui-org/alert": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@nextui-org/alert/-/alert-2.2.8.tgz", - "integrity": "sha512-2UzofZNowJCnRge98Qjj3+G586d2xXMEqyfJasNc2xXrejMmqNwnFC5vn1qNi+vzqnqOr75kTfQHtyRRLWEwhQ==", - "license": "MIT", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/alert/-/alert-2.2.9.tgz", + "integrity": "sha512-SjMZewEqknx/jqmMcyQdbeo6RFg40+A3b1lGjnj/fdkiJozQoTesiOslzDsacqiSgvso2F+8u1emC2tFBAU3hw==", "dependencies": { - "@nextui-org/button": "2.2.8", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/button": "2.2.9", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@react-aria/utils": "3.26.0", @@ -1693,14 +1825,13 @@ } }, "node_modules/@nextui-org/aria-utils": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/aria-utils/-/aria-utils-2.2.6.tgz", - "integrity": "sha512-HrMLt8k1cYhHUDFg9D+DC71Dd9tZwhJkfseRjnOrccMF8f4eNV+olEfTp0+15lmdDXi6Xa1gXN5H4ZozKrNcug==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/aria-utils/-/aria-utils-2.2.7.tgz", + "integrity": "sha512-QgMZ8fii6BCI/+ZIkgXgkm/gMNQ92pQJn83q90fBT6DF+6j4hsCpJwLNCF5mIJkX/cQ/4bHDsDaj7w1OzkhQNg==", "dependencies": { "@nextui-org/react-rsc-utils": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/system": "2.4.5", + "@nextui-org/system": "2.4.6", "@react-aria/utils": "3.26.0", "@react-stately/collections": "3.12.0", "@react-stately/overlays": "3.6.12", @@ -1713,22 +1844,21 @@ } }, "node_modules/@nextui-org/autocomplete": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@nextui-org/autocomplete/-/autocomplete-2.3.8.tgz", - "integrity": "sha512-N7fRp5aAKi9hHX+ApqKfsZ3obOsizrRB2DZcbOrw2LgDjucsb3btyl8Zqi4oY4ZGSEn1DdCkbGylKPrgHTZ23Q==", - "license": "MIT", - "dependencies": { - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/button": "2.2.8", - "@nextui-org/form": "2.1.7", - "@nextui-org/input": "2.4.7", - "@nextui-org/listbox": "2.3.8", - "@nextui-org/popover": "2.3.8", - "@nextui-org/react-utils": "2.1.2", - "@nextui-org/scroll-shadow": "2.3.4", + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@nextui-org/autocomplete/-/autocomplete-2.3.9.tgz", + "integrity": "sha512-1AizOvL8lERoWjm8WiA0NPJWB3h0gqYlbV/qGZeacac5356hb8cNzWUlxGzr9bNkhn9slIoEUyGMgtYeKq7ptg==", + "dependencies": { + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/button": "2.2.9", + "@nextui-org/form": "2.1.8", + "@nextui-org/input": "2.4.8", + "@nextui-org/listbox": "2.3.9", + "@nextui-org/popover": "2.3.9", + "@nextui-org/react-utils": "2.1.3", + "@nextui-org/scroll-shadow": "2.3.5", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/spinner": "2.2.5", + "@nextui-org/spinner": "2.2.6", "@nextui-org/use-aria-button": "2.2.4", "@nextui-org/use-safe-layout-effect": "2.1.1", "@react-aria/combobox": "3.11.0", @@ -1750,14 +1880,13 @@ } }, "node_modules/@nextui-org/avatar": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/avatar/-/avatar-2.2.5.tgz", - "integrity": "sha512-ugpwuH1M+eyWY+6Fb4OgGev1HweRrE61bA3rHxRzR3CcjWoe9g7JoQ04NbNNLUDp+aZuil/RWmgSfGUXEexZVQ==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/avatar/-/avatar-2.2.6.tgz", + "integrity": "sha512-QRNCAMXnSZrFJYKo78lzRPiAPRq5pn1LIHUVvX/mCRiTvbu1FXrMakAvOWz/n1X1mLndnrfQMRNgmtC8YlHIdg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/use-image": "2.1.1", + "@nextui-org/use-image": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/interactions": "3.22.5", "@react-aria/utils": "3.26.0" @@ -1770,12 +1899,11 @@ } }, "node_modules/@nextui-org/badge": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@nextui-org/badge/-/badge-2.2.4.tgz", - "integrity": "sha512-5Ac/ZpVFO8BFKzCbytu8NOCFQ4in9/BlP0qMUaPzqTJWJUNZljWyowSUI2BnFhnCG0hI4t1KTOxBpp0XDD/FGQ==", - "license": "MIT", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@nextui-org/badge/-/badge-2.2.5.tgz", + "integrity": "sha512-8pLbuY+RVCzI/00CzNudc86BiuXByPFz2yHh00djKvZAXbT0lfjvswClJxSC2FjUXlod+NtE+eHmlhSMo3gmpw==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2" }, "peerDependencies": { @@ -1786,12 +1914,11 @@ } }, "node_modules/@nextui-org/breadcrumbs": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/breadcrumbs/-/breadcrumbs-2.2.5.tgz", - "integrity": "sha512-hNhObcXlBu3itLdkZ70f/ZiKZt8VI+neolZFf9Ay7zs0p0fQKmNsDcd1Bj38DT652k+OYi/vALpR8f3Fa9WQsA==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/breadcrumbs/-/breadcrumbs-2.2.6.tgz", + "integrity": "sha512-TlAUSiIClmm02tJqOvtwySpKDOENduXCXkKzCbmSaqEFhziHnhyE0eM8IVEprBoK6z1VP+sUrX6C2gZ871KUSw==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@react-aria/breadcrumbs": "3.5.19", @@ -1808,15 +1935,14 @@ } }, "node_modules/@nextui-org/button": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@nextui-org/button/-/button-2.2.8.tgz", - "integrity": "sha512-Km9ER+jpA3DdYmbh8k30w2DMXZIPtZjs7QVVaPAEW+rJYnGWNsomcltlOLIvHpBYeAbB8hfJCbRJ35r9WeL9Gw==", - "license": "MIT", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/button/-/button-2.2.9.tgz", + "integrity": "sha512-RrfjAZHoc6nmaqoLj40M0Qj3tuDdv2BMGCgggyWklOi6lKwtOaADPvxEorDwY3GnN54Xej+9SWtUwE8Oc3SnOg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", - "@nextui-org/ripple": "2.2.6", + "@nextui-org/react-utils": "2.1.3", + "@nextui-org/ripple": "2.2.7", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/spinner": "2.2.5", + "@nextui-org/spinner": "2.2.6", "@nextui-org/use-aria-button": "2.2.4", "@react-aria/button": "3.11.0", "@react-aria/focus": "3.19.0", @@ -1834,16 +1960,15 @@ } }, "node_modules/@nextui-org/calendar": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@nextui-org/calendar/-/calendar-2.2.8.tgz", - "integrity": "sha512-Bt1Nl2mwBhFD4cBBBLtZkSmry9VZGnBl/7CV84tojrJsLUV5268wp/S6w4sQb5q4uGEO7qF+eZx6w5E6OHrcVQ==", - "license": "MIT", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/calendar/-/calendar-2.2.9.tgz", + "integrity": "sha512-tx1401HLnwadoDHNkmEIZNeAw9uYW6KsgIRRQnXTNVstBXdMmPWjoMBj8fkQqF55+U58k6a+w3N4tTpgRGOpaQ==", "dependencies": { "@internationalized/date": "3.6.0", - "@nextui-org/button": "2.2.8", + "@nextui-org/button": "2.2.9", "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-aria-button": "2.2.4", @@ -1870,13 +1995,12 @@ } }, "node_modules/@nextui-org/card": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@nextui-org/card/-/card-2.2.8.tgz", - "integrity": "sha512-EOEVw7mao1dnwGaeoSwBwF1bEL3JirMR0C/EVot427eV8GmWOliBM+kEdD6NLloFMbK4NKHO+Mg8kYTTtGBowA==", - "license": "MIT", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/card/-/card-2.2.9.tgz", + "integrity": "sha512-Ltvb5Uy4wwkBJj3QvVQmoB6PwLYUNSoWAFo2xxu7LUHKWcETYI0YbUIuwL2nFU2xfJYeBTGjXGQO1ffBsowrtQ==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", - "@nextui-org/ripple": "2.2.6", + "@nextui-org/react-utils": "2.1.3", + "@nextui-org/ripple": "2.2.7", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-aria-button": "2.2.4", "@react-aria/button": "3.11.0", @@ -1894,13 +2018,12 @@ } }, "node_modules/@nextui-org/checkbox": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@nextui-org/checkbox/-/checkbox-2.3.7.tgz", - "integrity": "sha512-JTYvBQfAO7AKEEIdfWJ/SU0SiHDnay15lMZytxzLcbFr5kkFUCaFbNWrFmz3OQQTsHFqML1Hbd9cqUeMvdP/Fg==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@nextui-org/checkbox/-/checkbox-2.3.8.tgz", + "integrity": "sha512-T5+AhzQfbg53qZnPn5rgMcJ7T5rnvSGYTx17wHWtdF9Q4QflZOmLGoxqoTWbTVpM4XzUUPyi7KVSKZScWdBDAA==", "dependencies": { - "@nextui-org/form": "2.1.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/form": "2.1.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-callback-ref": "2.1.1", "@nextui-org/use-safe-layout-effect": "2.1.1", @@ -1922,12 +2045,11 @@ } }, "node_modules/@nextui-org/chip": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/chip/-/chip-2.2.5.tgz", - "integrity": "sha512-AfXF40oLmi15X6z1kSwLSnxKixG2KR5TUXpu4xuLED2ub1me9mjiiPYCn2bo5nlu2lgGd93XSdCyyx6kQKQECA==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/chip/-/chip-2.2.6.tgz", + "integrity": "sha512-HrSYagbrD4u4nblsNMIu7WGnDj9A8YnYCt30tasJmNSyydUVHFkxKOc3S8k+VU3BHPxeENxeBT7w0OlYoKbFIQ==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", @@ -1943,12 +2065,11 @@ } }, "node_modules/@nextui-org/code": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/code/-/code-2.2.5.tgz", - "integrity": "sha512-o/LdXzayZeLKKQUZDF2a0RWgA3D7PdR/zVGzA/eQ74a4bJZ7FqYgsarIBQ6O8s+LtOsI3Z9CSLoTIspI/F+3Pw==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/code/-/code-2.2.6.tgz", + "integrity": "sha512-8qvAywIKAVh1thy/YHNwqH2xjTcwPiOWwNdKqvJMSk0CNtLHYJmDK8i2vmKZTM3zfB08Q/G94H0Wf+YsyrZdDg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/system-rsc": "2.3.5" }, @@ -1959,14 +2080,13 @@ } }, "node_modules/@nextui-org/date-input": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@nextui-org/date-input/-/date-input-2.3.7.tgz", - "integrity": "sha512-TnZOjGSC/YtNm3k7uHXEOXttHqXdkE1AkUW36yIxwB9nV2jxPnWClImvc0wtZx+3tZ1XY+aWHo4ZJowJpeTbNA==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@nextui-org/date-input/-/date-input-2.3.8.tgz", + "integrity": "sha512-phj0Y8F/GpsKjKSiratFwh7HDzmMsIf6G2L2ljgWqA79PvP+RYf/ogEfaMIq1knF8OlssMo5nsFFJNsNB+xKGg==", "dependencies": { "@internationalized/date": "3.6.0", - "@nextui-org/form": "2.1.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/form": "2.1.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@react-aria/datepicker": "3.12.0", "@react-aria/i18n": "3.12.4", @@ -1983,19 +2103,18 @@ } }, "node_modules/@nextui-org/date-picker": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@nextui-org/date-picker/-/date-picker-2.3.8.tgz", - "integrity": "sha512-0i6Ode6rEHAVQHv3OxkB4yGnAKnS/UjJ+mKyFTLzA29LSkvmhNmquNIj9lOoenDvSvKKVB18QxuQEm1EKwgPkQ==", - "license": "MIT", + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@nextui-org/date-picker/-/date-picker-2.3.9.tgz", + "integrity": "sha512-RzdVTl/tulTyE5fwGkQfn0is5hsTkPPRJFJZXMqYeci85uhpD+bCreWnTXrGFIXcqUo0ZBJWx3EdtBJZnGp4xQ==", "dependencies": { "@internationalized/date": "3.6.0", - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/button": "2.2.8", - "@nextui-org/calendar": "2.2.8", - "@nextui-org/date-input": "2.3.7", - "@nextui-org/form": "2.1.7", - "@nextui-org/popover": "2.3.8", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/button": "2.2.9", + "@nextui-org/calendar": "2.2.9", + "@nextui-org/date-input": "2.3.8", + "@nextui-org/form": "2.1.8", + "@nextui-org/popover": "2.3.9", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@react-aria/datepicker": "3.12.0", @@ -2019,7 +2138,6 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/@nextui-org/divider/-/divider-2.2.5.tgz", "integrity": "sha512-OB8b3CU4nQ5ARIGL48izhzrAHR0mnwws+Kd5LqRCZ/1R9uRMqsq7L0gpG9FkuV2jf2FuA7xa/GLOLKbIl4CEww==", - "license": "MIT", "dependencies": { "@nextui-org/react-rsc-utils": "2.1.1", "@nextui-org/shared-utils": "2.1.2", @@ -2036,20 +2154,18 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/dom-animation/-/dom-animation-2.1.1.tgz", "integrity": "sha512-xLrVNf1EV9zyyZjk6j3RptOvnga1WUCbMpDgJLQHp+oYwxTfBy0SkXHuN5pRdcR0XpR/IqRBDIobMdZI0iyQyg==", - "license": "MIT", "peerDependencies": { "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1" } }, "node_modules/@nextui-org/drawer": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/drawer/-/drawer-2.2.6.tgz", - "integrity": "sha512-WP0RMD/2aCr1jdpG2ygyx2fIY8TV93X5sqOnZE495iPv1ODrnj+lrj4fqewPTrouvothCmaYpY3q3q/P9vA4eg==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/drawer/-/drawer-2.2.7.tgz", + "integrity": "sha512-a1Sr3sSjOZD0SiXDYSySKkOelTyCYExPvUsIckzjF5A3TNlBw4KFKnJzaXvabC3SNRy6/Ocq7oqz6VRv37wxQg==", "dependencies": { - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/modal": "2.2.6", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/modal": "2.2.7", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2" }, "peerDependencies": { @@ -2060,19 +2176,17 @@ } }, "node_modules/@nextui-org/dropdown": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@nextui-org/dropdown/-/dropdown-2.3.8.tgz", - "integrity": "sha512-aRvxZJhrfL0GEOZpX1uFvQVuVODLU0Lc3m3xPxqc337zLF09kXLiSao09oo5AbUoOAlfUP/d1qWH6wIOoJrvIA==", - "license": "MIT", - "dependencies": { - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/menu": "2.2.8", - "@nextui-org/popover": "2.3.8", - "@nextui-org/react-utils": "2.1.2", + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@nextui-org/dropdown/-/dropdown-2.3.9.tgz", + "integrity": "sha512-ElZxiP+nG0CKC+tm6LMZX42cRWXQ0LLjWBZXymupPsEH3XcQpCF9GWb9efJ2hh+qGROg7i0bnFH7P0GTyCyNBA==", + "dependencies": { + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/menu": "2.2.9", + "@nextui-org/popover": "2.3.9", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/menu": "3.16.0", - "@react-aria/overlays": "3.24.0", "@react-aria/utils": "3.26.0", "@react-stately/menu": "3.9.0", "@react-types/menu": "3.9.13" @@ -2086,15 +2200,14 @@ } }, "node_modules/@nextui-org/form": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@nextui-org/form/-/form-2.1.7.tgz", - "integrity": "sha512-RnvvT0O/vJTKem4d1Wl7n2d/Jk3Bs6U22ko0FBSeA+y4KeZO2W7k0ls1TcLzgv8JTN0l2ELVUIBrrgkJlrrWBQ==", - "license": "MIT", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nextui-org/form/-/form-2.1.8.tgz", + "integrity": "sha512-Xn/dUO5zDG7zukbql1MDYh4Xwe1vnIVMRTHgckbkBtXXVNqgoTU09TTfy8WOJ0pMDX4GrZSBAZ86o37O+IHbaA==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/system": "2.4.5", - "@nextui-org/theme": "2.4.4", + "@nextui-org/system": "2.4.6", + "@nextui-org/theme": "2.4.5", "@react-aria/utils": "3.26.0", "@react-stately/form": "3.1.0", "@react-types/form": "3.7.8", @@ -2108,13 +2221,12 @@ } }, "node_modules/@nextui-org/framer-utils": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nextui-org/framer-utils/-/framer-utils-2.1.5.tgz", - "integrity": "sha512-z/dM29nwngCFhNCuxtCEqMbmMXG4xtXEMZh4N8FxOBEimye+2/6DIt7v0KwCY/Tx2t2URpgjCT22I8Now/SaAA==", - "license": "MIT", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@nextui-org/framer-utils/-/framer-utils-2.1.6.tgz", + "integrity": "sha512-b+BxKFox8j9rNAaL+CRe2ZMb1/SKjz9Kl2eLjDSsq3q82K/Hg7lEjlpgE8cu41wIGjH1unQxtP+btiJgl067Ow==", "dependencies": { "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/system": "2.4.5", + "@nextui-org/system": "2.4.6", "@nextui-org/use-measure": "2.1.1" }, "peerDependencies": { @@ -2124,14 +2236,13 @@ } }, "node_modules/@nextui-org/image": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@nextui-org/image/-/image-2.2.4.tgz", - "integrity": "sha512-pTno8kxFtGWgBiuW1QV3z2n+9T/uXUy0x8yPL0hXyIUkvVLINlJ1xVOnpM9XRHt/ickRdeINP7itN2updyBeVQ==", - "license": "MIT", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@nextui-org/image/-/image-2.2.5.tgz", + "integrity": "sha512-A6DnEqG+/cMrfvqFKKJIdGD7gD88tVkqGxRkfysVMJJR96sDIYCJlP1jsAEtYKh4PfhmtJWclUvY/x9fMw0H1w==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/use-image": "2.1.1" + "@nextui-org/use-image": "2.1.2" }, "peerDependencies": { "@nextui-org/system": ">=2.4.0", @@ -2141,13 +2252,12 @@ } }, "node_modules/@nextui-org/input": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/@nextui-org/input/-/input-2.4.7.tgz", - "integrity": "sha512-c5ECj9XQnfwk1ctmIGIWY/JPYbIYMPLzLSL1zohF5aqln8Af/MgERk5/T2VQISQssc0JMJv/Q7dd/MgVnv3phw==", - "license": "MIT", + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@nextui-org/input/-/input-2.4.8.tgz", + "integrity": "sha512-wfkjyl7vRqT3HDXeybhfZ+IAz+Z02U5EiuWPpc9NbdwhJ/LpDRDa6fYcTDr/6j6MiyrEZsM24CtZZKAKBVBquQ==", "dependencies": { - "@nextui-org/form": "2.1.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/form": "2.1.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-safe-layout-effect": "2.1.1", @@ -2168,13 +2278,12 @@ } }, "node_modules/@nextui-org/input-otp": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@nextui-org/input-otp/-/input-otp-2.1.7.tgz", - "integrity": "sha512-JQ4Scnll9NkPEORH1S+JypB/5YGFElESjHyClF6l4Uw6joUZrXihK+4Wqcb2Xec+hi1cRW6X86eItbPTNM+9Kg==", - "license": "MIT", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nextui-org/input-otp/-/input-otp-2.1.8.tgz", + "integrity": "sha512-J5Pz0aSfWD+2cSgLTKQamCNF/qHILIj8L0lY3t1R/sgK1ApN3kDNcUGnVm6EDh+dOXITKpCfnsCQw834nxZhsg==", "dependencies": { - "@nextui-org/form": "2.1.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/form": "2.1.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/form": "3.0.11", @@ -2192,12 +2301,11 @@ } }, "node_modules/@nextui-org/kbd": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/kbd/-/kbd-2.2.5.tgz", - "integrity": "sha512-52n6XjLWnsxkQiwbQG04jEYu2xK07FEpIRycWxA0cWSFWOAiyYxaa1xYeb5va8tG8M0UCEwlvrPyxK+Wh5GmMQ==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/kbd/-/kbd-2.2.6.tgz", + "integrity": "sha512-IwzvvwYLMbhyqX5PjEZyDBO4iNEHY6Nek4ZrVR+Z2dOSj/oZXHWiabNDrvOcGKgUBE6xc95Fi1jVubE9b5ueuA==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/system-rsc": "2.3.5", "@react-aria/utils": "3.26.0" @@ -2209,15 +2317,14 @@ } }, "node_modules/@nextui-org/link": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/link/-/link-2.2.6.tgz", - "integrity": "sha512-A3+aHbuipch7Xf470qxCIbMXMW6oGX8QoT9Le2CS7YWjpNZOsGzQPQvC3Diom05vujgdlw5egses6rZak10kuQ==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/link/-/link-2.2.7.tgz", + "integrity": "sha512-SAeBBCUtdaKtHfZgRD6OH0De/+cKUEuThiErSuFW+sNm/y8m3cUhQH8UqVBPu6HwmqVTEjvZzp/4uhG6lcSZjA==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/use-aria-link": "2.2.4", + "@nextui-org/use-aria-link": "2.2.5", "@react-aria/focus": "3.19.0", "@react-aria/link": "3.7.7", "@react-aria/utils": "3.26.0", @@ -2231,14 +2338,13 @@ } }, "node_modules/@nextui-org/listbox": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@nextui-org/listbox/-/listbox-2.3.8.tgz", - "integrity": "sha512-M2j3f2zVoKlIvIv6ZMUq2BfB9WI0fxQoRV7vGSIYTDUlNMPwxmeD0xWmmtlJB5nxtmMR7G5NlzJRSTHXhFaUMA==", - "license": "MIT", + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@nextui-org/listbox/-/listbox-2.3.9.tgz", + "integrity": "sha512-iGJ8xwkXf8K7chk1iZgC05KGpHiWJXY1dnV7ytIJ7yu4BbsRIHb0QknK5j8A74YeGpouJQ9+jsmCERmySxlqlg==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", + "@nextui-org/aria-utils": "2.2.7", "@nextui-org/divider": "2.2.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-is-mobile": "2.2.2", "@react-aria/focus": "3.19.0", @@ -2248,7 +2354,7 @@ "@react-stately/list": "3.11.1", "@react-types/menu": "3.9.13", "@react-types/shared": "3.26.0", - "@tanstack/react-virtual": "3.10.9" + "@tanstack/react-virtual": "3.11.2" }, "peerDependencies": { "@nextui-org/system": ">=2.4.0", @@ -2257,32 +2363,14 @@ "react-dom": ">=18 || >=19.0.0-rc.0" } }, - "node_modules/@nextui-org/listbox/node_modules/@tanstack/react-virtual": { - "version": "3.10.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz", - "integrity": "sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.10.9" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@nextui-org/menu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@nextui-org/menu/-/menu-2.2.8.tgz", - "integrity": "sha512-JGyrAc9FEsd2rNlDwnckBkSdXe2V7cJN2Y62RRaQeJFMOZsw8tnmW9SLaL4ZB+LTmiGLORsU+b0frizu960HnA==", - "license": "MIT", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/menu/-/menu-2.2.9.tgz", + "integrity": "sha512-Fztvi3GRYl5a5FO/0LRzcAdnw8Yeq6NX8yLQh8XmwkWCrH0S6nTn69CP/j+EMWQR6G2UK5AbNDmX1Sx9aTQdHQ==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", + "@nextui-org/aria-utils": "2.2.7", "@nextui-org/divider": "2.2.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-is-mobile": "2.2.2", "@react-aria/focus": "3.19.0", @@ -2302,14 +2390,13 @@ } }, "node_modules/@nextui-org/modal": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/modal/-/modal-2.2.6.tgz", - "integrity": "sha512-K3jql20SKq/sJWGsjlHq92/55tGo55Ko4PT92SRvqC0vySYe9ZX1KSVpOR3/k4cQRkd+3hdbGjZBs3bVcDpB6g==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/modal/-/modal-2.2.7.tgz", + "integrity": "sha512-xxk6B+5s8//qYI4waLjdWoJFwR6Zqym/VHFKkuZAMpNABgTB0FCK022iUdOIP2F2epG69un8zJF0qwMBJF8XAA==", "dependencies": { "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-aria-button": "2.2.4", @@ -2333,14 +2420,13 @@ } }, "node_modules/@nextui-org/navbar": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@nextui-org/navbar/-/navbar-2.2.7.tgz", - "integrity": "sha512-K9puXcNDywCxYe3Ji88Ple2Oh+8RdYn4cZzBwo6oDpIsMOYva9rNURyasNa2WKrlCfdvaAKIFSuJQp4Ed64KOg==", - "license": "MIT", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@nextui-org/navbar/-/navbar-2.2.8.tgz", + "integrity": "sha512-XutioQ75jonZk6TBtjFdV6N3eLe8y85tetjOdOg6X3mKTPZlQuBb+rtb6pVNOOvcuQ7zKigWIq2ammvF9VNKaQ==", "dependencies": { "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-scroll-position": "2.1.1", "@react-aria/button": "3.11.0", @@ -2360,12 +2446,11 @@ } }, "node_modules/@nextui-org/pagination": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@nextui-org/pagination/-/pagination-2.2.7.tgz", - "integrity": "sha512-MpKkoC+HPs3kTS8JgCyP6ZpBFtlCmn9YpI11OOhYM9faQbmv8k0D+f11CCm+GRO+yEE08MCpcZHqY3OLdASW9Q==", - "license": "MIT", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@nextui-org/pagination/-/pagination-2.2.8.tgz", + "integrity": "sha512-sZcriQq/ssOItX3r54tysnItjcb7dw392BNulJxrMMXi6FA6sUGImpJF1jsbtYJvaq346IoZvMrcrba8PXEk0g==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-intersection-observer": "2.2.2", @@ -2384,16 +2469,15 @@ } }, "node_modules/@nextui-org/popover": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@nextui-org/popover/-/popover-2.3.8.tgz", - "integrity": "sha512-hRUSD7NVlkRQjfShe6glnQAsNI9nOugLKqSzUoDt275P4fDHutEedRZUCasjOeMO+xhehIX8cyZ2mGyZAan5zQ==", - "license": "MIT", + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@nextui-org/popover/-/popover-2.3.9.tgz", + "integrity": "sha512-glLYKlFJ4EkFrNMBC3ediFPpQwKzaFlzKoaMum2G3HUtmC4d1HLTSOQJOd2scUzZxD3/K9dp1XHYbEcCnCrYpQ==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/button": "2.2.8", + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/button": "2.2.9", "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-aria-button": "2.2.4", "@nextui-org/use-safe-layout-effect": "2.1.1", @@ -2415,12 +2499,11 @@ } }, "node_modules/@nextui-org/progress": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/progress/-/progress-2.2.5.tgz", - "integrity": "sha512-+d317vZhBLc/1PHE2PseIlIX+N5sEO4x1dZvzISvkFQPE1igSeZ8NpbkZWZagxakqp23JoQ6HDWp/Sk7Uwr8tg==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/progress/-/progress-2.2.6.tgz", + "integrity": "sha512-FTicOncNcXKpt9avxQWWlVATvhABKVMBgsB81SozFXRcn8QsFntjdMp0l3688DJKBY0GxT+yl/S/by0TwY1Z1A==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-is-mounted": "2.1.1", "@react-aria/i18n": "3.12.4", @@ -2436,13 +2519,12 @@ } }, "node_modules/@nextui-org/radio": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@nextui-org/radio/-/radio-2.3.7.tgz", - "integrity": "sha512-uzPiNlkESccp18+mUnjFbi1OwzYTKMSJ8teoNWGIMQL/Q2dXhxMikL9jlTHOP25ygOPN+lxXa/nX8JiLC6G5zQ==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@nextui-org/radio/-/radio-2.3.8.tgz", + "integrity": "sha512-ntwjpQ/WT8zQ3Fw5io65VeH2Q68LOgZ4lII7a6x35NDa7Eda1vlYroMAw/vxK8iyZYlUBSJdsoj2FU/10hBPmg==", "dependencies": { - "@nextui-org/form": "2.1.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/form": "2.1.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/interactions": "3.22.5", @@ -2461,58 +2543,57 @@ } }, "node_modules/@nextui-org/react": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/@nextui-org/react/-/react-2.6.10.tgz", - "integrity": "sha512-50tWuyBfObL1HSUW9k9dKffoU83U/tPJR9hJBYdv2fCAzDz4cAw6Hp3ZHHDKOphTIIY+jVMIKkja2PrgLEdkrg==", - "license": "MIT", - "dependencies": { - "@nextui-org/accordion": "2.2.6", - "@nextui-org/alert": "2.2.8", - "@nextui-org/autocomplete": "2.3.8", - "@nextui-org/avatar": "2.2.5", - "@nextui-org/badge": "2.2.4", - "@nextui-org/breadcrumbs": "2.2.5", - "@nextui-org/button": "2.2.8", - "@nextui-org/calendar": "2.2.8", - "@nextui-org/card": "2.2.8", - "@nextui-org/checkbox": "2.3.7", - "@nextui-org/chip": "2.2.5", - "@nextui-org/code": "2.2.5", - "@nextui-org/date-input": "2.3.7", - "@nextui-org/date-picker": "2.3.8", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@nextui-org/react/-/react-2.6.11.tgz", + "integrity": "sha512-MOkBMWI+1nHB6A8YLXakdXrNRFvy5whjFJB1FthwqbP8pVEeksS1e29AbfEFkrzLc5zjN7i24wGNSJ8DKMt9WQ==", + "dependencies": { + "@nextui-org/accordion": "2.2.7", + "@nextui-org/alert": "2.2.9", + "@nextui-org/autocomplete": "2.3.9", + "@nextui-org/avatar": "2.2.6", + "@nextui-org/badge": "2.2.5", + "@nextui-org/breadcrumbs": "2.2.6", + "@nextui-org/button": "2.2.9", + "@nextui-org/calendar": "2.2.9", + "@nextui-org/card": "2.2.9", + "@nextui-org/checkbox": "2.3.8", + "@nextui-org/chip": "2.2.6", + "@nextui-org/code": "2.2.6", + "@nextui-org/date-input": "2.3.8", + "@nextui-org/date-picker": "2.3.9", "@nextui-org/divider": "2.2.5", - "@nextui-org/drawer": "2.2.6", - "@nextui-org/dropdown": "2.3.8", - "@nextui-org/form": "2.1.7", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/image": "2.2.4", - "@nextui-org/input": "2.4.7", - "@nextui-org/input-otp": "2.1.7", - "@nextui-org/kbd": "2.2.5", - "@nextui-org/link": "2.2.6", - "@nextui-org/listbox": "2.3.8", - "@nextui-org/menu": "2.2.8", - "@nextui-org/modal": "2.2.6", - "@nextui-org/navbar": "2.2.7", - "@nextui-org/pagination": "2.2.7", - "@nextui-org/popover": "2.3.8", - "@nextui-org/progress": "2.2.5", - "@nextui-org/radio": "2.3.7", - "@nextui-org/ripple": "2.2.6", - "@nextui-org/scroll-shadow": "2.3.4", - "@nextui-org/select": "2.4.8", - "@nextui-org/skeleton": "2.2.4", - "@nextui-org/slider": "2.4.6", - "@nextui-org/snippet": "2.2.9", - "@nextui-org/spacer": "2.2.5", - "@nextui-org/spinner": "2.2.5", - "@nextui-org/switch": "2.2.7", - "@nextui-org/system": "2.4.5", - "@nextui-org/table": "2.2.7", - "@nextui-org/tabs": "2.2.6", - "@nextui-org/theme": "2.4.4", - "@nextui-org/tooltip": "2.2.6", - "@nextui-org/user": "2.2.5", + "@nextui-org/drawer": "2.2.7", + "@nextui-org/dropdown": "2.3.9", + "@nextui-org/form": "2.1.8", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/image": "2.2.5", + "@nextui-org/input": "2.4.8", + "@nextui-org/input-otp": "2.1.8", + "@nextui-org/kbd": "2.2.6", + "@nextui-org/link": "2.2.7", + "@nextui-org/listbox": "2.3.9", + "@nextui-org/menu": "2.2.9", + "@nextui-org/modal": "2.2.7", + "@nextui-org/navbar": "2.2.8", + "@nextui-org/pagination": "2.2.8", + "@nextui-org/popover": "2.3.9", + "@nextui-org/progress": "2.2.6", + "@nextui-org/radio": "2.3.8", + "@nextui-org/ripple": "2.2.7", + "@nextui-org/scroll-shadow": "2.3.5", + "@nextui-org/select": "2.4.9", + "@nextui-org/skeleton": "2.2.5", + "@nextui-org/slider": "2.4.7", + "@nextui-org/snippet": "2.2.10", + "@nextui-org/spacer": "2.2.6", + "@nextui-org/spinner": "2.2.6", + "@nextui-org/switch": "2.2.8", + "@nextui-org/system": "2.4.6", + "@nextui-org/table": "2.2.8", + "@nextui-org/tabs": "2.2.7", + "@nextui-org/theme": "2.4.5", + "@nextui-org/tooltip": "2.2.7", + "@nextui-org/user": "2.2.6", "@react-aria/visually-hidden": "3.8.18" }, "peerDependencies": { @@ -2525,16 +2606,14 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/react-rsc-utils/-/react-rsc-utils-2.1.1.tgz", "integrity": "sha512-9uKH1XkeomTGaswqlGKt0V0ooUev8mPXtKJolR+6MnpvBUrkqngw1gUGF0bq/EcCCkks2+VOHXZqFT6x9hGkQQ==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } }, "node_modules/@nextui-org/react-utils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nextui-org/react-utils/-/react-utils-2.1.2.tgz", - "integrity": "sha512-P8toqKuksl5UgDADRxZ7lNnlcw9rynsfKPzfxi4eEKWFBPHPPFy3Nesh8tx2SJQaOxCsc+3VXB+A9la6ZHYRiA==", - "license": "MIT", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nextui-org/react-utils/-/react-utils-2.1.3.tgz", + "integrity": "sha512-o61fOS+S8p3KtgLLN7ub5gR0y7l517l9eZXJabUdnVcZzZjTqEijWjzjIIIyAtYAlL4d+WTXEOROuc32sCmbqw==", "dependencies": { "@nextui-org/react-rsc-utils": "2.1.1", "@nextui-org/shared-utils": "2.1.2" @@ -2544,13 +2623,12 @@ } }, "node_modules/@nextui-org/ripple": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/ripple/-/ripple-2.2.6.tgz", - "integrity": "sha512-8bdE+nPZdT/U8H0fRaZBOAB3npfKGnv1KO2JWL2jSnN7wkO4kXZwcHqZT3aRFxqWvdsPXj8IajMpnMoM7LNYkA==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/ripple/-/ripple-2.2.7.tgz", + "integrity": "sha512-cphzlvCjdROh1JWQhO/wAsmBdlU9kv/UA2YRQS4viaWcA3zO+qOZVZ9/YZMan6LBlOLENCaE9CtV2qlzFtVpEg==", "dependencies": { "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2" }, "peerDependencies": { @@ -2562,12 +2640,11 @@ } }, "node_modules/@nextui-org/scroll-shadow": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@nextui-org/scroll-shadow/-/scroll-shadow-2.3.4.tgz", - "integrity": "sha512-/21shF/RIXOcdQp5CKy/UHZJse03O7L31ZJV1wAh8TJZOFof2oRpYIl2AibDxUnP2UR9fpjqq0b6F6e6d1Kq5Q==", - "license": "MIT", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@nextui-org/scroll-shadow/-/scroll-shadow-2.3.5.tgz", + "integrity": "sha512-2H5qro6RHcWo6ZfcG2hHZHsR1LrV3FMZP5Lkc9ZwJdWPg4dXY4erGRE4U+B7me6efj5tBOFmZkIpxVUyMBLtZg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-data-scroll-overflow": "2.2.2" }, @@ -2579,20 +2656,19 @@ } }, "node_modules/@nextui-org/select": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@nextui-org/select/-/select-2.4.8.tgz", - "integrity": "sha512-ZX6zrMXAgOFUno1aReEvNSeUyaGkETbinzKObU0IP4/aj3I/9FjzNhj42rZrudGi356slAFRTQiYuG6O8I4wcA==", - "license": "MIT", - "dependencies": { - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/form": "2.1.7", - "@nextui-org/listbox": "2.3.8", - "@nextui-org/popover": "2.3.8", - "@nextui-org/react-utils": "2.1.2", - "@nextui-org/scroll-shadow": "2.3.4", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@nextui-org/select/-/select-2.4.9.tgz", + "integrity": "sha512-R8HHKDH7dA4Dv73Pl80X7qfqdyl+Fw4gi/9bmyby0QJG8LN2zu51xyjjKphmWVkAiE3O35BRVw7vMptHnWFUgQ==", + "dependencies": { + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/form": "2.1.8", + "@nextui-org/listbox": "2.3.9", + "@nextui-org/popover": "2.3.9", + "@nextui-org/react-utils": "2.1.3", + "@nextui-org/scroll-shadow": "2.3.5", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/spinner": "2.2.5", + "@nextui-org/spinner": "2.2.6", "@nextui-org/use-aria-button": "2.2.4", "@nextui-org/use-aria-multiselect": "2.4.3", "@nextui-org/use-safe-layout-effect": "2.1.1", @@ -2602,7 +2678,7 @@ "@react-aria/utils": "3.26.0", "@react-aria/visually-hidden": "3.8.18", "@react-types/shared": "3.26.0", - "@tanstack/react-virtual": "3.10.9" + "@tanstack/react-virtual": "3.11.2" }, "peerDependencies": { "@nextui-org/system": ">=2.4.0", @@ -2612,28 +2688,10 @@ "react-dom": ">=18 || >=19.0.0-rc.0" } }, - "node_modules/@nextui-org/select/node_modules/@tanstack/react-virtual": { - "version": "3.10.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz", - "integrity": "sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.10.9" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@nextui-org/shared-icons": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/shared-icons/-/shared-icons-2.1.1.tgz", "integrity": "sha512-mkiTpFJnCzB2M8Dl7IwXVzDKKq9ZW2WC0DaQRs1eWgqboRCP8DDde+MJZq331hC7pfH8BC/4rxXsKECrOUUwCg==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -2641,16 +2699,14 @@ "node_modules/@nextui-org/shared-utils": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@nextui-org/shared-utils/-/shared-utils-2.1.2.tgz", - "integrity": "sha512-5n0D+AGB4P9lMD1TxwtdRSuSY0cWgyXKO9mMU11Xl3zoHNiAz/SbCSTc4VBJdQJ7Y3qgNXvZICzf08+bnjjqqA==", - "license": "MIT" + "integrity": "sha512-5n0D+AGB4P9lMD1TxwtdRSuSY0cWgyXKO9mMU11Xl3zoHNiAz/SbCSTc4VBJdQJ7Y3qgNXvZICzf08+bnjjqqA==" }, "node_modules/@nextui-org/skeleton": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@nextui-org/skeleton/-/skeleton-2.2.4.tgz", - "integrity": "sha512-LMQI5pcYbgsJcObU9KcODvs63iswZQKuuYtDH05y4SQvDerxkjxJYj72/ld1pkwOcM8/9Tc2ya/xlk90yjlg5g==", - "license": "MIT", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@nextui-org/skeleton/-/skeleton-2.2.5.tgz", + "integrity": "sha512-CK1O9dqS0xPW3o1SIekEEOjSosJkXNzU0Zd538Nn1XhY1RjNuIPchpY9Pv5YZr2QSKy0zkwPQt/NalwErke0Jg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2" }, "peerDependencies": { @@ -2661,14 +2717,13 @@ } }, "node_modules/@nextui-org/slider": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@nextui-org/slider/-/slider-2.4.6.tgz", - "integrity": "sha512-BOJQcjGYr0uX/5opQauamYp26D8erMEUNqj07IxwWDIo+qnTCrUg762rAIlj3W4u3pBJJ2FkZUWbsEYDnnbi7g==", - "license": "MIT", + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@nextui-org/slider/-/slider-2.4.7.tgz", + "integrity": "sha512-/RnjnmAPvssebhtElG+ZI8CCot2dEBcEjw7LrHfmVnJOd5jgceMtnXhdJSppQuLvcC4fPpkhd6dY86IezOZwfw==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/tooltip": "2.2.6", + "@nextui-org/tooltip": "2.2.7", "@react-aria/focus": "3.19.0", "@react-aria/i18n": "3.12.4", "@react-aria/interactions": "3.22.5", @@ -2685,17 +2740,16 @@ } }, "node_modules/@nextui-org/snippet": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/@nextui-org/snippet/-/snippet-2.2.9.tgz", - "integrity": "sha512-Sc3CdW4/UCL4hhwKP0k1ffLYLo6JlI9XbB3exS77j1lS6ox/FRc+d7YylMrrNuAb/L4bIjR/TUoNiu+Rkc6u0Q==", - "license": "MIT", + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@nextui-org/snippet/-/snippet-2.2.10.tgz", + "integrity": "sha512-mVjf8muq4TX2PlESN7EeHgFmjuz7PNhrKFP+fb8Lj9J6wvUIUDm5ENv9bs72cRsK+zse6OUNE4JF1er6HllKug==", "dependencies": { - "@nextui-org/button": "2.2.8", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/button": "2.2.9", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/tooltip": "2.2.6", - "@nextui-org/use-clipboard": "2.1.1", + "@nextui-org/tooltip": "2.2.7", + "@nextui-org/use-clipboard": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/utils": "3.26.0" }, @@ -2708,12 +2762,11 @@ } }, "node_modules/@nextui-org/spacer": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/spacer/-/spacer-2.2.5.tgz", - "integrity": "sha512-oKh765tHx+BaD4yHewIfWGOcLWk3FsH/VBXdAsaiMyrr5MsW9LGH7e3kzBCZswBeZNN5MaDok6WZu1B0PnQIFw==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/spacer/-/spacer-2.2.6.tgz", + "integrity": "sha512-1qYtZ6xICfSrFV0MMB/nUH1K2X9mHzIikrjC/okzyzWywibsVNbyRfu5vObVClYlVGY0r4M4+7fpV2QV1tKRGw==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/system-rsc": "2.3.5" }, @@ -2724,12 +2777,11 @@ } }, "node_modules/@nextui-org/spinner": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/spinner/-/spinner-2.2.5.tgz", - "integrity": "sha512-bU4DV1USHQUbbhzB0Qi6q27JNm1uF6r+IOs/7BfQj6sj2j124ull2BuxpyhmrAnwb2Hqj7U1goy9zMigoS37mg==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/spinner/-/spinner-2.2.6.tgz", + "integrity": "sha512-0V0H8jVpgRolgLnCuKDbrQCSK0VFPAZYiyGOE1+dfyIezpta+Nglh+uEl2sEFNh6B9Z8mARB8YEpRnTcA0ePDw==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/system-rsc": "2.3.5" }, @@ -2740,12 +2792,11 @@ } }, "node_modules/@nextui-org/switch": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@nextui-org/switch/-/switch-2.2.7.tgz", - "integrity": "sha512-745oSgHN4LUYFcGwN+xDSa94fBb1H+dy3RYS1sV+RzAKmHyN2OjE4x40/3W09KDQQyyA0f7y/M8gh49f4tqphw==", - "license": "MIT", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@nextui-org/switch/-/switch-2.2.8.tgz", + "integrity": "sha512-wk9qQSOfUEtmdWR1omKjmEYzgMjJhVizvfW6Z0rKOiMUuSud2d4xYnUmZhU22cv2WtoPV//kBjXkYD/E/t6rdg==", "dependencies": { - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-safe-layout-effect": "2.1.1", "@react-aria/focus": "3.19.0", @@ -2764,13 +2815,12 @@ } }, "node_modules/@nextui-org/system": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@nextui-org/system/-/system-2.4.5.tgz", - "integrity": "sha512-PNJta8tNAsWy0Sf39HCjwd73gSpZ/vhDGL9uZA+sT6kXL5ZKxCv8dLd1MNtt5Tg+v8fR4rVWHwmPuQX9rjK1MA==", - "license": "MIT", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@nextui-org/system/-/system-2.4.6.tgz", + "integrity": "sha512-6ujAriBZMfQ16n6M6Ad9g32KJUa1CzqIVaHN/tymadr/3m8hrr7xDw6z50pVjpCRq2PaaA1hT8Hx7EFU3f2z3Q==", "dependencies": { "@internationalized/date": "3.6.0", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/system-rsc": "2.3.5", "@react-aria/i18n": "3.12.4", "@react-aria/overlays": "3.24.0", @@ -2788,7 +2838,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@nextui-org/system-rsc/-/system-rsc-2.3.5.tgz", "integrity": "sha512-DpVLNV9LkeP1yDULFCXm2mxA9m4ygS7XYy3lwgcF9M1A8QAWB+ut+FcP+8a6va50oSHOqwvUwPDUslgXTPMBfQ==", - "license": "MIT", "dependencies": { "@react-types/shared": "3.26.0", "clsx": "^1.2.1" @@ -2802,22 +2851,20 @@ "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/@nextui-org/table": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@nextui-org/table/-/table-2.2.7.tgz", - "integrity": "sha512-ibVZ6OF+yd+NKPATyY16TzRJRwSa6hDr/4OUyT8w1H8dtdQ3nFd13VF+6AMpFvCmTsvB8CBwge7IqZiqqkbgzA==", - "license": "MIT", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@nextui-org/table/-/table-2.2.8.tgz", + "integrity": "sha512-XNM0/Ed7Re3BA1eHL31rzALea9hgsBwD0rMR2qB2SAl2e8KaV2o+4bzgYhpISAzHQtlG8IsXanxiuNDH8OPVyw==", "dependencies": { - "@nextui-org/checkbox": "2.3.7", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/checkbox": "2.3.8", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-icons": "2.1.1", "@nextui-org/shared-utils": "2.1.2", - "@nextui-org/spacer": "2.2.5", + "@nextui-org/spacer": "2.2.6", "@react-aria/focus": "3.19.0", "@react-aria/interactions": "3.22.5", "@react-aria/table": "3.16.0", @@ -2836,14 +2883,13 @@ } }, "node_modules/@nextui-org/tabs": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/tabs/-/tabs-2.2.6.tgz", - "integrity": "sha512-ckommLk0fCu/BJLETXKvNHN5aqoyyujHAm1nkSH87PX247HzYd4F7VFacqwJwEHX22BlxblpKmCOkYdQqHlyuA==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/tabs/-/tabs-2.2.7.tgz", + "integrity": "sha512-EDPK0MOR4DPTfud9Khr5AikLbyEhHTlkGfazbOxg7wFaHysOnV5Y/E6UfvaN69kgIeT7NQcDFdaCKJ/AX1N7AA==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/aria-utils": "2.2.7", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-is-mounted": "2.1.1", "@nextui-org/use-update-effect": "2.1.1", @@ -2865,10 +2911,9 @@ } }, "node_modules/@nextui-org/theme": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.4.4.tgz", - "integrity": "sha512-L4MtnYa77RezHxvzQ5k5Z/+7ANg73MEFJqMMeUORUteWFv85Ugxlo/SYAL2BZIGmO5ioZt8A6NuhqT+qDDds8w==", - "license": "MIT", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.4.5.tgz", + "integrity": "sha512-c7Y17n+hBGiFedxMKfg7Qyv93iY5MteamLXV4Po4c1VF1qZJI6I+IKULFh3FxPWzAoz96r6NdYT7OLFjrAJdWg==", "dependencies": { "@nextui-org/shared-utils": "2.1.2", "clsx": "^1.2.1", @@ -2887,21 +2932,19 @@ "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/@nextui-org/tooltip": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@nextui-org/tooltip/-/tooltip-2.2.6.tgz", - "integrity": "sha512-a8/DKDAL39nBEc/2ODP2tnGzfhmvAm0LKa0/5PxiHaY+Ym2L3+m1CVQqlT1lNVSUr8F2OohPFkF+jlP1QuntkQ==", - "license": "MIT", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@nextui-org/tooltip/-/tooltip-2.2.7.tgz", + "integrity": "sha512-NgoaxcNwuCq/jvp77dmGzyS7JxzX4dvD/lAYi/GUhyxEC3TK3teZ3ADRhrC6tb84OpaelPLaTkhRNSaxVAQzjQ==", "dependencies": { - "@nextui-org/aria-utils": "2.2.6", + "@nextui-org/aria-utils": "2.2.7", "@nextui-org/dom-animation": "2.1.1", - "@nextui-org/framer-utils": "2.1.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/framer-utils": "2.1.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@nextui-org/use-safe-layout-effect": "2.1.1", "@react-aria/interactions": "3.22.5", @@ -2924,7 +2967,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-accordion/-/use-aria-accordion-2.2.2.tgz", "integrity": "sha512-M8gjX6XmB83cIAZKV2zI1KvmTuuOh+Si50F3SWvYjBXyrDIM5775xCs2PG6AcLjf6OONTl5KwuZ2cbSDHiui6A==", - "license": "MIT", "dependencies": { "@react-aria/button": "3.11.0", "@react-aria/focus": "3.19.0", @@ -2942,7 +2984,6 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-button/-/use-aria-button-2.2.4.tgz", "integrity": "sha512-Bz8l4JGzRKh6V58VX8Laq4rKZDppsnVuNCBHpMJuLo2F9ht7UKvZAEJwXcdbUZ87aui/ZC+IPYqgjvT+d8QlQg==", - "license": "MIT", "dependencies": { "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", @@ -2956,10 +2997,9 @@ } }, "node_modules/@nextui-org/use-aria-link": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-link/-/use-aria-link-2.2.4.tgz", - "integrity": "sha512-e9gEtO7oQMUNTN2EAdKG4oLzndlCVghVHPoEpMxlanjvZWNlPO7/guyrN6Bpxpjz6Z80ERLK+2X8t6FCkaSb6w==", - "license": "MIT", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-link/-/use-aria-link-2.2.5.tgz", + "integrity": "sha512-LBWXLecvuET4ZcpoHyyuS3yxvCzXdkmFcODhYwUmC8PiFSEUHkuFMC+fLwdXCP5GOqrv6wTGYHf41wNy1ugX1w==", "dependencies": { "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", @@ -2976,7 +3016,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-modal-overlay/-/use-aria-modal-overlay-2.2.3.tgz", "integrity": "sha512-55DIVY0u+Ynxy1/DtzZkMsdVW63wC0mafKXACwCi0xV64D0Ggi9MM7BRePLK0mOboSb3gjCwYqn12gmRiy+kmg==", - "license": "MIT", "dependencies": { "@react-aria/overlays": "3.24.0", "@react-aria/utils": "3.26.0", @@ -2992,7 +3031,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-multiselect/-/use-aria-multiselect-2.4.3.tgz", "integrity": "sha512-PwDA4Y5DOx0SMxc277JeZi8tMtaINTwthPhk8SaDrtOBhP+r9owS3T/W9t37xKnmrTerHwaEq4ADGQtm5/VMXQ==", - "license": "MIT", "dependencies": { "@react-aria/i18n": "3.12.4", "@react-aria/interactions": "3.22.5", @@ -3018,7 +3056,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-callback-ref/-/use-callback-ref-2.1.1.tgz", "integrity": "sha512-DzlKJ9p7Tm0x3HGjynZ/CgS1jfoBILXKFXnYPLr/SSETXqVaCguixolT/07BRB1yo9AGwELaCEt91BeI0Rb6hQ==", - "license": "MIT", "dependencies": { "@nextui-org/use-safe-layout-effect": "2.1.1" }, @@ -3027,10 +3064,9 @@ } }, "node_modules/@nextui-org/use-clipboard": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@nextui-org/use-clipboard/-/use-clipboard-2.1.1.tgz", - "integrity": "sha512-oOkRLyd8R6zRP4s3psV5XPdYuoExnCcv46DLqVe4TajSPaWv7noRBKtkb8x/am6gZaPqxCdQ56A9gX2P8LMgGg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nextui-org/use-clipboard/-/use-clipboard-2.1.2.tgz", + "integrity": "sha512-MUITEPaQAvu9VuMCUQXMc4j3uBgXoD8LVcuuvUVucg/8HK/Xia0dQ4QgK30QlCbZ/BwZ047rgMAgpMZeVKw4MQ==", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -3039,7 +3075,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-data-scroll-overflow/-/use-data-scroll-overflow-2.2.2.tgz", "integrity": "sha512-TFB6BuaLOsE++K1UEIPR9StkBgj9Cvvc+ccETYpmn62B7pK44DmxjkwhK0ei59wafJPIyytZ3DgdVDblfSyIXA==", - "license": "MIT", "dependencies": { "@nextui-org/shared-utils": "2.1.2" }, @@ -3051,7 +3086,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-disclosure/-/use-disclosure-2.2.2.tgz", "integrity": "sha512-ka+5Fic2MIYtOMHi3zomtkWxCWydmJmcq7+fb6RHspfr0tGYjXWYO/lgtGeHFR1LYksMPLID3c7shT5bqzxJcA==", - "license": "MIT", "dependencies": { "@nextui-org/use-callback-ref": "2.1.1", "@react-aria/utils": "3.26.0", @@ -3065,7 +3099,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-draggable/-/use-draggable-2.1.2.tgz", "integrity": "sha512-gN4G42uuRyFlAZ3FgMSeZLBg3LIeGlKTOLRe3JvyaBn1D1mA2+I3XONY1oKd9KKmtYCJNwY/2x6MVsBfy8nsgw==", - "license": "MIT", "dependencies": { "@react-aria/interactions": "3.22.5" }, @@ -3074,11 +3107,11 @@ } }, "node_modules/@nextui-org/use-image": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@nextui-org/use-image/-/use-image-2.1.1.tgz", - "integrity": "sha512-Tsfy9pA4AQBAj7rFIEonB9L/hXGg7M5agaAZNBUVpdp47NjcEwLpcU2XncKh8AhkQku0p4JOyMC9usRGV3z06Q==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nextui-org/use-image/-/use-image-2.1.2.tgz", + "integrity": "sha512-I46M5gCJK4rZ0qYHPx3kVSF2M2uGaWPwzb3w4Cmx8K9QS+LbUQtRMbD8KOGTHZGA3kBDPvFbAi53Ert4eACrZQ==", "dependencies": { + "@nextui-org/react-utils": "2.1.3", "@nextui-org/use-safe-layout-effect": "2.1.1" }, "peerDependencies": { @@ -3089,7 +3122,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-intersection-observer/-/use-intersection-observer-2.2.2.tgz", "integrity": "sha512-fS/4m8jnXO7GYpnp/Lp+7bfBEAXPzqsXgqGK6qrp7sfFEAbLzuJp0fONkbIB3F6F3FJrbFOlY+Y5qrHptO7U/Q==", - "license": "MIT", "dependencies": { "@react-aria/interactions": "3.22.5", "@react-aria/ssr": "3.9.7", @@ -3104,7 +3136,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mobile/-/use-is-mobile-2.2.2.tgz", "integrity": "sha512-gcmUL17fhgGdu8JfXF12FZCGATJIATxV4jSql+FNhR+gc+QRRWBRmCJSpMIE2RvGXL777tDvvoh/tjFMB3pW4w==", - "license": "MIT", "dependencies": { "@react-aria/ssr": "3.9.7" }, @@ -3116,7 +3147,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mounted/-/use-is-mounted-2.1.1.tgz", "integrity": "sha512-osJB3E/DCu4Le0f+pb21ia9/TaSHwme4r0fHjO5/nUBYk/RCvGlRUUCJClf/wi9WfH8QyjuJ27+zBcUSm6AMMg==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -3125,7 +3155,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-measure/-/use-measure-2.1.1.tgz", "integrity": "sha512-2RVn90gXHTgt6fvzBH4fzgv3hMDz+SEJkqaCTbd6WUNWag4AaLb2WU/65CtLcexyu10HrgYf2xG07ZqtJv0zSg==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -3134,7 +3163,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/@nextui-org/use-pagination/-/use-pagination-2.2.3.tgz", "integrity": "sha512-V2WGIq4LLkTpq6EUhJg3MVvHY2ZJ63AYV9N0d52Dc3Qqok0tTRuY51dd1P+F58HyTPW84W2z4q2R8XALtzFxQw==", - "license": "MIT", "dependencies": { "@nextui-org/shared-utils": "2.1.2", "@react-aria/i18n": "3.12.4" @@ -3147,7 +3175,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-safe-layout-effect/-/use-safe-layout-effect-2.1.1.tgz", "integrity": "sha512-p0vezi2eujC3rxlMQmCLQlc8CNbp+GQgk6YcSm7Rk10isWVlUII5T1L3y+rcFYdgTPObCkCngPPciNQhD7Lf7g==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -3156,7 +3183,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-scroll-position/-/use-scroll-position-2.1.1.tgz", "integrity": "sha512-RgY1l2POZbSjnEirW51gdb8yNPuQXHqJx3TS8Ut5dk+bhaX9JD3sUdEiJNb3qoHAJInzyjN+27hxnACSlW0gzg==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } @@ -3165,19 +3191,17 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nextui-org/use-update-effect/-/use-update-effect-2.1.1.tgz", "integrity": "sha512-fKODihHLWcvDk1Sm8xDua9zjdbstxTOw9shB7k/mPkeR3E7SouSpN0+LW67Bczh1EmbRg1pIrFpEOLnbpgMFzA==", - "license": "MIT", "peerDependencies": { "react": ">=18 || >=19.0.0-rc.0" } }, "node_modules/@nextui-org/user": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nextui-org/user/-/user-2.2.5.tgz", - "integrity": "sha512-T9lMlFuTF+3luwgtkPPZIx0AdfyrDHu6crwN5rjpt+OTu65wF5gc7b8t8bjFzjRMNpJsiUfRxm2mTPjE9fGIAA==", - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@nextui-org/user/-/user-2.2.6.tgz", + "integrity": "sha512-iimFoP3DVK85p78r0ekC7xpVPQiBIbWnyBPdrnBj1UEgQdKoUzGhVbhYUnA8niBz/AS5xLt6aQixsv9/B0/msw==", "dependencies": { - "@nextui-org/avatar": "2.2.5", - "@nextui-org/react-utils": "2.1.2", + "@nextui-org/avatar": "2.2.6", + "@nextui-org/react-utils": "2.1.3", "@nextui-org/shared-utils": "2.1.2", "@react-aria/focus": "3.19.0", "@react-aria/utils": "3.26.0" @@ -3360,7 +3384,6 @@ "version": "3.5.19", "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.19.tgz", "integrity": "sha512-mVngOPFYVVhec89rf/CiYQGTfaLRfHFtX+JQwY7sNYNqSA+gO8p4lNARe3Be6bJPgH+LUQuruIY9/ZDL6LT3HA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/i18n": "^3.12.4", "@react-aria/link": "^3.7.7", @@ -3377,7 +3400,6 @@ "version": "3.11.0", "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.11.0.tgz", "integrity": "sha512-b37eIV6IW11KmNIAm65F3SEl2/mgj5BrHIysW6smZX3KoKWTGYsYfcQkmtNgY0GOSFfDxMCoolsZ6mxC00nSDA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/interactions": "^3.22.5", @@ -3396,7 +3418,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.6.0.tgz", "integrity": "sha512-tZ3nd5DP8uxckbj83Pt+4RqgcTWDlGi7njzc7QqFOG2ApfnYDUXbIpb/Q4KY6JNlJskG8q33wo0XfOwNy8J+eg==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@react-aria/i18n": "^3.12.4", @@ -3418,7 +3439,6 @@ "version": "3.15.0", "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.15.0.tgz", "integrity": "sha512-z/8xd4em7o0MroBXwkkwv7QRwiJaA1FwqMhRUb7iqtBGP2oSytBEDf0N7L09oci32a1P4ZPz2rMK5GlLh/PD6g==", - "license": "Apache-2.0", "dependencies": { "@react-aria/form": "^3.0.11", "@react-aria/interactions": "^3.22.5", @@ -3440,7 +3460,6 @@ "version": "3.11.0", "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.11.0.tgz", "integrity": "sha512-s88YMmPkMO1WSoiH1KIyZDLJqUwvM2wHXXakj3cYw1tBHGo4rOUFq+JWQIbM5EDO4HOR4AUUqzIUd0NO7t3zyg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/i18n": "^3.12.4", "@react-aria/listbox": "^3.13.6", @@ -3467,7 +3486,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.12.0.tgz", "integrity": "sha512-VYNXioLfddIHpwQx211+rTYuunDmI7VHWBRetCpH3loIsVFuhFSRchTQpclAzxolO3g0vO7pMVj9VYt7Swp6kg==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@internationalized/number": "^3.6.0", @@ -3497,7 +3515,6 @@ "version": "3.5.20", "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.20.tgz", "integrity": "sha512-l0GZVLgeOd3kL3Yj8xQW7wN3gn9WW3RLd/SGI9t7ciTq+I/FhftjXCWzXLlOCCTLMf+gv7eazecECtmoWUaZWQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/overlays": "^3.24.0", @@ -3515,7 +3532,6 @@ "version": "3.19.0", "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.19.0.tgz", "integrity": "sha512-hPF9EXoUQeQl1Y21/rbV2H4FdUR2v+4/I0/vB+8U3bT1CJ+1AFj1hc/rqx2DqEwDlEwOHN+E4+mRahQmlybq0A==", - "license": "Apache-2.0", "dependencies": { "@react-aria/interactions": "^3.22.5", "@react-aria/utils": "^3.26.0", @@ -3531,7 +3547,6 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.11.tgz", "integrity": "sha512-oXzjTiwVuuWjZ8muU0hp3BrDH5qjVctLOF50mjPvqUbvXQTHhoDxWweyIXPQjGshaqBd2w4pWaE4A2rG2O/apw==", - "license": "Apache-2.0", "dependencies": { "@react-aria/interactions": "^3.22.5", "@react-aria/utils": "^3.26.0", @@ -3547,7 +3562,6 @@ "version": "3.11.0", "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.11.0.tgz", "integrity": "sha512-lN5FpQgu2Rq0CzTPWmzRpq6QHcMmzsXYeClsgO3108uVp1/genBNAObYVTxGOKe/jb9q99trz8EtIn05O6KN1g==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3572,7 +3586,6 @@ "version": "3.12.4", "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.4.tgz", "integrity": "sha512-j9+UL3q0Ls8MhXV9gtnKlyozq4aM95YywXqnmJtzT1rYeBx7w28hooqrWkCYLfqr4OIryv1KUnPiCSLwC2OC7w==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@internationalized/message": "^3.1.6", @@ -3591,7 +3604,6 @@ "version": "3.22.5", "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.5.tgz", "integrity": "sha512-kMwiAD9E0TQp+XNnOs13yVJghiy8ET8L0cbkeuTgNI96sOAp/63EJ1FSrDf17iD8sdjt41LafwX/dKXW9nCcLQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/ssr": "^3.9.7", "@react-aria/utils": "^3.26.0", @@ -3606,7 +3618,6 @@ "version": "3.7.13", "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.13.tgz", "integrity": "sha512-brSAXZVTey5RG/Ex6mTrV/9IhGSQFU4Al34qmjEDho+Z2qT4oPwf8k7TRXWWqzOU0ugYxekYbsLd2zlN3XvWcg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/utils": "^3.26.0", "@react-types/shared": "^3.26.0", @@ -3620,7 +3631,6 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.7.tgz", "integrity": "sha512-eVBRcHKhNSsATYWv5wRnZXRqPVcKAWWakyvfrYePIKpC3s4BaHZyTGYdefk8ZwZdEOuQZBqLMnjW80q1uhtkuA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/interactions": "^3.22.5", @@ -3637,7 +3647,6 @@ "version": "3.13.6", "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.13.6.tgz", "integrity": "sha512-6hEXEXIZVau9lgBZ4VVjFR3JnGU+fJaPmV3HP0UZ2ucUptfG0MZo24cn+ZQJsWiuaCfNFv5b8qribiv+BcO+Kg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/interactions": "^3.22.5", "@react-aria/label": "^3.7.13", @@ -3658,7 +3667,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.4.1.tgz", "integrity": "sha512-4X2mcxgqLvvkqxv2l1n00jTzUxxe0kkLiapBGH1LHX/CxA1oQcHDqv8etJ2ZOwmS/MSBBiWnv3DwYHDOF6ubig==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -3667,7 +3675,6 @@ "version": "3.16.0", "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.16.0.tgz", "integrity": "sha512-TNk+Vd3TbpBPUxEloAdHRTaRxf9JBK7YmkHYiq0Yj5Lc22KS0E2eTyhpPM9xJvEWN2TlC5TEvNfdyui2kYWFFQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3693,7 +3700,6 @@ "version": "3.24.0", "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.24.0.tgz", "integrity": "sha512-0kAXBsMNTc/a3M07tK9Cdt/ea8CxTAEJ223g8YgqImlmoBBYAL7dl5G01IOj67TM64uWPTmZrOklBchHWgEm3A==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3716,7 +3722,6 @@ "version": "3.4.18", "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.18.tgz", "integrity": "sha512-FOLgJ9t9i1u3oAAimybJG6r7/soNPBnJfWo4Yr6MmaUv90qVGa1h6kiuM5m9H/bm5JobAebhdfHit9lFlgsCmg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/i18n": "^3.12.4", "@react-aria/label": "^3.7.13", @@ -3733,7 +3738,6 @@ "version": "3.10.10", "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.10.tgz", "integrity": "sha512-NVdeOVrsrHgSfwL2jWCCXFsWZb+RMRZErj5vthHQW4nkHECGOzeX56VaLWTSvdoCPqi9wdIX8A6K9peeAIgxzA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/form": "^3.0.11", @@ -3754,7 +3758,6 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.21.0.tgz", "integrity": "sha512-52JJ6hlPcM+gt0VV3DBmz6Kj1YAJr13TfutrKfGWcK36LvNCBm1j0N+TDqbdnlp8Nue6w0+5FIwZq44XPYiBGg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3773,7 +3776,6 @@ "version": "3.7.14", "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.14.tgz", "integrity": "sha512-7rOiKjLkEZ0j7mPMlwrqivc+K4OSfL14slaQp06GHRiJkhiWXh2/drPe15hgNq55HmBQBpA0umKMkJcqVgmXPA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3793,7 +3795,6 @@ "version": "3.6.10", "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.10.tgz", "integrity": "sha512-nhYEYk7xUNOZDaqiQ5w/nHH9ouqjJbabTWXH+KK7UR1oVGfo4z1wG94l8KWF3Z6SGGnBxzLJyTBguZ4g9aYTSg==", - "license": "Apache-2.0", "dependencies": { "@react-aria/i18n": "^3.12.4", "@react-aria/live-announcer": "^3.4.1", @@ -3811,7 +3812,6 @@ "version": "3.9.7", "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz", "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -3826,7 +3826,6 @@ "version": "3.6.10", "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.10.tgz", "integrity": "sha512-FtaI9WaEP1tAmra1sYlAkYXg9x75P5UtgY8pSbe9+1WRyWbuE1QZT+RNCTi3IU4fZ7iJQmXH6+VaMyzPlSUagw==", - "license": "Apache-2.0", "dependencies": { "@react-aria/toggle": "^3.10.10", "@react-stately/toggle": "^3.8.0", @@ -3842,7 +3841,6 @@ "version": "3.16.0", "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.16.0.tgz", "integrity": "sha512-9xF9S3CJ7XRiiK92hsIKxPedD0kgcQWwqTMtj3IBynpQ4vsnRiW3YNIzrn9C3apjknRZDTSta8O2QPYCUMmw2A==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/grid": "^3.11.0", @@ -3869,7 +3867,6 @@ "version": "3.9.8", "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.8.tgz", "integrity": "sha512-Nur/qRFBe+Zrt4xcCJV/ULXCS3Mlae+B89bp1Gl20vSDqk6uaPtGk+cS5k03eugOvas7AQapqNJsJgKd66TChw==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3889,7 +3886,6 @@ "version": "3.15.0", "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.15.0.tgz", "integrity": "sha512-V5mg7y1OR6WXYHdhhm4FC7QyGc9TideVRDFij1SdOJrIo5IFB7lvwpOS0GmgwkVbtr71PTRMjZnNbrJUFU6VNA==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/form": "^3.0.11", @@ -3909,7 +3905,6 @@ "version": "3.10.10", "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.10.tgz", "integrity": "sha512-QwMT/vTNrbrILxWVHfd9zVQ3mV2NdBwyRu+DphVQiFAXcmc808LEaIX2n0lI6FCsUDC9ZejCyvzd91/YemdZ1Q==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/interactions": "^3.22.5", @@ -3927,7 +3922,6 @@ "version": "3.0.0-beta.11", "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.11.tgz", "integrity": "sha512-LM3jTRFNDgoEpoL568WaiuqiVM7eynSQLJis1hV0vlVnhTd7M7kzt7zoOjzxVb5Uapz02uCp1Fsm4wQMz09qwQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/i18n": "^3.12.4", @@ -3943,7 +3937,6 @@ "version": "3.7.10", "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.10.tgz", "integrity": "sha512-Udi3XOnrF/SYIz72jw9bgB74MG/yCOzF5pozHj2FH2HiJlchYv/b6rHByV/77IZemdlkmL/uugrv/7raPLSlnw==", - "license": "Apache-2.0", "dependencies": { "@react-aria/focus": "^3.19.0", "@react-aria/interactions": "^3.22.5", @@ -3961,7 +3954,6 @@ "version": "3.26.0", "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.26.0.tgz", "integrity": "sha512-LkZouGSjjQ0rEqo4XJosS4L3YC/zzQkfRM3KoqK6fUOmUJ9t0jQ09WjiF+uOoG9u+p30AVg3TrZRUWmoTS+koQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/ssr": "^3.9.7", "@react-stately/utils": "^3.10.5", @@ -3977,7 +3969,6 @@ "version": "3.8.18", "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.18.tgz", "integrity": "sha512-l/0igp+uub/salP35SsNWq5mGmg3G5F5QMS1gDZ8p28n7CgjvzyiGhJbbca7Oxvaw1HRFzVl9ev+89I7moNnFQ==", - "license": "Apache-2.0", "dependencies": { "@react-aria/interactions": "^3.22.5", "@react-aria/utils": "^3.26.0", @@ -4140,7 +4131,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.6.0.tgz", "integrity": "sha512-GqUtOtGnwWjtNrJud8nY/ywI4VBP5byToNVRTnxbMl+gYO1Qe/uc5NG7zjwMxhb2kqSBHZFdkF0DXVqG2Ul+BA==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@react-stately/utils": "^3.10.5", @@ -4156,7 +4146,6 @@ "version": "3.6.10", "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.10.tgz", "integrity": "sha512-LHm7i4YI8A/RdgWAuADrnSAYIaYYpQeZqsp1a03Og0pJHAlZL0ymN3y2IFwbZueY0rnfM+yF+kWNXjJqbKrFEQ==", - "license": "Apache-2.0", "dependencies": { "@react-stately/form": "^3.1.0", "@react-stately/utils": "^3.10.5", @@ -4172,7 +4161,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.0.tgz", "integrity": "sha512-MfR9hwCxe5oXv4qrLUnjidwM50U35EFmInUeFf8i9mskYwWlRYS0O1/9PZ0oF1M0cKambaRHKEy98jczgb9ycA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0", "@swc/helpers": "^0.5.0" @@ -4185,7 +4173,6 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.10.1.tgz", "integrity": "sha512-Rso+H+ZEDGFAhpKWbnRxRR/r7YNmYVtt+Rn0eNDNIUp3bYaxIBCdCySyAtALs4I8RZXZQ9zoUznP7YeVwG3cLg==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/form": "^3.1.0", @@ -4205,7 +4192,6 @@ "version": "3.11.0", "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.11.0.tgz", "integrity": "sha512-d9MJF34A0VrhL5y5S8mAISA8uwfNCQKmR2k4KoQJm3De1J8SQeNzSjLviAwh1faDow6FXGlA6tVbTrHyDcBgBg==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@internationalized/string": "^3.2.5", @@ -4224,7 +4210,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.5.tgz", "integrity": "sha512-6wks4csxUwPCp23LgJSnkBRhrWpd9jGd64DjcCTNB2AHIFu7Ab1W59pJpUL6TW7uAxVxdNKjgn6D1hlBy8qWsA==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -4233,7 +4218,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.1.0.tgz", "integrity": "sha512-E2wxNQ0QaTyDHD0nJFtTSnEH9A3bpJurwxhS4vgcUmESHgjFEMLlC9irUSZKgvOgb42GAq+fHoWBsgKeTp9Big==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0", "@swc/helpers": "^0.5.0" @@ -4246,7 +4230,6 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.10.0.tgz", "integrity": "sha512-ii+DdsOBvCnHMgL0JvUfFwO1kiAPP19Bpdpl6zn/oOltk6F5TmnoyNrzyz+2///1hCiySI3FE1O7ujsAQs7a6Q==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/selection": "^3.18.0", @@ -4262,7 +4245,6 @@ "version": "3.11.1", "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.11.1.tgz", "integrity": "sha512-UCOpIvqBOjwLtk7zVTYWuKU1m1Oe61Q5lNar/GwHaV1nAiSQ8/yYlhr40NkBEs9X3plEfsV28UIpzOrYnu1tPg==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/selection": "^3.18.0", @@ -4278,7 +4260,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.0.tgz", "integrity": "sha512-++sm0fzZeUs9GvtRbj5RwrP+KL9KPANp9f4SvtI3s+MP+Y/X3X7LNNePeeccGeyikB5fzMsuyvd82bRRW9IhDQ==", - "license": "Apache-2.0", "dependencies": { "@react-stately/overlays": "^3.6.12", "@react-types/menu": "^3.9.13", @@ -4293,7 +4274,6 @@ "version": "3.6.12", "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.12.tgz", "integrity": "sha512-QinvZhwZgj8obUyPIcyURSCjTZlqZYRRCS60TF8jH8ZpT0tEAuDb3wvhhSXuYA3Xo9EHLwvLjEf3tQKKdAQArw==", - "license": "Apache-2.0", "dependencies": { "@react-stately/utils": "^3.10.5", "@react-types/overlays": "^3.8.11", @@ -4307,7 +4287,6 @@ "version": "3.10.9", "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.9.tgz", "integrity": "sha512-kUQ7VdqFke8SDRCatw2jW3rgzMWbvw+n2imN2THETynI47NmNLzNP11dlGO2OllRtTrsLhmBNlYHa3W62pFpAw==", - "license": "Apache-2.0", "dependencies": { "@react-stately/form": "^3.1.0", "@react-stately/utils": "^3.10.5", @@ -4323,7 +4302,6 @@ "version": "3.6.9", "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.9.tgz", "integrity": "sha512-vASUDv7FhEYQURzM+JIwcusPv7/x/l3zHc/oKJPvoCl3aa9pwS8hZwS82SC00o2iFnrDscfDJju4IE/cd4hucg==", - "license": "Apache-2.0", "dependencies": { "@react-stately/form": "^3.1.0", "@react-stately/list": "^3.11.1", @@ -4340,7 +4318,6 @@ "version": "3.18.0", "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.18.0.tgz", "integrity": "sha512-6EaNNP3exxBhW2LkcRR4a3pg+3oDguZlBSqIVVR7lyahv/D8xXHRC4dX+m0mgGHJpsgjs7664Xx6c8v193TFxg==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/utils": "^3.10.5", @@ -4355,7 +4332,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.6.0.tgz", "integrity": "sha512-w5vJxVh267pmD1X+Ppd9S3ZzV1hcg0cV8q5P4Egr160b9WMcWlUspZPtsthwUlN7qQe/C8y5IAhtde4s29eNag==", - "license": "Apache-2.0", "dependencies": { "@react-stately/utils": "^3.10.5", "@react-types/shared": "^3.26.0", @@ -4370,7 +4346,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.13.0.tgz", "integrity": "sha512-mRbNYrwQIE7xzVs09Lk3kPteEVFVyOc20vA8ph6EP54PiUf/RllJpxZe/WUYLf4eom9lUkRYej5sffuUBpxjCA==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/flags": "^3.0.5", @@ -4390,7 +4365,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.7.0.tgz", "integrity": "sha512-ox4hTkfZCoR4Oyr3Op3rBlWNq2Wxie04vhEYpTZQ2hobR3l4fYaOkd7CPClILktJ3TC104j8wcb0knWxIBRx9w==", - "license": "Apache-2.0", "dependencies": { "@react-stately/list": "^3.11.1", "@react-types/shared": "^3.26.0", @@ -4405,7 +4379,6 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.8.0.tgz", "integrity": "sha512-pyt/k/J8BwE/2g6LL6Z6sMSWRx9HEJB83Sm/MtovXnI66sxJ2EfQ1OaXB7Su5PEL9OMdoQF6Mb+N1RcW3zAoPw==", - "license": "Apache-2.0", "dependencies": { "@react-stately/utils": "^3.10.5", "@react-types/checkbox": "^3.9.0", @@ -4420,7 +4393,6 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.0.tgz", "integrity": "sha512-+xzPNztJDd2XJD0X3DgWKlrgOhMqZpSzsIssXeJgO7uCnP8/Z513ESaipJhJCFC8fxj5caO/DK4Uu8hEtlB8cQ==", - "license": "Apache-2.0", "dependencies": { "@react-stately/overlays": "^3.6.12", "@react-types/tooltip": "^3.4.13", @@ -4434,7 +4406,6 @@ "version": "3.8.6", "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.6.tgz", "integrity": "sha512-lblUaxf1uAuIz5jm6PYtcJ+rXNNVkqyFWTIMx6g6gW/mYvm8GNx1G/0MLZE7E6CuDGaO9dkLSY2bB1uqyKHidA==", - "license": "Apache-2.0", "dependencies": { "@react-stately/collections": "^3.12.0", "@react-stately/selection": "^3.18.0", @@ -4450,7 +4421,6 @@ "version": "3.10.5", "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz", "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==", - "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -4462,7 +4432,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.2.0.tgz", "integrity": "sha512-aTMpa9AQoz/xLqn8AI1BR/caUUY7/OUo9GbuF434w2u5eGCL7+SAn3Fmq7WSCwqYyDsO+jEIERek4JTX7pEW0A==", - "license": "Apache-2.0", "dependencies": { "@react-aria/utils": "^3.26.0", "@react-types/shared": "^3.26.0", @@ -4476,7 +4445,6 @@ "version": "3.0.0-alpha.25", "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.25.tgz", "integrity": "sha512-nPTRrMA5jS4QcwQ0H8J9Tzzw7+yq+KbwsPNA1ukVIfOGIB45by/1ke/eiZAXGqXxkElxi2fQuaXuWm79BWZ8zg==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4488,7 +4456,6 @@ "version": "3.7.9", "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.9.tgz", "integrity": "sha512-eARYJo8J+VfNV8vP4uw3L2Qliba9wLV2bx9YQCYf5Lc/OE5B/y4gaTLz+Y2P3Rtn6gBPLXY447zCs5i7gf+ICg==", - "license": "Apache-2.0", "dependencies": { "@react-types/link": "^3.5.9", "@react-types/shared": "^3.26.0" @@ -4501,7 +4468,6 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.10.1.tgz", "integrity": "sha512-XTtap8o04+4QjPNAshFWOOAusUTxQlBjU2ai0BTVLShQEjHhRVDBIWsI2B2FKJ4KXT6AZ25llaxhNrreWGonmA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4513,7 +4479,6 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.5.0.tgz", "integrity": "sha512-O3IRE7AGwAWYnvJIJ80cOy7WwoJ0m8GtX/qSmvXQAjC4qx00n+b5aFNBYAQtcyc3RM5QpW6obs9BfwGetFiI8w==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@react-types/shared": "^3.26.0" @@ -4526,7 +4491,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.9.0.tgz", "integrity": "sha512-9hbHx0Oo2Hp5a8nV8Q75LQR0DHtvOIJbFaeqESSopqmV9EZoYjtY/h0NS7cZetgahQgnqYWQi44XGooMDCsmxA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4538,7 +4502,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.1.tgz", "integrity": "sha512-7xr+HknfhReN4QPqKff5tbKTe2kGZvH+DGzPYskAtb51FAAiZsKo+WvnNAvLwg3kRoC9Rkn4TAiVBp/HgymRDw==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4550,7 +4513,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.9.0.tgz", "integrity": "sha512-dbKL5Qsm2MQwOTtVQdOcKrrphcXAqDD80WLlSQrBLg+waDuuQ7H+TrvOT0thLKloNBlFUGnZZfXGRHINpih/0g==", - "license": "Apache-2.0", "dependencies": { "@internationalized/date": "^3.6.0", "@react-types/calendar": "^3.5.0", @@ -4565,7 +4527,6 @@ "version": "3.5.14", "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.14.tgz", "integrity": "sha512-OXWMjrALwrlgw8aHD8SeRm/s3tbAssdaEh2h73KUSeFau3fU3n5mfKv+WnFqsEaOtN261o48l7hTlS6615H9AA==", - "license": "Apache-2.0", "dependencies": { "@react-types/overlays": "^3.8.11", "@react-types/shared": "^3.26.0" @@ -4578,7 +4539,6 @@ "version": "3.7.8", "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.8.tgz", "integrity": "sha512-0wOS97/X0ijTVuIqik1lHYTZnk13QkvMTKvIEhM7c6YMU3vPiirBwLbT2kJiAdwLiymwcCkrBdDF1NTRG6kPFA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4590,7 +4550,6 @@ "version": "3.2.10", "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.10.tgz", "integrity": "sha512-Z5cG0ITwqjUE4kWyU5/7VqiPl4wqMJ7kG/ZP7poAnLmwRsR8Ai0ceVn+qzp5nTA19cgURi8t3LsXn3Ar1FBoog==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4602,7 +4561,6 @@ "version": "3.5.9", "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.9.tgz", "integrity": "sha512-JcKDiDMqrq/5Vpn+BdWQEuXit4KN4HR/EgIi3yKnNbYkLzxBoeQZpQgvTaC7NEQeZnSqkyXQo3/vMUeX/ZNIKw==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4614,7 +4572,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.5.3.tgz", "integrity": "sha512-v1QXd9/XU3CCKr2Vgs7WLcTr6VMBur7CrxHhWZQQFExsf9bgJ/3wbUdjy4aThY/GsYHiaS38EKucCZFr1QAfqA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4626,7 +4583,6 @@ "version": "3.9.13", "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.13.tgz", "integrity": "sha512-7SuX6E2tDsqQ+HQdSvIda1ji/+ujmR86dtS9CUu5yWX91P25ufRjZ72EvLRqClWNQsj1Xl4+2zBDLWlceznAjw==", - "license": "Apache-2.0", "dependencies": { "@react-types/overlays": "^3.8.11", "@react-types/shared": "^3.26.0" @@ -4639,7 +4595,6 @@ "version": "3.8.11", "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.11.tgz", "integrity": "sha512-aw7T0rwVI3EuyG5AOaEIk8j7dZJQ9m34XAztXJVZ/W2+4pDDkLDbJ/EAPnuo2xGYRGhowuNDn4tDju01eHYi+w==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4651,7 +4606,6 @@ "version": "3.5.8", "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.8.tgz", "integrity": "sha512-PR0rN5mWevfblR/zs30NdZr+82Gka/ba7UHmYOW9/lkKlWeD7PHgl1iacpd/3zl/jUF22evAQbBHmk1mS6Mpqw==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4663,7 +4617,6 @@ "version": "3.8.5", "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.5.tgz", "integrity": "sha512-gSImTPid6rsbJmwCkTliBIU/npYgJHOFaI3PNJo7Y0QTAnFelCtYeFtBiWrFodSArSv7ASqpLLUEj9hZu/rxIg==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4675,7 +4628,6 @@ "version": "3.9.8", "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.8.tgz", "integrity": "sha512-RGsYj2oFjXpLnfcvWMBQnkcDuKkwT43xwYWZGI214/gp/B64tJiIUgTM5wFTRAeGDX23EePkhCQF+9ctnqFd6g==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4696,7 +4648,6 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.7.tgz", "integrity": "sha512-lYTR9zXQV2fSEm/G3gwDENWiki1IXd/oorsgf0zu1DBi2SQDbOsLsGUXiwvD24Xy6OkUuhAqjLPPexezo7+u9g==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4708,7 +4659,6 @@ "version": "3.5.7", "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.7.tgz", "integrity": "sha512-1IKiq510rPTHumEZuhxuazuXBa2Cuxz6wBIlwf3NCVmgWEvU+uk1ETG0sH2yymjwCqhtJDKXi+qi9HSgPEDwAg==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4720,7 +4670,6 @@ "version": "3.10.3", "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.10.3.tgz", "integrity": "sha512-Ac+W+m/zgRzlTU8Z2GEg26HkuJFswF9S6w26r+R3MHwr8z2duGPvv37XRtE1yf3dbpRBgHEAO141xqS2TqGwNg==", - "license": "Apache-2.0", "dependencies": { "@react-types/grid": "^3.2.10", "@react-types/shared": "^3.26.0" @@ -4733,7 +4682,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.11.tgz", "integrity": "sha512-BjF2TqBhZaIcC4lc82R5pDJd1F7kstj1K0Nokhz99AGYn8C0ITdp6lR+DPVY9JZRxKgP9R2EKfWGI90Lo7NQdA==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4745,7 +4693,6 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.10.0.tgz", "integrity": "sha512-ShU3d6kLJGQjPXccVFjM3KOXdj3uyhYROqH9YgSIEVxgA9W6LRflvk/IVBamD9pJYTPbwmVzuP0wQkTDupfZ1w==", - "license": "Apache-2.0", "dependencies": { "@react-types/shared": "^3.26.0" }, @@ -4757,7 +4704,6 @@ "version": "3.4.13", "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.13.tgz", "integrity": "sha512-KPekFC17RTT8kZlk7ZYubueZnfsGTDOpLw7itzolKOXGddTXsrJGBzSB4Bb060PBVllaDO0MOrhPap8OmrIl1Q==", - "license": "Apache-2.0", "dependencies": { "@react-types/overlays": "^3.8.11", "@react-types/shared": "^3.26.0" @@ -5322,17 +5268,15 @@ "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", - "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", "dev": true, - "license": "MIT", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -5340,13 +5284,13 @@ "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20" + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "node_modules/@tanstack/eslint-plugin-query": { - "version": "5.62.15", - "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.62.15.tgz", - "integrity": "sha512-24BHoF3LIzyptjrZXc1IpaISno+fhVD3zWWso/HPSB+ZVOyOXoiQSQc2K362T13JKJ07EInhHi1+KyNoRzCCfQ==", + "version": "5.62.16", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.62.16.tgz", + "integrity": "sha512-VhnHSQ/hc62olLzGhlLJ4BJGWynwjs3cDMsByasKJ3zjW1YZ+6raxOv0gHHISm+VEnAY42pkMowmSWrXfL4NTw==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^8.18.1" @@ -5360,20 +5304,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.62.12", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.12.tgz", - "integrity": "sha512-6igFeBgymHkCxVgaEk+yiLwkMf9haui/EQLmI3o9CatOyDThEoFKe8toLWvWliZC/Jf+h7NwHi/zjfyLArr1ow==", + "version": "5.62.16", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.16.tgz", + "integrity": "sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.62.12", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.62.12.tgz", - "integrity": "sha512-yt8p7l5MlHA3QCt6xF1Cu9dw1Anf93yTK+DMDJQ64h/mshAymVAtcwj8TpsyyBrZNWAAZvza/m76bnTSR79ZtQ==", + "version": "5.63.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.63.0.tgz", + "integrity": "sha512-QWizLzSiog8xqIRYmuJRok9VELlXVBAwtINgVCgW1SNvamQwWDO5R0XFSkjoBEj53x9Of1KAthLRBUC5xmtVLQ==", "dependencies": { - "@tanstack/query-core": "5.62.12" + "@tanstack/query-core": "5.62.16" }, "funding": { "type": "github", @@ -5383,11 +5327,26 @@ "react": "^18 || ^19" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz", + "integrity": "sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==", + "dependencies": { + "@tanstack/virtual-core": "3.11.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@tanstack/virtual-core": { - "version": "3.10.9", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz", - "integrity": "sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==", - "license": "MIT", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz", + "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -5594,16 +5553,14 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", - "license": "MIT" + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.14.tgz", + "integrity": "sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==" }, "node_modules/@types/lodash.debounce": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz", "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==", - "license": "MIT", "dependencies": { "@types/lodash": "*" } @@ -5633,10 +5590,9 @@ } }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", - "license": "MIT", + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.4.tgz", + "integrity": "sha512-3O4QisJDYr1uTUMZHA2YswiQZRq+Pd8D+GdVFYikTutYsTz+QZgWkAPnP7rx9txoI6EXKcPiluMqWPFV3tT9Wg==", "dependencies": { "csstype": "^3.0.2" } @@ -7312,7 +7268,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -7343,7 +7298,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -7352,8 +7306,7 @@ "node_modules/color2k": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", - "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==", - "license": "MIT" + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" }, "node_modules/colorette": { "version": "2.0.20", @@ -7442,8 +7395,7 @@ "node_modules/compute-scroll-into-view": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz", - "integrity": "sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==", - "license": "MIT" + "integrity": "sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==" }, "node_modules/concat-map": { "version": "0.0.1", @@ -7639,13 +7591,13 @@ } }, "node_modules/cssstyle": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", - "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz", + "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", "dev": true, - "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.7.1" + "@asamuzakjp/css-color": "^2.8.2", + "rrweb-cssom": "^0.8.0" }, "engines": { "node": ">=18" @@ -7807,7 +7759,6 @@ "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==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9314,7 +9265,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -9433,14 +9383,13 @@ } }, "node_modules/framer-motion": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.15.0.tgz", - "integrity": "sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==", - "license": "MIT", + "version": "11.16.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.16.1.tgz", + "integrity": "sha512-xsjhEUSWHn39g334PpBTH+QissgEJVJkpRGS/4QUyMSmoJSNxA+7FTuq61s+OXPMS4muu5k9Y6r7GpcNKhd1xA==", "peer": true, "dependencies": { - "motion-dom": "^11.14.3", - "motion-utils": "^11.14.3", + "motion-dom": "^11.16.1", + "motion-utils": "^11.16.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -10165,9 +10114,9 @@ } }, "node_modules/i18next": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.0.tgz", - "integrity": "sha512-ArJJTS1lV6lgKH7yEf4EpgNZ7+THl7bsGxxougPYiXRTJ/Fe1j08/TBpV9QsXCIYVfdE/HWG/xLezJ5DOlfBOA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.1.tgz", + "integrity": "sha512-Q2wC1TjWcSikn1VAJg13UGIjc+okpFxQTxjVAymOnSA3RpttBQNMPf2ovcgoFVsV4QNxTfNZMAxorXZXsk4fBA==", "funding": [ { "type": "individual", @@ -10182,7 +10131,6 @@ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], - "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" }, @@ -10310,7 +10258,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz", "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==", - "license": "MIT", "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" @@ -10332,14 +10279,13 @@ } }, "node_modules/intl-messageformat": { - "version": "10.7.10", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.10.tgz", - "integrity": "sha512-hp7iejCBiJdW3zmOe18FdlJu8U/JsADSDiBPQhfdSeI8B9POtvPRvPh3nMlvhYayGMKLv6maldhR7y3Pf1vkpw==", - "license": "BSD-3-Clause", + "version": "10.7.11", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.11.tgz", + "integrity": "sha512-IB2N1tmI24k2EFH3PWjU7ivJsnWyLwOWOva0jnXFa29WzB6fb0JZ5EMQGu+XN5lDtjHYFo0/UooP67zBwUg7rQ==", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.1", - "@formatjs/fast-memoize": "2.2.5", - "@formatjs/icu-messageformat-parser": "2.9.7", + "@formatjs/ecma402-abstract": "2.3.2", + "@formatjs/fast-memoize": "2.2.6", + "@formatjs/icu-messageformat-parser": "2.9.8", "tslib": "2" } }, @@ -10397,8 +10343,7 @@ "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-async-function": { "version": "2.0.0", @@ -10868,10 +10813,9 @@ "license": "MIT" }, "node_modules/isbot": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.19.tgz", - "integrity": "sha512-8krWJBGKC3lVymkncvmBTpIEWMD5kKmjAvkM3/Xh6veE0bAydwgSNrI5h493DGrG2UNJCy0HuHpNPSKRy0dBJA==", - "license": "Unlicense", + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.21.tgz", + "integrity": "sha512-0q3naRVpENL0ReKHeNcwn/G7BDynp0DqZUckKyFtM9+hmpnPqgm8+8wbjiVZ0XNhq1wPQV28/Pb8Snh5adeUHA==", "engines": { "node": ">=18" } @@ -11007,23 +10951,22 @@ } }, "node_modules/jsdom": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", - "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", + "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", "dev": true, - "license": "MIT", "dependencies": { - "cssstyle": "^4.1.0", + "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "form-data": "^4.0.0", + "form-data": "^4.0.1", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^5.0.0", @@ -11031,7 +10974,7 @@ "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", + "whatwg-url": "^14.1.0", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, @@ -11039,7 +10982,7 @@ "node": ">=18" }, "peerDependencies": { - "canvas": "^2.11.2" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -12764,17 +12707,18 @@ } }, "node_modules/motion-dom": { - "version": "11.14.3", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.14.3.tgz", - "integrity": "sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==", - "license": "MIT", - "peer": true + "version": "11.16.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.16.1.tgz", + "integrity": "sha512-XVNf3iCfZn9OHPZYJQy5YXXLn0NuPNvtT3YCat89oAnr4D88Cr52KqFgKa8dWElBK8uIoQhpJMJEG+dyniYycQ==", + "peer": true, + "dependencies": { + "motion-utils": "^11.16.0" + } }, "node_modules/motion-utils": { - "version": "11.14.3", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.14.3.tgz", - "integrity": "sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==", - "license": "MIT", + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.16.0.tgz", + "integrity": "sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw==", "peer": true }, "node_modules/mri": { @@ -13806,9 +13750,9 @@ "license": "MIT" }, "node_modules/posthog-js": { - "version": "1.203.3", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.203.3.tgz", - "integrity": "sha512-DTK6LfL87xC7PPleKDParEIfkXl7hXtuDeSOPfhcyCXLuVspq0z7YyRB5dQE9Pbalf3yoGqUKvomYFp/BGVfQg==", + "version": "1.205.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.205.0.tgz", + "integrity": "sha512-zP4SQ9Dg9JwqkEteoAOviAAAMdT/nJ4vk1jqfE6fVudziEa3szkQWd7czk5ehlEdrKFUE85MonCKW4L/uwtybA==", "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", @@ -14194,10 +14138,9 @@ "peer": true }, "node_modules/react-markdown": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", - "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", - "license": "MIT", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.3.tgz", + "integrity": "sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==", "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", @@ -14838,11 +14781,10 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true }, "node_modules/run-parallel": { "version": "1.2.0", @@ -14997,7 +14939,6 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz", "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==", - "license": "MIT", "dependencies": { "compute-scroll-into-view": "^3.0.2" } @@ -15249,7 +15190,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -15958,7 +15898,6 @@ "version": "0.1.20", "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.20.tgz", "integrity": "sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==", - "license": "MIT", "dependencies": { "tailwind-merge": "^1.14.0" }, @@ -15974,7 +15913,6 @@ "version": "1.14.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -16516,11 +16454,10 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "devOptional": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/frontend/package.json b/frontend/package.json index 3ec394b82fc82..e2ec2aea442eb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "openhands-frontend", - "version": "0.18.0", + "version": "0.19.0", "private": true, "type": "module", "engines": { @@ -8,32 +8,32 @@ }, "dependencies": { "@monaco-editor/react": "^4.7.0-rc.0", - "@nextui-org/react": "^2.6.10", + "@nextui-org/react": "^2.6.11", "@react-router/node": "^7.1.1", "@react-router/serve": "^7.1.1", "@react-types/shared": "^3.25.0", "@reduxjs/toolkit": "^2.5.0", - "@tanstack/react-query": "^5.62.12", + "@tanstack/react-query": "^5.63.0", "@vitejs/plugin-react": "^4.3.2", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.4.0", "axios": "^1.7.9", "clsx": "^2.1.1", "eslint-config-airbnb-typescript": "^18.0.0", - "i18next": "^24.2.0", + "i18next": "^24.2.1", "i18next-browser-languagedetector": "^8.0.2", "i18next-http-backend": "^3.0.1", - "isbot": "^5.1.19", + "isbot": "^5.1.21", "jose": "^5.9.4", "monaco-editor": "^0.52.2", - "posthog-js": "^1.203.3", + "posthog-js": "^1.205.0", "react": "^19.0.0", "react-dom": "^19.0.0", "react-highlight": "^0.15.0", "react-hot-toast": "^2.5.1", "react-i18next": "^15.4.0", "react-icons": "^5.4.0", - "react-markdown": "^9.0.1", + "react-markdown": "^9.0.3", "react-redux": "^9.2.0", "react-router": "^7.1.1", "react-syntax-highlighter": "^15.6.1", @@ -78,13 +78,14 @@ "@mswjs/socket.io-binding": "^0.1.1", "@playwright/test": "^1.49.1", "@react-router/dev": "^7.1.1", - "@tailwindcss/typography": "^0.5.15", - "@tanstack/eslint-plugin-query": "^5.62.15", - "@testing-library/jest-dom": "^6.6.3", +<<<<<<< HEAD + "@tailwindcss/typography": "^0.5.16", + "@tanstack/eslint-plugin-query": "^5.62.16", + "@testing-library/jest-dom": "^6.6.1", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/node": "^22.10.5", - "@types/react": "^19.0.2", + "@types/react": "^19.0.4", "@types/react-dom": "^19.0.2", "@types/react-highlight": "^0.12.8", "@types/react-syntax-highlighter": "^15.5.13", @@ -103,14 +104,15 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^4.6.2", - "husky": "^9.1.7", - "jsdom": "^25.0.1", +<<<<<<< HEAD + "husky": "^9.1.6", + "jsdom": "^26.0.0", "lint-staged": "^15.3.0", "msw": "^2.6.6", "postcss": "^8.4.47", "prettier": "^3.4.2", "tailwindcss": "^3.4.17", - "typescript": "^5.7.2", + "typescript": "^5.7.3", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^1.6.0" diff --git a/frontend/src/api/open-hands.types.ts b/frontend/src/api/open-hands.types.ts index 263bfb7811628..169de47afb395 100644 --- a/frontend/src/api/open-hands.types.ts +++ b/frontend/src/api/open-hands.types.ts @@ -65,6 +65,7 @@ export interface Conversation { title: string; selected_repository: string | null; last_updated_at: string; + created_at: string; status: ProjectStatus; } diff --git a/frontend/src/components/features/context-menu/account-settings-context-menu.tsx b/frontend/src/components/features/context-menu/account-settings-context-menu.tsx index bf695cbc6ba79..92a3359e83c97 100644 --- a/frontend/src/components/features/context-menu/account-settings-context-menu.tsx +++ b/frontend/src/components/features/context-menu/account-settings-context-menu.tsx @@ -27,7 +27,10 @@ export function AccountSettingsContextMenu({ ref={ref} className="absolute left-full -top-1 z-10" > - + {t(I18nKey.ACCOUNT_SETTINGS$SETTINGS)} diff --git a/frontend/src/components/features/controls/controls.tsx b/frontend/src/components/features/controls/controls.tsx index 994a5f5101dbe..0984dae1e9bd5 100644 --- a/frontend/src/components/features/controls/controls.tsx +++ b/frontend/src/components/features/controls/controls.tsx @@ -1,39 +1,30 @@ +import { useParams } from "react-router"; import React from "react"; -import { useSelector } from "react-redux"; +import posthog from "posthog-js"; import { AgentControlBar } from "./agent-control-bar"; import { AgentStatusBar } from "./agent-status-bar"; -import { ProjectMenuCard } from "../project-menu/ProjectMenuCard"; -import { useAuth } from "#/context/auth-context"; -import { RootState } from "#/store"; import { SecurityLock } from "./security-lock"; +import { useUserConversation } from "#/hooks/query/use-user-conversation"; +import { ConversationCard } from "../conversation-panel/conversation-card"; +import { DownloadModal } from "#/components/shared/download-modal"; interface ControlsProps { setSecurityOpen: (isOpen: boolean) => void; showSecurityLock: boolean; - lastCommitData: GitHubCommit | null; } -export function Controls({ - setSecurityOpen, - showSecurityLock, - lastCommitData, -}: ControlsProps) { - const { gitHubToken } = useAuth(); - const { selectedRepository } = useSelector( - (state: RootState) => state.initialQuery, +export function Controls({ setSecurityOpen, showSecurityLock }: ControlsProps) { + const params = useParams(); + const { data: conversation } = useUserConversation( + params.conversationId ?? null, ); - const projectMenuCardData = React.useMemo( - () => - selectedRepository && lastCommitData - ? { - repoName: selectedRepository, - lastCommit: lastCommitData, - avatar: null, // TODO: fetch repo avatar - } - : null, - [selectedRepository, lastCommitData], - ); + const [downloading, setDownloading] = React.useState(false); + + const handleDownloadWorkspace = () => { + posthog.capture("download_workspace_button_clicked"); + setDownloading(true); + }; return (
@@ -46,9 +37,19 @@ export function Controls({ )}
- + + setDownloading(false)} + isOpen={downloading} /> ); diff --git a/frontend/src/components/features/conversation-panel/confirm-delete-modal.tsx b/frontend/src/components/features/conversation-panel/confirm-delete-modal.tsx index 2316ca1de7d34..4dd7c183be09d 100644 --- a/frontend/src/components/features/conversation-panel/confirm-delete-modal.tsx +++ b/frontend/src/components/features/conversation-panel/confirm-delete-modal.tsx @@ -25,10 +25,14 @@ export function ConfirmDeleteModal({
- +
diff --git a/frontend/src/components/features/conversation-panel/conversation-card-context-menu.tsx b/frontend/src/components/features/conversation-panel/conversation-card-context-menu.tsx new file mode 100644 index 0000000000000..33088c72f34df --- /dev/null +++ b/frontend/src/components/features/conversation-panel/conversation-card-context-menu.tsx @@ -0,0 +1,50 @@ +import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; +import { cn } from "#/utils/utils"; +import { ContextMenu } from "../context-menu/context-menu"; +import { ContextMenuListItem } from "../context-menu/context-menu-list-item"; + +interface ConversationCardContextMenuProps { + onClose: () => void; + onDelete?: (event: React.MouseEvent) => void; + onEdit?: (event: React.MouseEvent) => void; + onDownload?: (event: React.MouseEvent) => void; + position?: "top" | "bottom"; +} + +export function ConversationCardContextMenu({ + onClose, + onDelete, + onEdit, + onDownload, + position = "bottom", +}: ConversationCardContextMenuProps) { + const ref = useClickOutsideElement(onClose); + + return ( + + {onDelete && ( + + Delete + + )} + {onEdit && ( + + Edit Title + + )} + {onDownload && ( + + Download Workspace + + )} + + ); +} diff --git a/frontend/src/components/features/conversation-panel/conversation-card.tsx b/frontend/src/components/features/conversation-panel/conversation-card.tsx index c10e90f005ba2..a178ce13d0249 100644 --- a/frontend/src/components/features/conversation-panel/conversation-card.tsx +++ b/frontend/src/components/features/conversation-panel/conversation-card.tsx @@ -5,41 +5,50 @@ import { ProjectStatus, ConversationStateIndicator, } from "./conversation-state-indicator"; -import { ContextMenu } from "../context-menu/context-menu"; -import { ContextMenuListItem } from "../context-menu/context-menu-list-item"; import { EllipsisButton } from "./ellipsis-button"; +import { ConversationCardContextMenu } from "./conversation-card-context-menu"; +import { cn } from "#/utils/utils"; -interface ProjectCardProps { - onClick: () => void; - onDelete: () => void; - onChangeTitle: (title: string) => void; +interface ConversationCardProps { + onClick?: () => void; + onDelete?: () => void; + onChangeTitle?: (title: string) => void; + onDownloadWorkspace?: () => void; + isActive?: boolean; title: string; selectedRepository: string | null; lastUpdatedAt: string; // ISO 8601 status?: ProjectStatus; + variant?: "compact" | "default"; } export function ConversationCard({ onClick, onDelete, onChangeTitle, + onDownloadWorkspace, + isActive, title, selectedRepository, lastUpdatedAt, status = "STOPPED", -}: ProjectCardProps) { + variant = "default", +}: ConversationCardProps) { const [contextMenuVisible, setContextMenuVisible] = React.useState(false); + const [titleMode, setTitleMode] = React.useState<"view" | "edit">("view"); const inputRef = React.useRef(null); const handleBlur = () => { if (inputRef.current?.value) { const trimmed = inputRef.current.value.trim(); - onChangeTitle(trimmed); + onChangeTitle?.(trimmed); inputRef.current!.value = trimmed; } else { // reset the value if it's empty inputRef.current!.value = title; } + + setTitleMode("view"); }; const handleKeyUp = (event: React.KeyboardEvent) => { @@ -49,58 +58,100 @@ export function ConversationCard({ }; const handleInputClick = (event: React.MouseEvent) => { + event.preventDefault(); event.stopPropagation(); }; const handleDelete = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + onDelete?.(); + }; + + const handleEdit = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + setTitleMode("edit"); + setContextMenuVisible(false); + }; + + const handleDownload = (event: React.MouseEvent) => { event.stopPropagation(); - onDelete(); + onDownloadWorkspace?.(); }; + React.useEffect(() => { + if (titleMode === "edit") { + inputRef.current?.focus(); + } + }, [titleMode]); + + const hasContextMenu = !!(onDelete || onChangeTitle || onDownloadWorkspace); + return (
-
- +
+
+ {isActive && } + +
- { - event.stopPropagation(); - setContextMenuVisible((prev) => !prev); - }} - /> + {hasContextMenu && ( + { + event.preventDefault(); + event.stopPropagation(); + setContextMenuVisible((prev) => !prev); + }} + /> + )} + {contextMenuVisible && ( + setContextMenuVisible(false)} + onDelete={onDelete && handleDelete} + onEdit={onChangeTitle && handleEdit} + onDownload={onDownloadWorkspace && handleDownload} + position={variant === "compact" ? "top" : "bottom"} + /> + )}
- {contextMenuVisible && ( - - - Delete - - - )} - {selectedRepository && ( - e.stopPropagation()} - /> - )} -

- -

+ +
+ {selectedRepository && ( + e.stopPropagation()} + /> + )} +

+ +

+
); } diff --git a/frontend/src/components/features/conversation-panel/conversation-panel-wrapper.tsx b/frontend/src/components/features/conversation-panel/conversation-panel-wrapper.tsx new file mode 100644 index 0000000000000..0e11e6a3256d9 --- /dev/null +++ b/frontend/src/components/features/conversation-panel/conversation-panel-wrapper.tsx @@ -0,0 +1,22 @@ +import ReactDOM from "react-dom"; + +interface ConversationPanelWrapperProps { + isOpen: boolean; +} + +export function ConversationPanelWrapper({ + isOpen, + children, +}: React.PropsWithChildren) { + if (!isOpen) return null; + + const portalTarget = document.getElementById("root-outlet"); + if (!portalTarget) return null; + + return ReactDOM.createPortal( +
+ {children} +
, + portalTarget, + ); +} diff --git a/frontend/src/components/features/conversation-panel/conversation-panel.tsx b/frontend/src/components/features/conversation-panel/conversation-panel.tsx index a7c9ebd54d123..a96c649a54d8a 100644 --- a/frontend/src/components/features/conversation-panel/conversation-panel.tsx +++ b/frontend/src/components/features/conversation-panel/conversation-panel.tsx @@ -1,16 +1,16 @@ import React from "react"; -import { useLocation, useNavigate, useParams } from "react-router"; +import { NavLink, useParams } from "react-router"; import { useTranslation } from "react-i18next"; import { I18nKey } from "#/i18n/declaration"; import { ConversationCard } from "./conversation-card"; import { useUserConversations } from "#/hooks/query/use-user-conversations"; import { useDeleteConversation } from "#/hooks/mutation/use-delete-conversation"; import { ConfirmDeleteModal } from "./confirm-delete-modal"; -import { NewConversationButton } from "./new-conversation-button"; import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { useUpdateConversation } from "#/hooks/mutation/use-update-conversation"; import { useEndSession } from "#/hooks/use-end-session"; import { ExitConversationModal } from "./exit-conversation-modal"; +import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; interface ConversationPanelProps { onClose: () => void; @@ -19,10 +19,8 @@ interface ConversationPanelProps { export function ConversationPanel({ onClose }: ConversationPanelProps) { const { t } = useTranslation(); const { conversationId: cid } = useParams(); - const navigate = useNavigate(); - const location = useLocation(); - const endSession = useEndSession(); + const ref = useClickOutsideElement(onClose); const [confirmDeleteModalVisible, setConfirmDeleteModalVisible] = React.useState(false); @@ -67,22 +65,13 @@ export function ConversationPanel({ onClose }: ConversationPanelProps) { }); }; - const handleClickCard = (conversationId: string) => { - navigate(`/conversations/${conversationId}`); - onClose(); - }; - return (
- {location.pathname.startsWith("/conversation") && ( - setConfirmExitConversationModalVisible(true)} - /> - )} {isFetching && }
{error && ( @@ -98,18 +87,25 @@ export function ConversationPanel({ onClose }: ConversationPanelProps) {
)} {conversations?.map((project) => ( - handleClickCard(project.conversation_id)} - onDelete={() => handleDeleteProject(project.conversation_id)} - onChangeTitle={(title) => - handleChangeTitle(project.conversation_id, project.title, title) - } - title={project.title} - selectedRepository={project.selected_repository} - lastUpdatedAt={project.last_updated_at} - status={project.status} - /> + to={`/conversations/${project.conversation_id}`} + onClick={onClose} + > + {({ isActive }) => ( + handleDeleteProject(project.conversation_id)} + onChangeTitle={(title) => + handleChangeTitle(project.conversation_id, project.title, title) + } + title={project.title} + selectedRepository={project.selected_repository} + lastUpdatedAt={project.last_updated_at} + status={project.status} + /> + )} + ))} {confirmDeleteModalVisible && ( diff --git a/frontend/src/components/features/project-menu/ProjectMenuCard.tsx b/frontend/src/components/features/project-menu/ProjectMenuCard.tsx deleted file mode 100644 index bebf4a5ae921c..0000000000000 --- a/frontend/src/components/features/project-menu/ProjectMenuCard.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from "react"; -import posthog from "posthog-js"; -import { useTranslation } from "react-i18next"; -import EllipsisH from "#/icons/ellipsis-h.svg?react"; -import { ProjectMenuCardContextMenu } from "./project.menu-card-context-menu"; -import { ProjectMenuDetailsPlaceholder } from "./project-menu-details-placeholder"; -import { ProjectMenuDetails } from "./project-menu-details"; -import { ConnectToGitHubModal } from "#/components/shared/modals/connect-to-github-modal"; -import { ModalBackdrop } from "#/components/shared/modals/modal-backdrop"; -import { DownloadModal } from "#/components/shared/download-modal"; -import { I18nKey } from "#/i18n/declaration"; - -interface ProjectMenuCardProps { - isConnectedToGitHub: boolean; - githubData: { - avatar: string | null; - repoName: string; - lastCommit: GitHubCommit; - } | null; -} - -export function ProjectMenuCard({ - isConnectedToGitHub, - githubData, -}: ProjectMenuCardProps) { - const { t } = useTranslation(); - - const [contextMenuIsOpen, setContextMenuIsOpen] = React.useState(false); - const [connectToGitHubModalOpen, setConnectToGitHubModalOpen] = - React.useState(false); - const [downloading, setDownloading] = React.useState(false); - - const toggleMenuVisibility = () => { - setContextMenuIsOpen((prev) => !prev); - }; - - const handleDownloadWorkspace = () => { - posthog.capture("download_workspace_button_clicked"); - setDownloading(true); - }; - - const handleDownloadClose = () => { - setDownloading(false); - }; - - return ( -
- {!downloading && contextMenuIsOpen && ( - setConnectToGitHubModalOpen(true)} - onDownloadWorkspace={handleDownloadWorkspace} - onClose={() => setContextMenuIsOpen(false)} - /> - )} - {githubData && ( - - )} - {!githubData && ( - setConnectToGitHubModalOpen(true)} - /> - )} - - {!downloading && ( - - )} - {connectToGitHubModalOpen && ( - setConnectToGitHubModalOpen(false)}> - setConnectToGitHubModalOpen(false)} - /> - - )} -
- ); -} diff --git a/frontend/src/components/features/project-menu/project-menu-details-placeholder.tsx b/frontend/src/components/features/project-menu/project-menu-details-placeholder.tsx deleted file mode 100644 index 47a6a381809c4..0000000000000 --- a/frontend/src/components/features/project-menu/project-menu-details-placeholder.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { cn } from "#/utils/utils"; -import CloudConnection from "#/icons/cloud-connection.svg?react"; -import { I18nKey } from "#/i18n/declaration"; - -interface ProjectMenuDetailsPlaceholderProps { - isConnectedToGitHub: boolean; - onConnectToGitHub: () => void; -} - -export function ProjectMenuDetailsPlaceholder({ - isConnectedToGitHub, - onConnectToGitHub, -}: ProjectMenuDetailsPlaceholderProps) { - const { t } = useTranslation(); - - return ( -
- - {t(I18nKey.PROJECT_MENU_DETAILS_PLACEHOLDER$NEW_PROJECT_LABEL)} - - -
- ); -} diff --git a/frontend/src/components/features/project-menu/project-menu-details.tsx b/frontend/src/components/features/project-menu/project-menu-details.tsx deleted file mode 100644 index 8bb67a2ec8ba7..0000000000000 --- a/frontend/src/components/features/project-menu/project-menu-details.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useTranslation } from "react-i18next"; -import ExternalLinkIcon from "#/icons/external-link.svg?react"; -import { formatTimeDelta } from "#/utils/format-time-delta"; -import { I18nKey } from "#/i18n/declaration"; - -interface ProjectMenuDetailsProps { - repoName: string; - avatar: string | null; - lastCommit: GitHubCommit; -} - -export function ProjectMenuDetails({ - repoName, - avatar, - lastCommit, -}: ProjectMenuDetailsProps) { - const { t } = useTranslation(); - return ( - - ); -} diff --git a/frontend/src/components/features/project-menu/project.menu-card-context-menu.tsx b/frontend/src/components/features/project-menu/project.menu-card-context-menu.tsx deleted file mode 100644 index d476ffdaf9320..0000000000000 --- a/frontend/src/components/features/project-menu/project.menu-card-context-menu.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; -import { ContextMenu } from "../context-menu/context-menu"; -import { ContextMenuListItem } from "../context-menu/context-menu-list-item"; -import { I18nKey } from "#/i18n/declaration"; - -interface ProjectMenuCardContextMenuProps { - isConnectedToGitHub: boolean; - onConnectToGitHub: () => void; - onDownloadWorkspace: () => void; - onClose: () => void; -} - -export function ProjectMenuCardContextMenu({ - isConnectedToGitHub, - onConnectToGitHub, - onDownloadWorkspace, - onClose, -}: ProjectMenuCardContextMenuProps) { - const menuRef = useClickOutsideElement(onClose); - const { t } = useTranslation(); - return ( - - {!isConnectedToGitHub && ( - - {t(I18nKey.PROJECT_MENU_CARD_CONTEXT_MENU$CONNECT_TO_GITHUB_LABEL)} - - )} - - {t(I18nKey.PROJECT_MENU_CARD_CONTEXT_MENU$DOWNLOAD_FILES_LABEL)} - - - ); -} diff --git a/frontend/src/components/features/served-host/path-form.tsx b/frontend/src/components/features/served-host/path-form.tsx new file mode 100644 index 0000000000000..daec8b7c7ef61 --- /dev/null +++ b/frontend/src/components/features/served-host/path-form.tsx @@ -0,0 +1,19 @@ +interface PathFormProps { + ref: React.RefObject; + onBlur: () => void; + defaultValue: string; +} + +export function PathForm({ ref, onBlur, defaultValue }: PathFormProps) { + return ( +
e.preventDefault()} className="flex-1"> + +
+ ); +} diff --git a/frontend/src/components/features/sidebar/sidebar.tsx b/frontend/src/components/features/sidebar/sidebar.tsx index 1123756504872..cee990f9e9635 100644 --- a/frontend/src/components/features/sidebar/sidebar.tsx +++ b/frontend/src/components/features/sidebar/sidebar.tsx @@ -1,6 +1,6 @@ import React from "react"; -import { useLocation } from "react-router"; import { FaListUl } from "react-icons/fa"; +import { useDispatch } from "react-redux"; import { useAuth } from "#/context/auth-context"; import { useGitHubUser } from "#/hooks/query/use-github-user"; import { useIsAuthed } from "#/hooks/query/use-is-authed"; @@ -11,38 +11,37 @@ import { ExitProjectButton } from "#/components/shared/buttons/exit-project-butt import { SettingsButton } from "#/components/shared/buttons/settings-button"; import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { AccountSettingsModal } from "#/components/shared/modals/account-settings/account-settings-modal"; -import { ExitProjectConfirmationModal } from "#/components/shared/modals/exit-project-confirmation-modal"; import { SettingsModal } from "#/components/shared/modals/settings/settings-modal"; -import { useSettingsUpToDate } from "#/context/settings-up-to-date-context"; +import { useCurrentSettings } from "#/context/settings-context"; import { useSettings } from "#/hooks/query/use-settings"; import { ConversationPanel } from "../conversation-panel/conversation-panel"; import { MULTI_CONVERSATION_UI } from "#/utils/feature-flags"; +import { useEndSession } from "#/hooks/use-end-session"; +import { setCurrentAgentState } from "#/state/agent-slice"; +import { AgentState } from "#/types/agent-state"; +import { TooltipButton } from "#/components/shared/buttons/tooltip-button"; +import { ConversationPanelWrapper } from "../conversation-panel/conversation-panel-wrapper"; export function Sidebar() { - const location = useLocation(); + const dispatch = useDispatch(); + const endSession = useEndSession(); const user = useGitHubUser(); const { data: isAuthed } = useIsAuthed(); const { logout } = useAuth(); - const { data: settings, isError: settingsIsError } = useSettings(); - const { isUpToDate: settingsAreUpToDate } = useSettingsUpToDate(); + const { + data: settings, + isError: settingsIsError, + isSuccess: settingsSuccessfulyFetched, + } = useSettings(); + + const { isUpToDate: settingsAreUpToDate } = useCurrentSettings(); const [accountSettingsModalOpen, setAccountSettingsModalOpen] = React.useState(false); const [settingsModalIsOpen, setSettingsModalIsOpen] = React.useState(false); - const [startNewProjectModalIsOpen, setStartNewProjectModalIsOpen] = - React.useState(false); + const [conversationPanelIsOpen, setConversationPanelIsOpen] = React.useState(false); - const conversationPanelRef = React.useRef(null); - - const handleClick = (event: MouseEvent) => { - const conversationPanel = conversationPanelRef.current; - if (conversationPanelIsOpen && conversationPanel) { - if (!conversationPanel.contains(event.target as Node)) { - setConversationPanelIsOpen(false); - } - } - }; React.useEffect(() => { // If the github token is invalid, open the account settings modal again @@ -51,12 +50,10 @@ export function Sidebar() { } }, [user.isError]); - React.useEffect(() => { - document.addEventListener("click", handleClick); - return () => { - document.removeEventListener("click", handleClick); - }; - }, [conversationPanelIsOpen]); + const handleEndSession = () => { + dispatch(setCurrentAgentState(AgentState.LOADING)); + endSession(); + }; const handleAccountSettingsModalClose = () => { // If the user closes the modal without connecting to GitHub, @@ -66,22 +63,30 @@ export function Sidebar() { setAccountSettingsModalOpen(false); }; - const handleClickLogo = () => { - if (location.pathname.startsWith("/conversations/")) - setStartNewProjectModalIsOpen(true); - }; - const showSettingsModal = isAuthed && (!settingsAreUpToDate || settingsModalIsOpen); return ( <> -