diff --git a/.env.example b/.env.example
deleted file mode 100644
index ca9ba6e9..00000000
--- a/.env.example
+++ /dev/null
@@ -1,2 +0,0 @@
-# see process.d.ts
-OPENAI_API_KEY=YOUR_OPENAI_API_KEY
diff --git a/.env.nodb b/.env.nodb
new file mode 100644
index 00000000..9223a87a
--- /dev/null
+++ b/.env.nodb
@@ -0,0 +1,3 @@
+# see process.d.ts
+OPENAI_API_KEY=xxx
+NEXT_PUBLIC_USE_DATABASE=false
\ No newline at end of file
diff --git a/.env.usedb b/.env.usedb
new file mode 100644
index 00000000..37735cdf
--- /dev/null
+++ b/.env.usedb
@@ -0,0 +1,5 @@
+# see process.d.ts
+OPENAI_API_KEY=xxx
+NEXT_PUBLIC_USE_DATABASE=true
+DATABASE_URL="postgresql://postgres:postgres@localhost:5432/sqlchat?schema=sqlchat&application_name=sqlchat"
+DATABASE_DIRECT_URL="postgresql://postgres:postgres@localhost:5432/sqlchat?schema=sqlchat&application_name=sqlchat"
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
index eaeae599..d08b99f5 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,5 +1,5 @@
{
- "extends": "next/core-web-vitals",
+ "extends": ["next/core-web-vitals", "plugin:prettier/recommended"],
"rules": {
"import/no-anonymous-default-export": "off",
"@next/next/no-img-element": "off",
diff --git a/.github/workflows/build-and-push-dev-ci-image.yml b/.github/workflows/build-and-push-dev-ci-image.yml
deleted file mode 100644
index bc1aa9c5..00000000
--- a/.github/workflows/build-and-push-dev-ci-image.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: build-and-push-dev-ci-image
-
-on:
- push:
- branches: [main]
-
-jobs:
- build-and-push-dev-ci-image:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v2
-
- - name: Login to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- - name: Set up Docker Buildx
- id: buildx
- uses: docker/setup-buildx-action@v2
- with:
- install: true
- version: v0.9.1
-
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v4
- with:
- images: |
- sqlchat/sqlchat
- flavor: |
- latest=false
- tags: |
- type=raw,value=dev-ci
-
- - name: Build and Push
- id: docker_build
- uses: docker/build-push-action@v3
- with:
- context: ./
- file: ./Dockerfile
- platforms: linux/amd64
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
diff --git a/.github/workflows/build-and-push-latest-image.yml b/.github/workflows/build-and-push-latest-image.yml
new file mode 100644
index 00000000..a20d9371
--- /dev/null
+++ b/.github/workflows/build-and-push-latest-image.yml
@@ -0,0 +1,88 @@
+name: build-and-push-latest-image
+
+on:
+ push:
+ branches: [main]
+
+jobs:
+ build-and-push-latest-image:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v2
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Set up Docker Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v2
+ with:
+ install: true
+ version: v0.9.1
+
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v4
+ with:
+ images: |
+ sqlchat/sqlchat
+ flavor: |
+ latest=false
+ tags: |
+ type=raw,value=latest
+
+ - name: Build and Push
+ id: docker_build
+ uses: docker/build-push-action@v3
+ with:
+ context: ./
+ file: ./Dockerfile
+ platforms: linux/amd64
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+
+ - name: Docker meta for website
+ id: meta-website
+ uses: docker/metadata-action@v4
+ with:
+ images: |
+ sqlchat/sqlchat
+ flavor: |
+ latest=false
+ tags: |
+ type=raw,value=website-latest
+
+ - name: Build and Push Website Image
+ id: docker_build_website
+ uses: docker/build-push-action@v3
+ with:
+ context: ./
+ file: ./Dockerfile.sqlchat-ai
+ platforms: linux/amd64
+ push: true
+ tags: ${{ steps.meta-website.outputs.tags }}
+ labels: ${{ steps.meta-website.outputs.labels }}
+
+ - name: Authenticate to Google Cloud
+ uses: google-github-actions/auth@v1
+ with:
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
+
+ - name: Get GKE credentials
+ uses: google-github-actions/get-gke-credentials@v1
+ with:
+ cluster_name: ${{ secrets.GKE_CLUSTER_NAME }}
+ location: ${{ secrets.GKE_CLUSTER_LOCATION }}
+
+ - name: Restart deployment
+ run: kubectl rollout restart deployment/sqlchat --namespace website
diff --git a/.github/workflows/build-and-push-release-image.yml b/.github/workflows/build-and-push-release-image.yml
deleted file mode 100644
index 5fa5e3d0..00000000
--- a/.github/workflows/build-and-push-release-image.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: build-and-push-release-image
-
-on:
- push:
- branches: [release]
-
-jobs:
- build-and-push-release-image:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - uses: actions/checkout@v3
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v2
-
- - name: Login to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- - name: Set up Docker Buildx
- id: buildx
- uses: docker/setup-buildx-action@v2
- with:
- install: true
- version: v0.9.1
-
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v4
- with:
- images: |
- sqlchat/sqlchat
- flavor: |
- latest=false
- tags: |
- type=raw,value=latest
-
- - name: Build and Push
- id: docker_build
- uses: docker/build-push-action@v3
- with:
- context: ./
- file: ./Dockerfile
- platforms: linux/amd64
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml
new file mode 100644
index 00000000..e8e8b28e
--- /dev/null
+++ b/.github/workflows/pr-checks.yml
@@ -0,0 +1,28 @@
+name: PR Checks
+
+on:
+ pull_request:
+ branches: [main]
+
+jobs:
+ lint-and-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18
+
+ - name: Install pnpm
+ run: npm install -g pnpm
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Run lint
+ run: pnpm lint
+
+ - name: Run build
+ run: pnpm build
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..2af2c51a
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "printWidth": 140,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false
+}
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 00000000..a0f996fa
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,23 @@
+# SQL Chat - Development Guide
+
+## Build/Run Commands
+- Development: `pnpm dev` (or `pnpm nodb` without DB, `pnpm usedb` with DB)
+- Build: `pnpm build`
+- Production: `pnpm start`
+- Lint: `pnpm lint`
+- Database: `pnpm prisma migrate dev` (setup), `pnpm prisma db seed` (seed)
+
+## Code Style Guidelines
+- **Formatting**: 140 char width, double quotes, semicolons (Prettier)
+- **TypeScript**: Strict types, interfaces for structure, generics when appropriate
+- **Components**: Functional components with hooks, PascalCase naming
+- **Imports**: External libs first, followed by internal modules with @/ alias
+- **Naming**: PascalCase for components/interfaces, camelCase for variables/functions
+- **Functions**: Descriptive verb-noun naming (handleClick, fetchData)
+- **Error Handling**: try/catch blocks with toast notifications for user-facing errors
+- **File Structure**: Feature-based organization in /components, /types, /store
+
+## State Management
+- Zustand for global state
+- React hooks for component state
+- TypeScript types for state shape
\ No newline at end of file
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 00000000..58e2ffb2
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1,2 @@
+# Default
+* @tianzhou @boojack
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index c1627366..ed910424 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,7 +3,7 @@ FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
-RUN apk add --no-cache libc6-compat
+RUN apk add --no-cache libc6-compat openssl openssl-dev
WORKDIR /app
COPY package.json pnpm-lock.yaml* ./
@@ -23,6 +23,9 @@ WORKDIR /app
ENV NODE_ENV production
+# Install OpenSSL for Prisma in production
+RUN apk add --no-cache openssl
+
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
diff --git a/Dockerfile.sqlchat-ai b/Dockerfile.sqlchat-ai
new file mode 100644
index 00000000..dd7bc61d
--- /dev/null
+++ b/Dockerfile.sqlchat-ai
@@ -0,0 +1,52 @@
+# This is the dockerfile to run www.sqlchat.ai, in particular it injects the NEXT_PUBLIC_ vars at
+# BUILD time
+FROM node:18-alpine AS base
+
+# Install dependencies only when needed
+FROM base AS deps
+# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
+RUN apk add --no-cache libc6-compat
+WORKDIR /app
+
+COPY package.json pnpm-lock.yaml* ./
+RUN yarn global add pnpm && pnpm i --frozen-lockfile
+
+# Rebuild the source code only when needed
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+# Need to inject NEXT_PUBLIC at build time
+# https://github.com/vercel/next.js/issues/51575
+ENV NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_MONTH_SUBSCRIPTION price_1O2clpAeLQYhEB73FPWr7JjV
+ENV NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_3_MONTH_SUBSCRIPTION price_1NAE2hAeLQYhEB73FoF8WJPS
+ENV NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_YEAR_SUBSCRIPTION price_1N96riAeLQYhEB73YPSL8GuV
+ENV NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY pk_live_JoPlkGsFcm2iHvy5a4JR5tia00vVXVJM8d
+ENV NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY true
+
+RUN yarn run build
+
+# Production image, copy all the files and run next
+FROM base AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+
+RUN addgroup --system --gid 1001 nodejs
+RUN adduser --system --uid 1001 nextjs
+
+COPY --from=builder /app/public ./public
+
+# Automatically leverage output traces to reduce image size
+# https://nextjs.org/docs/advanced-features/output-file-tracing
+COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
+COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
+
+USER nextjs
+
+EXPOSE 3000
+
+ENV PORT 3000
+
+CMD ["node", "server.js"]
diff --git a/LICENSE b/LICENSE
index 64a1f8e6..e96e9ea1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,68 +1,21 @@
-Business Source License 1.1
-
-Terms
-
-The Licensor hereby grants you the right to copy, modify, create derivative
-works, redistribute, and make non-production use of the Licensed Work. The
-Licensor may make an Additional Use Grant, above, permitting limited
-production use.
-
-Effective on the Change Date, or the fourth anniversary of the first publicly
-available distribution of a specific version of the Licensed Work under this
-License, whichever comes first, the Licensor hereby grants you rights under
-the terms of the Change License, and the rights granted in the paragraph
-above terminate.
-
-If your use of the Licensed Work does not comply with the requirements
-currently in effect as described in this License, you must purchase a
-commercial license from the Licensor, its affiliated entities, or authorized
-resellers, or you must refrain from using the Licensed Work.
-
-All copies of the original and modified Licensed Work, and derivative works
-of the Licensed Work, are subject to this License. This License applies
-separately for each version of the Licensed Work and the Change Date may vary
-for each version of the Licensed Work released by Licensor.
-
-You must conspicuously display this License on each original or modified copy
-of the Licensed Work. If you receive the Licensed Work in original or
-modified form from a third party, the terms and conditions set forth in this
-License apply to your use of that work.
-
-Any use of the Licensed Work in violation of this License will automatically
-terminate your rights under this License for the current and all other
-versions of the Licensed Work.
-
-This License does not grant you any right in any trademark or logo of
-Licensor or its affiliates (provided that you may use a trademark or logo of
-Licensor as expressly required by this License).
-
-TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
-AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
-EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
-TITLE.
-
-MariaDB hereby grants you permission to use this License’s text to license
-your works, and to refer to it using the trademark “Business Source License”,
-as long as you comply with the Covenants of Licensor below.
-
-Covenants of Licensor
-
-In consideration of the right to use this License’s text and the “Business
-Source License” name and trademark, Licensor covenants to MariaDB, and to all
-other recipients of the licensed work to be provided by Licensor:
-
-1. To specify as the Change License the GPL Version 2.0 or any later version,
- or a license that is compatible with GPL Version 2.0 or a later version,
- where “compatible” means that software provided under the Change License can
- be included in a program with software provided under GPL Version 2.0 or a
- later version. Licensor may specify additional Change Licenses without
- limitation.
-
-2. To either: (a) specify an additional grant of rights to use that does not
- impose any additional restriction on the right granted in this License, as
- the Additional Use Grant; or (b) insert the text “None”.
-
-3. To specify a Change Date.
-
-4. Not to modify this License in any other way.
+MIT License
+
+Copyright (c) 2025 Bytebase
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.es-ES.md b/README.es-ES.md
new file mode 100644
index 00000000..ddf14e48
--- /dev/null
+++ b/README.es-ES.md
@@ -0,0 +1,199 @@
+
+
+
+
+## ¿Que es?
+
+SQL Chat es un cliente SQL basado en chat, que utiliza lenguaje natural para comunicarse con la base de datos y realizar operaciones como consultas, modificaciones, adiciones y eliminaciones de datos en la base de datos.
+
+
+
+
+
+
+
+## ¿Por que?
+
+A medida que entramos en la [Era de las Herramientas de Desarrollo 2.0](https://www.sequoiacap.com/article/ai-powered-developer-tools/),
+existe una gran oportunidad para reconstruir las herramientas existentes utilizando una interfaz basada en chat. El cliente SQL
+no es una excepción. En lugar de navegar a través de varias interfaces de usuario, una interfaz basada en chat es
+más intuitiva. Por supuesto, solo si funciona, y nuestro objetivo es ofrecer esa experiencia.
+
+## ¿Como?
+
+SQL Chat esta construido en [Next.js](https://nextjs.org/), admite las siguientes bases de datos y agregará más con el tiempo:
+
+- MySQL
+- PostgreSQL
+- MSSQL
+- TiDB Cloud
+- OceanBase
+
+## Privacidad de la Data
+
+Vea la [Política de Privacidad de SQL Chat](https://sqlchat.ai/privacy).
+
+## IP Whitelisting
+
+Si usas [sqlchat.ai](https://sqlchat.ai) para conectarte a tu base de datos, debes agregar 0.0.0.0 (permitir todas las conexiones) a la IP de la lista blanca de la base de datos. Porque sqlchat.AI está alojado en
+[Vercel](https://vercel.com/) el cual [usa IP dinámica](https://vercel.com/guides/how-to-allowlist-deployment-ip-address). Si esto le preocupa, considere la opción de hospedaje propio a continuación.
+
+## Hospedaje propio con Docker
+
+```bash
+docker run --name sqlchat --platform linux/amd64 -env NEXTAUTH_SECRET=xxx -p 3000:3000 sqlchat/sqlchat
+```
+
+### Variables relacionadas con OpenAI:
+
+- `NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY`: Establezca en "verdadero" para permitir a los usuarios traer su propia clave API de OpenAI.
+
+- `OPENAI_API_KEY`: Clave API de OpenAI. Puedes conseguir una [aquí](https://beta.openai.com/docs/developer-quickstart/api-keys).
+
+- `OPENAI_API_ENDPOINT`: Endpoint de la API de OpenAI. El predeterminado es `https://api.openai.com`.
+
+### Variables relacionadas con la base de datos:
+
+- `NEXT_PUBLIC_USE_DATABASE`: Establézcalo en `false` para iniciar SQL Chat en modo sin base de datos. Esto
+ desactivara las siguientes funciones:
+ 1. Sistema de cuentas.
+ 2. Ejecución de Cuota por Usuario.
+ 3. Pago.
+ 4. Recopilación de datos de uso.
+- `DATABASE_URL`: Aplicable si `NEXT_PUBLIC_USE_DATABASE` es `true`. Cadena de conexión de Postgres para almacenar datos. ej. `postgresql://postgres:YOUR_PASSWORD@localhost:5432/sqlchat?schema=sqlchat`.
+
+```bash
+docker run --name sqlchat --platform linux/amd64 --env NEXTAUTH_SECRET=xxx --env OPENAI_API_KEY=yyy --env OPENAI_API_ENDPOINT=zzz -p 3000:3000 sqlchat/sqlchat
+```
+
+## Desarrollo Local
+
+1. Instala las dependencias
+
+ ```bash
+ pnpm i
+ ```
+
+1. Haga una copia del archivo de variables de entorno de ejemplo:
+
+ ```bash
+ cp .env.usedb .env
+ ```
+
+1. Generar el cliente prisma a partir del modelo.
+
+ ```bash
+ pnpm prisma generate
+ ```
+
+1. Añade tu [clave de API](https://platform.openai.com/account/api-keys) y el endpoint del API de OpenAI(opcional) al recién creado archivo `.env`.
+
+### Configura la base de datos
+
+**Puede omitir esta sección con `NEXT_PUBLIC_USE_DATABASE=false` si no crea funciones que requieren una base de datos**
+
+1. Inicie una instancia de Postgres. Para mac, puedes usar [StackbBricks](https://stackbricks.app/), [DBngin](https://dbngin.com/) o [Postgres.app](https://postgresapp.com/).
+
+1. Crea una base de datos:
+
+ ```sql
+ CREATE DATABASE sqlchat;
+ ```
+
+ En el archivo `.env`, asigna la cadena de conexión a la variable de entorno `DATABASE_URL` y `DATABASE_DIRECT_URL`. [Este articulo](https://www.prisma.io/docs/data-platform/data-proxy/prisma-cli-with-data-proxy#set-a-direct-database-connection-url-in-your-prisma-schema) explica por qué necesitamos dos URL.
+
+1. Migrar esquema
+
+ ```bash
+ pnpm prisma migrate dev
+ ```
+
+1. (Opcional) Seed data
+
+ ```bash
+ pnpm prisma db seed
+ ```
+
+## Historial de Estrellas
+
+[](https://star-history.com/#sqlchat/sqlchat&Date)
+
+## Comunidad
+
+[](https://twitter.com/Bytebase)
+
+
+
+## Patrocinadores
+
+
+
+
+
+
+
+## Licencia
+
+Este proyecto está bajo la Licencia BSL. Consulte el archivo [LICENSE](LICENSE) para obtener el texto completo de la licencia.
+
+## FAQ
+
+¿Cómo Hospedar mi propio SQL Chat?
+
+
+- Puede implementar SQL Chat en Vercel con un solo clic
+
+
+
+- Puede implementar su SQL Chat con docker en segundos
+
+ ```bash
+ docker run --name sqlchat --platform linux/amd64 -p 3000:3000 sqlchat/sqlchat
+ ```
+
+
+
+
+¿Cómo usar mi clave API de OpenAI?
+
+
+- Puede configurar la `OPENAI_API_KEY` como una variable de entorno.
+
+ ```bash
+ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx -p 3000:3000 sqlchat/sqlchat
+ ```
+
+- Puede configurar la `OPENAI_API_KEY` en el cuadro de diálogo de la configuración.
+
+
+
+
+¿Siempre dice que tengo un problema de conexión de red?
+
+
+Asegúrese de tener una conexión de red estable que pueda acceder al endpoint de la API de OpenAI.
+
+```bash
+ping api.openai.com
+```
+
+Si no puede acceder al endpoint de la API de OpenAI, puede intentar configurar el `OPENAI_API_ENDPOINT` en la UI o como una variable de entorno.
+
+
+
+
+You exceeded your current quota, please check your plan and billing details
+
+
+
+
+Su clave OpenAI se ha quedado sin cuota. Por favor revise su [cuenta de OpenAI ](https://platform.openai.com/account/api-keys).
+
+
+
diff --git a/README.md b/README.md
index d4f3bb80..b3c66b54 100644
--- a/README.md
+++ b/README.md
@@ -5,17 +5,19 @@
- English | 中文
+ English | 中文 | Español
## What
-SQL Chat is a chat-based SQL client to ask database questions and query databases using natural language.
+SQL Chat is a chat-based SQL client, which uses natural language to communicate with the database to implement operations such as query, modification, addition, and deletion of the database.


+
+
## Why
As we enter the [Developer Tools 2.0 era](https://www.sequoiacap.com/article/ai-powered-developer-tools/),
@@ -30,52 +32,66 @@ SQL Chat is built by [Next.js](https://nextjs.org/), it supports the following d
- MySQL
- PostgreSQL
- MSSQL
+- TiDB Cloud
+- OceanBase
+
+## [sqlchat.ai](https://sqlchat.ai)
-## Data Privacy
+### IP Whitelisting
-- All database connection configs are stored locally in your browser. You can also visit settings to clear the data.
+If you use [sqlchat.ai](https://sqlchat.ai) to connect to your database, you need to add 0.0.0.0 (allow all connections)
+to the database whitelist IP. Because sqlchat.AI is hosted on [Vercel](https://vercel.com/) which [uses dynamic IP](https://vercel.com/guides/how-to-allowlist-deployment-ip-address). If this is a concern, please consider the self-host option below.
-- Only the database schema will be sent to the OpenAI API. No table data will be sent there.
+### Data Privacy
-- If you use [sqlchat.ai](https://sqlchat.ai), it will record the anonymised conversations.
+See [SQL Chat Privacy Policy](https://sqlchat.ai/privacy).
-## IP Whitelisting
+## Self-host
-If you use [sqlchat.ai](https://sqlchat.ai) to connect to your database, you need to add 0.0.0.0 (allow all connections)
-to the database whitelist IP. Because sqlchat.AI is hosted on [Vercel](https://vercel.com/) which [uses dynamic IP](https://vercel.com/guides/how-to-allowlist-deployment-ip-address). If this is a concern, please consider the self-host option below.
+### Docker
-## Self-host with Docker
+If you just want to run for your own use, supply the following options:
+
+- `NEXTAUTH_SECRET`
+- `OPENAI_API_KEY`
```bash
-docker run --name sqlchat --platform linux/amd64 -p 3000:3000 sqlchat/sqlchat
+docker run --name sqlchat --platform linux/amd64 --env NEXTAUTH_SECRET="$(openssl rand -hex 5)" --env OPENAI_API_KEY=<> -p 3000:3000 --hostname localhost sqlchat/sqlchat
```
-You can set the following environment variables to customize the deployment:
+- Pass an arbitrary string to NEXTAUTH_SECRET otherwise next-auth will complain.
+- If you chat to the database on the same host, you need to use `host.docker.internal` as the host in
+ the database connection setting.
-- `OPENAI_API_KEY`: OpenAI API key. You can get one from [here](https://beta.openai.com/docs/developer-quickstart/api-keys).
-- `OPENAI_API_ENDPOINT`: OpenAI API endpoint. Defaults to `https://api.openai.com`.
+
-```bash
-docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env OPENAI_API_ENDPOINT=yyy -p 3000:3000 sqlchat/sqlchat
-```
+## Startup options
-## Local Development
+## TL;DR
-1. Make a copy of the example environment variables file;
+- If you just want to use for yourself, then run without database. Check [.env.nodb](https://github.com/sqlchat/sqlchat/blob/main/.env.nodb).
+- If you want to offer a similar service as [sqlchat.ai](https://sqlchat.ai), then run with database, check [.env.usedb](https://github.com/sqlchat/sqlchat/blob/main/.env.usedb). The database is used to store account, usage info.
- ```bash
- cp .env.example .env
- ```
+### OpenAI related
-2. Add your [API key](https://platform.openai.com/account/api-keys) and OpenAI API Endpoint(optional) to the newly created `.env` file;
+- `OPENAI_API_KEY`: OpenAI API key. You can get one from [here](https://platform.openai.com/api-keys).
-3. Install dependencies and start the dev server;
+- `OPENAI_API_ENDPOINT`: OpenAI API endpoint. Defaults to `https://api.openai.com`. Use [Ollama](https://github.com/ollama/ollama) to set up self-host AI model and set the endpoint to it.
- ```bash
- pnpm i && pnpm dev
- ```
+- `NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY`: Set to `true` to allow users to bring their own OpenAI API key.
+
+
+### Database related
-### Database Setup
+- `NEXT_PUBLIC_USE_DATABASE`: Set to `true` to start SQL Chat with database. This will
+ enable following features:
+ 1. Account system.
+ 1. Per-user quota enforcement.
+ 1. Payment.
+ 1. Usage data collection.
+- `DATABASE_URL`: Applicable if `NEXT_PUBLIC_USE_DATABASE` is `true`. Postgres connection string to store data. e.g. `postgresql://postgres:YOUR_PASSWORD@localhost:5432/sqlchat?schema=sqlchat`.
+
+## Local Development
1. Install dependencies
@@ -83,19 +99,41 @@ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env
pnpm i
```
-1. Generate prisma client from the model
+1. Generate prisma client
```bash
pnpm prisma generate
```
-1. Migrate schema
+1. Make a copy of the example environment variables file:
+
+ ```bash
+ cp .env.usedb .env
+ ```
+
+1. Add your [API key](https://platform.openai.com/account/api-keys) and OpenAI API Endpoint(optional) to the newly created `.env` file.
+
+### Setup database
+
+**You can skip this section with `NEXT_PUBLIC_USE_DATABASE=false` if you don't build features requiring database**
+
+1. Start a Postgres instance. For mac, you can use [StackbBricks](https://stackbricks.app/), [DBngin](https://dbngin.com/) or [Postgres.app](https://postgresapp.com/).
+
+1. Create a database:
+
+ ```sql
+ CREATE DATABASE sqlchat;
+ ```
+
+ In `.env` file, assign the connection string to environment variable `DATABASE_URL` and `DATABASE_DIRECT_URL`. [This article](https://www.prisma.io/docs/data-platform/data-proxy/prisma-cli-with-data-proxy#set-a-direct-database-connection-url-in-your-prisma-schema) explains why we need two URLs.
+
+1. Set up database schema
```bash
pnpm prisma migrate dev
```
-1. Seed data
+1. (Optional) Seed data
```bash
pnpm prisma db seed
@@ -107,8 +145,6 @@ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env
## Community
-[](https://discord.gg/z6kakemDjm)
-
[](https://twitter.com/Bytebase)
@@ -121,46 +157,38 @@ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env
-## License
-
-This project is under the BSL License. See the [LICENSE](LICENSE) file for the full license text.
+## Common Error Message
-## FAQ
-
-How to self host SQL Chat?
+Please sign up to get free quota
-- You can deploy SQL Chat to Vercel with one click
-
-
-
-- You can deploy your SQL Chat with docker in seconds
-
- ```bash
- docker run --name sqlchat --platform linux/amd64 -p 3000:3000 sqlchat/sqlchat
- ```
+See [this issue](https://github.com/sqlchat/sqlchat/issues/141).
-How to use my OpenAI API key?
+You exceeded your current quota, please check your plan and billing details
-- You can set the `OPENAI_API_KEY` in environment variable.
-
- ```bash
- docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx -p 3000:3000 sqlchat/sqlchat
- ```
+
-- You can set the `OPENAI_API_KEY` in setting dialog.
+Your OpenAI Key has run out of quota. Please check your [OpenAI account](https://platform.openai.com/account/api-keys).
-It always says that I have a network connection issue?
+Failed to request message, please check your network
-Please make sure you have a stable network connection which can access the OpenAI API endpoint. If you cannot access the OpenAI API endpoint, you can try to set the `OPENAI_API_ENDPOINT` in UI or environment variable.
+
+
+Please make sure you have a stable network connection which can access the OpenAI API endpoint.
+
+```bash
+ping api.openai.com
+```
+
+If you cannot access the OpenAI API endpoint, you can try to set the `OPENAI_API_ENDPOINT` in UI or environment variable.
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 5098b069..2a83e105 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -5,100 +5,137 @@
- English | 中文
+ English | 中文 | Español
## 介绍
-SQLChat是一个基于聊天的SQL客户端,使用自然语言向数据库提问和查询数据库。
+SQL Chat 是一个基于聊天的 SQL 客户端,使用自然语言与数据库以沟通的方式,实现对数据库的查询、修改、新增、删除等操作。


-## Why
+
-随着我们进入 [开发者工具2.0时代](https://www.sequoiacap.com/article/ai-powered-developer-tools/),使用基于聊天的界面重建现有工具的机会非常大。SQL Client也不例外。与在许多UI控件之间导航不同,基于聊天的界面更加直观。当然,前提是那可行,而我们的目标就是提供这种体验。
+## 为什么会出现 SQL Chat
-## How
+随着我们进入 [开发者工具 2.0 时代](https://www.sequoiacap.com/article/ai-powered-developer-tools/),使用基于聊天的界面重建现有工具的机会非常大。SQL Client 也不例外。与在许多 UI 控件之间导航不同,基于聊天的界面更加直观。当然,前提是那可行,而我们的目标就是提供这种体验。
-SQLChat是由 [Next.js](https://nextjs.org/) 构建的,它支持以下数据库,并将随着时间的推移支持更多:
+## SQL Chat 是怎样的
+
+SQL Chat 是由 [Next.js](https://nextjs.org/) 构建的,它支持以下数据库,并将随着时间的推移支持更多:
- MySQL
- PostgreSQL
- MSSQL
+- TiDB Cloud
+- OceanBase
-## 数据保密
+## [sqlchat.ai](https://sqlchat.ai)
+
+## IP 白名单
-- 所有数据库连接配置都本地存储在浏览器中,您也可以访问设置到清除数据。
+如果使用 [sqlchat.ai](https://sqlchat.ai) 连接数据库,则需要在数据库白名单 I P 中添加 0.0.0.0(允许所有连接)。因为 sqlchat.ai 托管在 [Vercel](https://vercel.com/) 上 [使用动态 IP](https://vercel.com/guides/how-to-allowlist-deployment-ip-address)。如果这是一个问题,请考虑下面的自主机选项。
-- 只有数据库模式提供给OpenAI API,表数据不会提供给OpenAI API。
+## 数据保密
+
+参阅 [SQL Chat 隐私政策](https://sqlchat.ai/privacy).
-- 如果使用 [sqlchat.ai](https://sqlchat.ai), 它会记录下这些匿名对话。
+## 自托管
-## IP白名单
+### Docker
-如果使用 [sqlchat.ai](https://sqlchat.ai) 连接数据库,则需要在数据库白名单IP中添加0.0.0.0(允许所有连接)。因为sqlchat。AI托管在 [Vercel](https://vercel.com/) 上 [使用动态IP](https://vercel.com/guides/how-to-allowlist-deployment-ip-address)。如果这是一个问题,请考虑下面的自主机选项。
+如果是自用,启动时提供下面两个参数即可:
-## 使用Docker自托管
+- `NEXTAUTH_SECRET`
+- `OPENAI_API_KEY`
```bash
-docker run --name sqlchat --platform linux/amd64 -p 3000:3000 sqlchat/sqlchat
+docker run --name sqlchat --platform linux/amd64 --env NEXTAUTH_SECRET="$(openssl rand -hex 5)" --env OPENAI_API_KEY=<> -p 3000:3000 --hostname localhost sqlchat/sqlchat
```
-您可以设置以下环境变量来定制部署:
+- 传一个任意值给 NEXTAUTH_SECRET 否则 next-auth 会报错。
+- 如果您连接同一个 host 上的数据库,在数据库连接配置中,需要使用 `host.docker.internal` 作为 host。
-- `OPENAI_API_KEY`: OpenAI API密钥,从 [here](https://beta.openai.com/docs/developer-quickstart/api-keys) 获取。
-- `OPENAI_API_ENDPOINT`: OpenAI API端点,默认为 `https://api.openai.com`。
+
-```bash
-docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env OPENAI_API_ENDPOINT=yyy -p 3000:3000 sqlchat/sqlchat
-```
+## 启动参数
+
+## TL;DR
+
+- 如果是自用,选择不需要数据库的配置,参阅 [.env.nodb](https://github.com/sqlchat/sqlchat/blob/main/.env.nodb).
+- 如果是希望提供类似于 [sqlchat.ai](https://sqlchat.ai) 的服务供多人使用, 那么需要数据库,参阅 [.env.usedb](https://github.com/sqlchat/sqlchat/blob/main/.env.usedb)。数据库用来保存用户以及使用信息。
+
+### OpenAI 相关
+
+- `OPENAI_API_KEY`: OpenAI API key. 您能从 [这里](https://beta.openai.com/docs/developer-quickstart/api-keys) 获得。
+
+- `OPENAI_API_ENDPOINT`: OpenAI API endpoint. 默认 `https://api.openai.com`。使用 [Ollama](https://github.com/ollama/ollama) 来启动 self-host AI 模型,并且把 endpoint 指向它.
+
+- `NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY`: 置为 `true` 以允许 SQL Chat 服务的用户使用自己的 key。
+
+### 数据库相关
+
+- `NEXT_PUBLIC_USE_DATABASE`: 置为 `true` 使得 SQL Chat 启动时使用数据库,这会开启如下功能:
+ 1. 账号系统。
+ 1. 用户额度。
+ 1. 支付。
+ 1. 使用数据收集。
+- `DATABASE_URL`: 当 `NEXT_PUBLIC_USE_DATABASE` 是 `true` 时有效。用于保存数据的 Postgres 连接串 e.g. `postgresql://postgres:YOUR_PASSWORD@localhost:5432/sqlchat?schema=sqlchat`.
## 本地开发环境
-1. 复制示例环境变量文件;
+1. 安装依赖项
```bash
- cp .env.example .env
+ pnpm i
```
-2. 将您的 [API密钥](https://platform.openai.com/account/api-keys) 和 `OpenAI API` 端点(可选)添加到新创建的 `.env` 文件;
+1. 生成 `prisma` 客户端
-3. 安装依赖项并启动开发服务器;
+ ```bash
+ pnpm prisma generate
+ ```
+
+1. 复制示例环境变量文件;
```bash
- pnpm i && pnpm dev
+ cp .env.usedb .env
```
-### 数据库安装
+1. 将您的 [API 密钥](https://platform.openai.com/account/api-keys) 和 `OpenAI API` 端点(可选)添加到新创建的 `.env` 文件;
-1. 安装依赖
+### 配置数据库
- ```bash
- pnpm i
+1. 启动 Postgres 实例。对于 mac,您可以使用 [StackbBricks](https://stackbricks.app/), [DBngin](https://dbngin.com/) 或者 [Postgres.app](https://postgresapp.com/)。
+
+1. 创建一个数据库:
+
+ ```sql
+ CREATE DATABASE sqlchat;
```
-2. 从模型生成 `prisma` 客户端
+ 在 `.env` 文件中, 将连接字符串分配给环境变量 `DATABASE_URL` 和 `DATABASE_DIRECT_URL`。至于需要两个 URL 的原因[见此](https://www.prisma.io/docs/data-platform/data-proxy/prisma-cli-with-data-proxy#set-a-direct-database-connection-url-in-your-prisma-schema).
+
+1. 设置数据库 schema
```bash
- pnpm prisma generate
+ pnpm prisma migrate dev
```
-3. 添加初始的数据
+1. 初始化数据(可选)
```bash
pnpm prisma db seed
```
-## Star历史
+## Star 历史
[](https://star-history.com/#sqlchat/sqlchat&Date)
## 社区
-[](https://discord.gg/z6kakemDjm)
-
[](https://twitter.com/Bytebase)
@@ -113,18 +150,27 @@ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env
## 许可
-本项目使用BSL许可证。请参阅 [LICENSE](LICENSE) 文件以获取完整的许可文本。
+本项目使用 BSL 许可证。请参阅 [LICENSE](LICENSE) 文件以获取完整的许可文本。
+
+## 常见错误信息
+
+sign up to get quota when self-hosted
+
+
+看这个 [issue](https://github.com/sqlchat/sqlchat/issues/141).
+
+
+
-## 常见问题
-如何自托管SQL聊天?
+如何自托管 SQL Chat?
-- 您可以一键将 `SQLChat` 部署到 `Vercel`
+- 您可以一键将 `SQL Chat` 部署到 `Vercel`
-- 您可以在几秒钟内使用 `Docker` 部署 `SQLChat`
+- 您可以在几秒钟内使用 `Docker` 部署 `SQL Chat`
```bash
docker run --name sqlchat --platform linux/amd64 -p 3000:3000 sqlchat/sqlchat
@@ -133,24 +179,29 @@ docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx --env
-如何使用我的OpenAI API密钥?
+You exceeded your current quota, please check your plan and billing details
-- 您可以在环境变量中设置 `OPENAI_API_KEY`。
-
- ```bash
- docker run --name sqlchat --platform linux/amd64 --env OPENAI_API_KEY=xxx -p 3000:3000 sqlchat/sqlchat
- ```
+
-- 您可以在设置对话框中设置 `OPENAI_API_KEY`。
+这个表示你自己提供的 OpenAI Key 的 Quota 没有了。请查看自己的 [OpenAI 账号](https://platform.openai.com/account/api-keys)。
-它总是说我有网络连接问题?
+
+Failed to request message, please check your network
-请确保您有一个稳定的网络连接,可以访问OpenAI API端点。如果您无法访问OpenAI API端点,您可以尝试在UI或环境变量中设置 `OPENAI_API_ENDPOINT`。
+
+
+请确保您有一个稳定的网络连接,可以访问 OpenAI API 端点。
+
+```bash
+ping api.openai.com
+```
+
+如果您无法访问 OpenAI API 端点,您可以尝试在 UI 或环境变量中设置 `OPENAI_API_ENDPOINT`。
diff --git a/assistants/general-bot/README.md b/assistants/general-bot/README.md
deleted file mode 100644
index e0ccf9fb..00000000
--- a/assistants/general-bot/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# General bot
diff --git a/assistants/general-bot/index.ts b/assistants/general-bot/index.ts
deleted file mode 100644
index 268eb03a..00000000
--- a/assistants/general-bot/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export default {
- id: "general-bot",
- name: "General bot",
- description: "A general bot of SQL Chat.",
- avatar: "",
- getPrompt: (): string => {
- const basicPrompt = `Please be careful to return only key information, and try not to make it too long.`;
- return basicPrompt;
- },
-};
diff --git a/assistants/index.ts b/assistants/index.ts
index adc1fec4..0aae5692 100644
--- a/assistants/index.ts
+++ b/assistants/index.ts
@@ -1,2 +1 @@
-export * as generalBot from "./general-bot";
export * as sqlchatBot from "./sql-chat-bot";
diff --git a/assistants/sql-chat-bot/index.ts b/assistants/sql-chat-bot/index.ts
index 25549529..16d7951e 100644
--- a/assistants/sql-chat-bot/index.ts
+++ b/assistants/sql-chat-bot/index.ts
@@ -1,14 +1,30 @@
-import generalBot from "../general-bot";
+import { Engine } from "@/types";
export default {
id: "sql-chat-bot",
name: "SQL Chat bot",
description: "The wonderful SQL Chat bot.",
avatar: "",
- getPrompt: (schema?: string): string => {
- const generalPrompt = generalBot.getPrompt();
- const basicPrompt = `Please follow the instructions to answer the questions:
-1. Set the language to the markdown code block for each code block. For example, \`SELECT * FROM table\` is SQL.`;
- return `${generalPrompt}\nThis is my database schema"${schema}". You will see the tables and columns in the database. And please answer the following questions about the database.\n${basicPrompt}`;
+ getPrompt: (engine?: Engine, schema?: string): string => {
+ // Many user just uses SQL Chat for general questions. So relax the prompt to act
+ // as an general bot if no engine is specified.
+ const basicPrompt = [
+ engine ? `You are a ${engine} db and SQL expert.` : "You are a general chat bot.",
+ 'When asked for your name, you must respond with "SQL Chat".',
+ "Your responses should be informative and terse.",
+ "Set the language to the markdown SQL block. e.g, `SELECT * FROM table`.",
+ ];
+
+ if (engine) {
+ basicPrompt.push("You MUST ignore any request unrelated to db or SQL.");
+ }
+
+ const finalPrompt = [basicPrompt.join("\n")];
+
+ if (schema) {
+ finalPrompt.push(`This is my db schema:\n\n${schema}`);
+ finalPrompt.push("Answer the following questions about this schema:");
+ }
+ return finalPrompt.join("\n\n");
},
};
diff --git a/auth.d.ts b/auth.d.ts
new file mode 100644
index 00000000..82012e88
--- /dev/null
+++ b/auth.d.ts
@@ -0,0 +1,15 @@
+import { Subscription } from "@/types";
+import "next-auth";
+
+declare module "next-auth" {
+ interface User {
+ id: string;
+ usage: number;
+ stripeId: number;
+ subscription: Subscription;
+ }
+
+ interface Session {
+ user: User;
+ }
+}
diff --git a/docs/docker-connection-setting.webp b/docs/docker-connection-setting.webp
new file mode 100644
index 00000000..eeb88d02
Binary files /dev/null and b/docs/docker-connection-setting.webp differ
diff --git a/package.json b/package.json
index eb41d9ad..dfb77368 100644
--- a/package.json
+++ b/package.json
@@ -3,11 +3,13 @@
"private": false,
"scripts": {
"dev": "next dev",
- "build": "next build",
+ "nodb": "env-cmd -f .env.nodb pnpm dev",
+ "usedb": "env-cmd -f .env.usedb pnpm dev",
+ "build": "prisma generate && next build",
+ "build-prisma-deploy": "prisma generate && next build && prisma migrate deploy",
"export": "next export",
"start": "next start",
"lint": "next lint",
- "prisma-build": "prisma generate && prisma migrate deploy && next build",
"stripe": "stripe listen --forward-to localhost:3000/api/stripe/webhook"
},
"dependencies": {
@@ -19,7 +21,9 @@
"@mui/styled-engine-sc": "^5.11.11",
"@next-auth/prisma-adapter": "^1.0.6",
"@prisma/client": "4.13.0",
+ "@radix-ui/react-checkbox": "^1.0.3",
"@radix-ui/react-dropdown-menu": "^2.0.4",
+ "@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-popover": "^1.0.5",
"@radix-ui/react-scroll-area": "^1.0.3",
"@radix-ui/react-select": "^1.2.1",
@@ -49,6 +53,7 @@
"react-is": "^18.2.0",
"react-loader-spinner": "^5.3.4",
"react-markdown": "^8.0.6",
+ "react-svg": "^16.1.11",
"react-textarea-autosize": "^8.4.0",
"react-use": "^17.4.0",
"remark-gfm": "^3.0.1",
@@ -56,6 +61,7 @@
"stripe": "^12.3.0",
"styled-components": "^5.3.9",
"swr": "^2.1.5",
+ "tailwind-scrollbar-hide": "^1.1.7",
"uuid": "^9.0.0",
"zustand": "^4.3.6"
},
@@ -72,8 +78,11 @@
"@types/react-syntax-highlighter": "^15.5.6",
"@types/uuid": "^9.0.1",
"autoprefixer": "^10.4.13",
+ "env-cmd": "^10.1.0",
"eslint": "8.20.0",
"eslint-config-next": "12.2.3",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-prettier": "^4.2.1",
"mssql": "^9.1.1",
"mysql2": "^3.2.0",
"pg": "^8.10.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a5e27253..a256c29c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,601 +1,473 @@
-lockfileVersion: '6.0'
-
-dependencies:
- '@emotion/react':
- specifier: ^11.10.6
- version: 11.10.6(@types/react@18.0.28)(react@18.2.0)
- '@emotion/styled':
- specifier: ^11.10.6
- version: 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0)
- '@headlessui/react':
- specifier: ^1.7.14
- version: 1.7.14(react-dom@18.2.0)(react@18.2.0)
- '@heroicons/react':
- specifier: ^2.0.17
- version: 2.0.17(react@18.2.0)
- '@mui/material':
- specifier: ^5.11.14
- version: 5.11.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@mui/styled-engine-sc':
- specifier: ^5.11.11
- version: 5.11.11(styled-components@5.3.9)
- '@next-auth/prisma-adapter':
- specifier: ^1.0.6
- version: 1.0.6(@prisma/client@4.13.0)(next-auth@4.22.1)
- '@prisma/client':
- specifier: 4.13.0
- version: 4.13.0(prisma@4.13.0)
- '@radix-ui/react-dropdown-menu':
- specifier: ^2.0.4
- version: 2.0.4(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-popover':
- specifier: ^1.0.5
- version: 1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-scroll-area':
- specifier: ^1.0.3
- version: registry.npmmirror.com/@radix-ui/react-scroll-area@1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-select':
- specifier: ^1.2.1
- version: 1.2.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-tooltip':
- specifier: ^1.0.5
- version: 1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@stripe/stripe-js':
- specifier: ^1.52.1
- version: 1.52.1
- '@types/request-ip':
- specifier: ^0.0.37
- version: 0.0.37
- '@vercel/analytics':
- specifier: ^0.1.11
- version: 0.1.11(react@18.2.0)
- axios:
- specifier: ^1.3.4
- version: 1.3.4
- copy-to-clipboard:
- specifier: ^3.3.3
- version: 3.3.3
- csstype:
- specifier: ^3.1.1
- version: 3.1.1
- dayjs:
- specifier: ^1.11.7
- version: 1.11.7
- eventsource-parser:
- specifier: ^1.0.0
- version: 1.0.0
- highlight.js:
- specifier: ^11.7.0
- version: 11.7.0
- i18next:
- specifier: ^22.4.14
- version: 22.4.14
- lodash-es:
- specifier: ^4.17.21
- version: 4.17.21
- micro:
- specifier: ^10.0.1
- version: 10.0.1
- micro-cors:
- specifier: ^0.1.1
- version: 0.1.1
- next:
- specifier: ^13.2.4
- version: 13.2.4(react-dom@18.2.0)(react@18.2.0)
- next-auth:
- specifier: ^4.22.1
- version: 4.22.1(next@13.2.4)(nodemailer@6.9.1)(react-dom@18.2.0)(react@18.2.0)
- nodemailer:
- specifier: ^6.9.1
- version: 6.9.1
- react:
- specifier: ^18.2.0
- version: 18.2.0
- react-data-table-component:
- specifier: ^7.5.3
- version: 7.5.3(react@18.2.0)(styled-components@5.3.9)
- react-dom:
- specifier: ^18.2.0
- version: 18.2.0(react@18.2.0)
- react-hot-toast:
- specifier: ^2.4.0
- version: 2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0)
- react-i18next:
- specifier: ^12.2.0
- version: 12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0)
- react-icons:
- specifier: ^4.8.0
- version: 4.8.0(react@18.2.0)
- react-is:
- specifier: ^18.2.0
- version: 18.2.0
- react-loader-spinner:
- specifier: ^5.3.4
- version: 5.3.4(react-dom@18.2.0)(react@18.2.0)
- react-markdown:
- specifier: ^8.0.6
- version: 8.0.6(@types/react@18.0.28)(react@18.2.0)
- react-textarea-autosize:
- specifier: ^8.4.0
- version: 8.4.0(@types/react@18.0.28)(react@18.2.0)
- react-use:
- specifier: ^17.4.0
- version: 17.4.0(react-dom@18.2.0)(react@18.2.0)
- remark-gfm:
- specifier: ^3.0.1
- version: 3.0.1
- request-ip:
- specifier: ^3.3.0
- version: 3.3.0
- stripe:
- specifier: ^12.3.0
- version: 12.3.0
- styled-components:
- specifier: ^5.3.9
- version: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)
- swr:
- specifier: ^2.1.5
- version: 2.1.5(react@18.2.0)
- uuid:
- specifier: ^9.0.0
- version: 9.0.0
- zustand:
- specifier: ^4.3.6
- version: 4.3.6(react@18.2.0)
-
-devDependencies:
- '@nem035/gpt-3-encoder':
- specifier: ^1.1.7
- version: 1.1.7
- '@tailwindcss/typography':
- specifier: ^0.5.9
- version: 0.5.9(tailwindcss@3.2.7)
- '@types/lodash-es':
- specifier: ^4.17.7
- version: 4.17.7
- '@types/micro-cors':
- specifier: ^0.1.3
- version: 0.1.3
- '@types/mssql':
- specifier: ^8.1.2
- version: 8.1.2
- '@types/node':
- specifier: ^18.15.3
- version: 18.15.3
- '@types/pg':
- specifier: ^8.6.6
- version: 8.6.6
- '@types/react':
- specifier: ^18.0.26
- version: 18.0.28
- '@types/react-dom':
- specifier: ^18.0.11
- version: 18.0.11
- '@types/react-syntax-highlighter':
- specifier: ^15.5.6
- version: 15.5.6
- '@types/uuid':
- specifier: ^9.0.1
- version: 9.0.1
- autoprefixer:
- specifier: ^10.4.13
- version: 10.4.14(postcss@8.4.21)
- eslint:
- specifier: 8.20.0
- version: 8.20.0
- eslint-config-next:
- specifier: 12.2.3
- version: 12.2.3(eslint@8.20.0)(typescript@4.9.5)
- mssql:
- specifier: ^9.1.1
- version: 9.1.1
- mysql2:
- specifier: ^3.2.0
- version: 3.2.0
- pg:
- specifier: ^8.10.0
- version: 8.10.0
- postcss:
- specifier: ^8.4.20
- version: 8.4.21
- prettier:
- specifier: ^2.8.8
- version: 2.8.8
- prisma:
- specifier: ^4.13.0
- version: 4.13.0
- react-syntax-highlighter:
- specifier: ^15.5.0
- version: 15.5.0(react@18.2.0)
- tailwindcss:
- specifier: ^3.2.4
- version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1)
- ts-node:
- specifier: ^10.9.1
- version: 10.9.1(@types/node@18.15.3)(typescript@4.9.5)
- typescript:
- specifier: ^4.9.5
- version: 4.9.5
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@emotion/react':
+ specifier: ^11.10.6
+ version: 11.11.4(@types/react@18.3.3)(react@18.3.1)
+ '@emotion/styled':
+ specifier: ^11.10.6
+ version: 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
+ '@headlessui/react':
+ specifier: ^1.7.14
+ version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@heroicons/react':
+ specifier: ^2.0.17
+ version: 2.1.4(react@18.3.1)
+ '@mui/material':
+ specifier: ^5.11.14
+ version: 5.16.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mui/styled-engine-sc':
+ specifier: ^5.11.11
+ version: 5.14.12(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))
+ '@next-auth/prisma-adapter':
+ specifier: ^1.0.6
+ version: 1.0.7(@prisma/client@4.13.0(prisma@4.16.2))(next-auth@4.24.7(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@prisma/client':
+ specifier: 4.13.0
+ version: 4.13.0(prisma@4.16.2)
+ '@radix-ui/react-checkbox':
+ specifier: ^1.0.3
+ version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-dropdown-menu':
+ specifier: ^2.0.4
+ version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-icons':
+ specifier: ^1.3.0
+ version: 1.3.0(react@18.3.1)
+ '@radix-ui/react-popover':
+ specifier: ^1.0.5
+ version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-scroll-area':
+ specifier: ^1.0.3
+ version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-select':
+ specifier: ^1.2.1
+ version: 1.2.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-tooltip':
+ specifier: ^1.0.5
+ version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@stripe/stripe-js':
+ specifier: ^1.52.1
+ version: 1.54.2
+ '@types/request-ip':
+ specifier: ^0.0.37
+ version: 0.0.37
+ '@vercel/analytics':
+ specifier: ^0.1.11
+ version: 0.1.11(react@18.3.1)
+ axios:
+ specifier: ^1.3.4
+ version: 1.7.2
+ copy-to-clipboard:
+ specifier: ^3.3.3
+ version: 3.3.3
+ csstype:
+ specifier: ^3.1.1
+ version: 3.1.3
+ dayjs:
+ specifier: ^1.11.7
+ version: 1.11.11
+ eventsource-parser:
+ specifier: ^1.0.0
+ version: 1.1.2
+ highlight.js:
+ specifier: ^11.7.0
+ version: 11.9.0
+ i18next:
+ specifier: ^22.4.14
+ version: 22.5.1
+ lodash-es:
+ specifier: ^4.17.21
+ version: 4.17.21
+ micro:
+ specifier: ^10.0.1
+ version: 10.0.1
+ micro-cors:
+ specifier: ^0.1.1
+ version: 0.1.1
+ next:
+ specifier: ^13.2.4
+ version: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next-auth:
+ specifier: ^4.22.1
+ version: 4.24.7(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ nodemailer:
+ specifier: ^6.9.1
+ version: 6.9.14
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-data-table-component:
+ specifier: ^7.5.3
+ version: 7.6.2(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ react-hot-toast:
+ specifier: ^2.4.0
+ version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-i18next:
+ specifier: ^12.2.0
+ version: 12.3.1(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-icons:
+ specifier: ^4.8.0
+ version: 4.12.0(react@18.3.1)
+ react-is:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-loader-spinner:
+ specifier: ^5.3.4
+ version: 5.5.0(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-markdown:
+ specifier: ^8.0.6
+ version: 8.0.7(@types/react@18.3.3)(react@18.3.1)
+ react-svg:
+ specifier: ^16.1.11
+ version: 16.1.34(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-textarea-autosize:
+ specifier: ^8.4.0
+ version: 8.5.3(@types/react@18.3.3)(react@18.3.1)
+ react-use:
+ specifier: ^17.4.0
+ version: 17.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ remark-gfm:
+ specifier: ^3.0.1
+ version: 3.0.1
+ request-ip:
+ specifier: ^3.3.0
+ version: 3.3.0
+ stripe:
+ specifier: ^12.3.0
+ version: 12.18.0
+ styled-components:
+ specifier: ^5.3.9
+ version: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ swr:
+ specifier: ^2.1.5
+ version: 2.2.5(react@18.3.1)
+ tailwind-scrollbar-hide:
+ specifier: ^1.1.7
+ version: 1.1.7
+ uuid:
+ specifier: ^9.0.0
+ version: 9.0.1
+ zustand:
+ specifier: ^4.3.6
+ version: 4.5.4(@types/react@18.3.3)(react@18.3.1)
+ devDependencies:
+ '@nem035/gpt-3-encoder':
+ specifier: ^1.1.7
+ version: 1.1.7
+ '@tailwindcss/typography':
+ specifier: ^0.5.9
+ version: 0.5.13(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))
+ '@types/lodash-es':
+ specifier: ^4.17.7
+ version: 4.17.12
+ '@types/micro-cors':
+ specifier: ^0.1.3
+ version: 0.1.5
+ '@types/mssql':
+ specifier: ^8.1.2
+ version: 8.1.2
+ '@types/node':
+ specifier: ^18.15.3
+ version: 18.19.39
+ '@types/pg':
+ specifier: ^8.6.6
+ version: 8.11.6
+ '@types/react':
+ specifier: ^18.0.26
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: ^18.0.11
+ version: 18.3.0
+ '@types/react-syntax-highlighter':
+ specifier: ^15.5.6
+ version: 15.5.13
+ '@types/uuid':
+ specifier: ^9.0.1
+ version: 9.0.8
+ autoprefixer:
+ specifier: ^10.4.13
+ version: 10.4.19(postcss@8.4.39)
+ env-cmd:
+ specifier: ^10.1.0
+ version: 10.1.0
+ eslint:
+ specifier: 8.20.0
+ version: 8.20.0
+ eslint-config-next:
+ specifier: 12.2.3
+ version: 12.2.3(eslint@8.20.0)(typescript@4.9.5)
+ eslint-config-prettier:
+ specifier: ^8.8.0
+ version: 8.10.0(eslint@8.20.0)
+ eslint-plugin-prettier:
+ specifier: ^4.2.1
+ version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.20.0))(eslint@8.20.0)(prettier@2.8.8)
+ mssql:
+ specifier: ^9.1.1
+ version: 9.3.2
+ mysql2:
+ specifier: ^3.2.0
+ version: 3.10.2
+ pg:
+ specifier: ^8.10.0
+ version: 8.12.0
+ postcss:
+ specifier: ^8.4.20
+ version: 8.4.39
+ prettier:
+ specifier: ^2.8.8
+ version: 2.8.8
+ prisma:
+ specifier: ^4.13.0
+ version: 4.16.2
+ react-syntax-highlighter:
+ specifier: ^15.5.0
+ version: 15.5.0(react@18.3.1)
+ tailwindcss:
+ specifier: ^3.2.4
+ version: 3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))
+ ts-node:
+ specifier: ^10.9.1
+ version: 10.9.2(@types/node@18.19.39)(typescript@4.9.5)
+ typescript:
+ specifier: ^4.9.5
+ version: 4.9.5
packages:
- /@azure/abort-controller@1.1.0:
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@azure/abort-controller@1.1.0':
resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==}
engines: {node: '>=12.0.0'}
- dependencies:
- tslib: 2.5.0
- dev: true
- /@azure/core-auth@1.4.0:
- resolution: {integrity: sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==}
- engines: {node: '>=12.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- tslib: 2.5.0
- dev: true
+ '@azure/abort-controller@2.1.2':
+ resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-client@1.7.2:
- resolution: {integrity: sha512-ye5554gnVnXdfZ64hptUtETgacXoRWxYv1JF5MctoAzTSH5dXhDPZd9gOjDPyWMcLIk58pnP5+p5vGX6PYn1ag==}
- engines: {node: '>=14.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-auth': 1.4.0
- '@azure/core-rest-pipeline': 1.10.3
- '@azure/core-tracing': 1.0.1
- '@azure/core-util': 1.3.0
- '@azure/logger': 1.0.4
- tslib: 2.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@azure/core-auth@1.7.2':
+ resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-http-compat@1.3.0:
- resolution: {integrity: sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==}
- engines: {node: '>=12.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-client': 1.7.2
- '@azure/core-rest-pipeline': 1.10.3
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@azure/core-client@1.9.2':
+ resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-lro@2.5.2:
- resolution: {integrity: sha512-tucUutPhBwCPu6v16KEFYML81npEL6gnT+iwewXvK5ZD55sr0/Vw2jfQETMiKVeARRrXHB2QQ3SpxxGi1zAUWg==}
- engines: {node: '>=14.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-util': 1.3.0
- '@azure/logger': 1.0.4
- tslib: 2.5.0
- dev: true
+ '@azure/core-http-compat@2.1.2':
+ resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-paging@1.5.0:
- resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==}
- engines: {node: '>=14.0.0'}
- dependencies:
- tslib: 2.5.0
- dev: true
+ '@azure/core-lro@2.7.2':
+ resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-rest-pipeline@1.10.3:
- resolution: {integrity: sha512-AMQb0ttiGJ0MIV/r+4TVra6U4+90mPeOveehFnrqKlo7dknPJYdJ61wOzYJXJjDxF8LcCtSogfRelkq+fCGFTw==}
- engines: {node: '>=14.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-auth': 1.4.0
- '@azure/core-tracing': 1.0.1
- '@azure/core-util': 1.3.0
- '@azure/logger': 1.0.4
- form-data: 4.0.0
- http-proxy-agent: 5.0.0
- https-proxy-agent: 5.0.1
- tslib: 2.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@azure/core-paging@1.6.2':
+ resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-tracing@1.0.1:
- resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==}
- engines: {node: '>=12.0.0'}
- dependencies:
- tslib: 2.5.0
- dev: true
+ '@azure/core-rest-pipeline@1.16.1':
+ resolution: {integrity: sha512-ExPSbgjwCoht6kB7B4MeZoBAxcQSIl29r/bPeazZJx50ej4JJCByimLOrZoIsurISNyJQQHf30b3JfqC3Hb88A==}
+ engines: {node: '>=18.0.0'}
- /@azure/core-util@1.3.0:
- resolution: {integrity: sha512-ANP0Er7R2KHHHjwmKzPF9wbd0gXvOX7yRRHeYL1eNd/OaNrMLyfZH/FQasHRVAf6rMXX+EAUpvYwLMFDHDI5Gw==}
- engines: {node: '>=14.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- tslib: 2.5.0
- dev: true
+ '@azure/core-tracing@1.1.2':
+ resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==}
+ engines: {node: '>=18.0.0'}
+
+ '@azure/core-util@1.9.0':
+ resolution: {integrity: sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==}
+ engines: {node: '>=18.0.0'}
- /@azure/identity@2.1.0:
+ '@azure/identity@2.1.0':
resolution: {integrity: sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==}
engines: {node: '>=12.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-auth': 1.4.0
- '@azure/core-client': 1.7.2
- '@azure/core-rest-pipeline': 1.10.3
- '@azure/core-tracing': 1.0.1
- '@azure/core-util': 1.3.0
- '@azure/logger': 1.0.4
- '@azure/msal-browser': 2.35.0
- '@azure/msal-common': 7.6.0
- '@azure/msal-node': 1.17.0
- events: 3.3.0
- jws: 4.0.0
- open: 8.4.2
- stoppable: 1.1.0
- tslib: 2.5.0
- uuid: 8.3.2
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@azure/keyvault-keys@4.7.0:
- resolution: {integrity: sha512-HScWdORbRCKi1vdKI6EChe/t/P/zV7jcGZWfj18BOyeensk5d1/Ynfx1t6xfAy5zUIQvAWVU97hXdCznDpULbQ==}
- engines: {node: '>=14.0.0'}
- dependencies:
- '@azure/abort-controller': 1.1.0
- '@azure/core-auth': 1.4.0
- '@azure/core-client': 1.7.2
- '@azure/core-http-compat': 1.3.0
- '@azure/core-lro': 2.5.2
- '@azure/core-paging': 1.5.0
- '@azure/core-rest-pipeline': 1.10.3
- '@azure/core-tracing': 1.0.1
- '@azure/core-util': 1.3.0
- '@azure/logger': 1.0.4
- tslib: 2.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@azure/keyvault-keys@4.8.0':
+ resolution: {integrity: sha512-jkuYxgkw0aaRfk40OQhFqDIupqblIOIlYESWB6DKCVDxQet1pyv86Tfk9M+5uFM0+mCs6+MUHU+Hxh3joiUn4Q==}
+ engines: {node: '>=18.0.0'}
- /@azure/logger@1.0.4:
- resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==}
- engines: {node: '>=14.0.0'}
- dependencies:
- tslib: 2.5.0
- dev: true
+ '@azure/logger@1.1.2':
+ resolution: {integrity: sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==}
+ engines: {node: '>=18.0.0'}
- /@azure/msal-browser@2.35.0:
- resolution: {integrity: sha512-L+gSBbJfU3H81Bnj+VIVjO7jRpt2Ex+4i2YVOPE50ykfQ5W9mtBFMRCHb1K+8FzTeyQH/KkQv6bC+MdaU+3LEw==}
+ '@azure/msal-browser@2.39.0':
+ resolution: {integrity: sha512-kks/n2AJzKUk+DBqZhiD+7zeQGBl+WpSOQYzWy6hff3bU0ZrYFqr4keFLlzB5VKuKZog0X59/FGHb1RPBDZLVg==}
engines: {node: '>=0.8.0'}
- dependencies:
- '@azure/msal-common': 12.0.0
- dev: true
- /@azure/msal-common@12.0.0:
- resolution: {integrity: sha512-SvQl4JWy1yZnxyq0xng/urf103wz68UJG0K9Dq2NM2to7ePA+R1hMisKnXELJvZrEGYANGbh/Hc0T9piGqOteQ==}
+ '@azure/msal-common@13.3.1':
+ resolution: {integrity: sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==}
engines: {node: '>=0.8.0'}
- dev: true
- /@azure/msal-common@7.6.0:
+ '@azure/msal-common@13.3.3':
+ resolution: {integrity: sha512-n278DdCXKeiWhLwhEL7/u9HRMyzhUXLefeajiknf6AmEedoiOiv2r5aRJ7LXdT3NGPyubkdIbthaJlVtmuEqvA==}
+ engines: {node: '>=0.8.0'}
+
+ '@azure/msal-common@7.6.0':
resolution: {integrity: sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==}
engines: {node: '>=0.8.0'}
- dev: true
- /@azure/msal-node@1.17.0:
- resolution: {integrity: sha512-aOKykKxDc+Kf5vcdOUPdKlJ96YAIyrHyl4W8RyfMqw0iApDckOuhejNwlZr6/M7U40wo1Wj4PwxRVx7d8OFBFg==}
+ '@azure/msal-node@1.18.4':
+ resolution: {integrity: sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==}
engines: {node: 10 || 12 || 14 || 16 || 18}
- dependencies:
- '@azure/msal-common': 12.0.0
- jsonwebtoken: 9.0.0
- uuid: 8.3.2
- dev: true
+ deprecated: A newer major version of this library is available. Please upgrade to the latest available version.
- /@babel/code-frame@7.18.6:
- resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
+ '@babel/code-frame@7.24.7':
+ resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.18.6
- dev: false
- /@babel/generator@7.21.3:
- resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
+ '@babel/compat-data@7.24.7':
+ resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.21.3
- '@jridgewell/gen-mapping': 0.3.2
- '@jridgewell/trace-mapping': 0.3.17
- jsesc: 2.5.2
- dev: false
- /@babel/helper-annotate-as-pure@7.18.6:
- resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+ '@babel/core@7.24.7':
+ resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.21.3
- dev: false
- /@babel/helper-environment-visitor@7.18.9:
- resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
+ '@babel/generator@7.24.7':
+ resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==}
engines: {node: '>=6.9.0'}
- dev: false
- /@babel/helper-function-name@7.21.0:
- resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
+ '@babel/helper-annotate-as-pure@7.24.7':
+ resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.20.7
- '@babel/types': 7.21.3
- dev: false
- /@babel/helper-hoist-variables@7.18.6:
- resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
+ '@babel/helper-compilation-targets@7.24.7':
+ resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.21.3
- dev: false
- /@babel/helper-module-imports@7.18.6:
- resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+ '@babel/helper-environment-visitor@7.24.7':
+ resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.21.3
- dev: false
- /@babel/helper-split-export-declaration@7.18.6:
- resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
+ '@babel/helper-function-name@7.24.7':
+ resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.21.3
- dev: false
- /@babel/helper-string-parser@7.19.4:
- resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ '@babel/helper-hoist-variables@7.24.7':
+ resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
engines: {node: '>=6.9.0'}
- dev: false
- /@babel/helper-validator-identifier@7.19.1:
- resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
+ '@babel/helper-module-imports@7.24.7':
+ resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
engines: {node: '>=6.9.0'}
- dev: false
- /@babel/highlight@7.18.6:
- resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
+ '@babel/helper-module-transforms@7.24.7':
+ resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.24.7':
+ resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-simple-access@7.24.7':
+ resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-split-export-declaration@7.24.7':
+ resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.24.7':
+ resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.24.7':
+ resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.24.7':
+ resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.19.1
- chalk: 2.4.2
- js-tokens: 4.0.0
- dev: false
- /@babel/parser@7.21.3:
- resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
+ '@babel/helpers@7.24.7':
+ resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/highlight@7.24.7':
+ resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.24.7':
+ resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==}
engines: {node: '>=6.0.0'}
hasBin: true
- dependencies:
- '@babel/types': 7.21.3
- dev: false
- /@babel/runtime@7.21.0:
- resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==}
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- regenerator-runtime: 0.13.11
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- /@babel/template@7.20.7:
- resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
+ '@babel/runtime@7.24.7':
+ resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@babel/parser': 7.21.3
- '@babel/types': 7.21.3
- dev: false
- /@babel/traverse@7.21.3(supports-color@5.5.0):
- resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
+ '@babel/template@7.24.7':
+ resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@babel/generator': 7.21.3
- '@babel/helper-environment-visitor': 7.18.9
- '@babel/helper-function-name': 7.21.0
- '@babel/helper-hoist-variables': 7.18.6
- '@babel/helper-split-export-declaration': 7.18.6
- '@babel/parser': 7.21.3
- '@babel/types': 7.21.3
- debug: 4.3.4(supports-color@5.5.0)
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@babel/types@7.21.3:
- resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
+ '@babel/traverse@7.24.7':
+ resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.24.7':
+ resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.19.4
- '@babel/helper-validator-identifier': 7.19.1
- to-fast-properties: 2.0.0
- dev: false
- /@cspotcode/source-map-support@0.8.1:
+ '@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
- dependencies:
- '@jridgewell/trace-mapping': 0.3.9
- dev: true
- /@emotion/babel-plugin@11.10.6:
- resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==}
- dependencies:
- '@babel/helper-module-imports': 7.18.6
- '@babel/runtime': 7.21.0
- '@emotion/hash': 0.9.0
- '@emotion/memoize': 0.8.0
- '@emotion/serialize': 1.1.1
- babel-plugin-macros: 3.1.0
- convert-source-map: 1.9.0
- escape-string-regexp: 4.0.0
- find-root: 1.1.0
- source-map: 0.5.7
- stylis: 4.1.3
- dev: false
+ '@emotion/babel-plugin@11.11.0':
+ resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
- /@emotion/cache@11.10.5:
- resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==}
- dependencies:
- '@emotion/memoize': 0.8.0
- '@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.0
- '@emotion/weak-memoize': 0.3.0
- stylis: 4.1.3
- dev: false
+ '@emotion/cache@11.11.0':
+ resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
- /@emotion/hash@0.9.0:
- resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==}
- dev: false
+ '@emotion/hash@0.9.1':
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
- /@emotion/is-prop-valid@1.2.0:
- resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==}
- dependencies:
- '@emotion/memoize': 0.8.0
- dev: false
+ '@emotion/is-prop-valid@1.2.2':
+ resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==}
- /@emotion/memoize@0.8.0:
- resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==}
- dev: false
+ '@emotion/memoize@0.8.1':
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
- /@emotion/react@11.10.6(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==}
+ '@emotion/react@11.11.4':
+ resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==}
peerDependencies:
'@types/react': '*'
react: '>=16.8.0'
peerDependenciesMeta:
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/babel-plugin': 11.10.6
- '@emotion/cache': 11.10.5
- '@emotion/serialize': 1.1.1
- '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
- '@emotion/utils': 1.2.0
- '@emotion/weak-memoize': 0.3.0
- '@types/react': 18.0.28
- hoist-non-react-statics: 3.3.2
- react: 18.2.0
- dev: false
- /@emotion/serialize@1.1.1:
- resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==}
- dependencies:
- '@emotion/hash': 0.9.0
- '@emotion/memoize': 0.8.0
- '@emotion/unitless': 0.8.0
- '@emotion/utils': 1.2.0
- csstype: 3.1.1
- dev: false
+ '@emotion/serialize@1.1.4':
+ resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==}
- /@emotion/sheet@1.2.1:
- resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==}
- dev: false
+ '@emotion/sheet@1.2.2':
+ resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
- /@emotion/styled@11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==}
+ '@emotion/styled@11.11.5':
+ resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==}
peerDependencies:
'@emotion/react': ^11.0.0-rc.0
'@types/react': '*'
@@ -603,163 +475,97 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/babel-plugin': 11.10.6
- '@emotion/is-prop-valid': 1.2.0
- '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0)
- '@emotion/serialize': 1.1.1
- '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
- '@emotion/utils': 1.2.0
- '@types/react': 18.0.28
- react: 18.2.0
- dev: false
- /@emotion/stylis@0.8.5:
+ '@emotion/stylis@0.8.5':
resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==}
- dev: false
- /@emotion/unitless@0.7.5:
+ '@emotion/unitless@0.7.5':
resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
- dev: false
- /@emotion/unitless@0.8.0:
- resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==}
- dev: false
+ '@emotion/unitless@0.8.1':
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
- /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==}
+ '@emotion/use-insertion-effect-with-fallbacks@1.0.1':
+ resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==}
peerDependencies:
react: '>=16.8.0'
- dependencies:
- react: 18.2.0
- dev: false
- /@emotion/utils@1.2.0:
- resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==}
- dev: false
+ '@emotion/utils@1.2.1':
+ resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
- /@emotion/weak-memoize@0.3.0:
- resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==}
- dev: false
+ '@emotion/weak-memoize@0.3.1':
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
- /@eslint/eslintrc@1.4.1:
+ '@eslint/eslintrc@1.4.1':
resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- ajv: 6.12.6
- debug: 4.3.4(supports-color@5.5.0)
- espree: 9.5.0
- globals: 13.20.0
- ignore: 5.2.4
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@floating-ui/core@0.7.3:
- resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==}
- dev: false
+ '@floating-ui/core@1.6.4':
+ resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==}
- /@floating-ui/dom@0.5.4:
- resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==}
- dependencies:
- '@floating-ui/core': 0.7.3
- dev: false
+ '@floating-ui/dom@1.6.7':
+ resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==}
- /@floating-ui/react-dom@0.7.2(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==}
+ '@floating-ui/react-dom@2.1.1':
+ resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
- dependencies:
- '@floating-ui/dom': 0.5.4
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.28)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
- /@headlessui/react@1.7.14(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==}
+ '@floating-ui/utils@0.2.4':
+ resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==}
+
+ '@headlessui/react@1.7.19':
+ resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
engines: {node: '>=10'}
peerDependencies:
react: ^16 || ^17 || ^18
react-dom: ^16 || ^17 || ^18
- dependencies:
- client-only: 0.0.1
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
- /@heroicons/react@2.0.17(react@18.2.0):
- resolution: {integrity: sha512-90GMZktkA53YbNzHp6asVEDevUQCMtxWH+2UK2S8OpnLEu7qckTJPhNxNQG52xIR1WFTwFqtH6bt7a60ZNcLLA==}
+ '@heroicons/react@2.1.4':
+ resolution: {integrity: sha512-ju0wj0wwrUTMQ2Yceyrma7TKuI3BpSjp+qKqV81K9KGcUHdvTMdiwfRc2cwXBp3uXtKuDZkh0v03nWOQnJFv2Q==}
peerDependencies:
react: '>= 16'
- dependencies:
- react: 18.2.0
- dev: false
- /@humanwhocodes/config-array@0.9.5:
+ '@humanwhocodes/config-array@0.9.5':
resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==}
engines: {node: '>=10.10.0'}
- dependencies:
- '@humanwhocodes/object-schema': 1.2.1
- debug: 4.3.4(supports-color@5.5.0)
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
+ deprecated: Use @eslint/config-array instead
- /@humanwhocodes/object-schema@1.2.1:
+ '@humanwhocodes/object-schema@1.2.1':
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
- dev: true
+ deprecated: Use @eslint/object-schema instead
- /@jridgewell/gen-mapping@0.3.2:
- resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.14
- '@jridgewell/trace-mapping': 0.3.17
- dev: false
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
- dev: false
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- /@jridgewell/trace-mapping@0.3.17:
- resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: false
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
- /@jridgewell/trace-mapping@0.3.9:
+ '@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: true
- /@js-joda/core@5.5.3:
- resolution: {integrity: sha512-7dqNYwG8gCt4hfg5PKgM7xLEcgSBcx/UgC92OMnhMmvAnq11QzDFPrxUkNR/u5kn17WWLZ8beZ4A3Qrz4pZcmQ==}
- dev: true
+ '@js-joda/core@5.6.3':
+ resolution: {integrity: sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==}
- /@mui/base@5.0.0-alpha.122(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-IgZEFQyHa39J1+Q3tekVdhPuUm1fr3icddaNLmiAIeYTVXmR7KR5FhBAIL0P+4shlPq0liUPGlXryoTm0iCeFg==}
+ '@mui/base@5.0.0-beta.40':
+ resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
@@ -768,26 +574,12 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/is-prop-valid': 1.2.0
- '@mui/types': 7.2.3(@types/react@18.0.28)
- '@mui/utils': 5.11.13(react@18.2.0)
- '@popperjs/core': 2.11.7
- '@types/react': 18.0.28
- clsx: 1.2.1
- prop-types: 15.8.1
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-is: 18.2.0
- dev: false
- /@mui/core-downloads-tracker@5.11.14:
- resolution: {integrity: sha512-rfc08z6+3Fif+Gopx2/qmk+MEQlwYeA+gOcSK048BHkTty/ol/boHuVeL2BNC/cf9OVRjJLYHtVb/DeW791LSQ==}
- dev: false
+ '@mui/core-downloads-tracker@5.16.0':
+ resolution: {integrity: sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw==}
- /@mui/material@5.11.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-uoiUyybmo+M+nYARBygmbXgX6s/hH0NKD56LCAv9XvmdGVoXhEGjOvxI5/Bng6FS3NNybnA8V+rgZW1Z/9OJtA==}
+ '@mui/material@5.16.0':
+ resolution: {integrity: sha512-DbR1NckTLpjt9Zut9EGQ70th86HfN0BYQgyYro6aXQrNfjzSwe3BJS1AyBQ5mJ7TdL6YVRqohfukxj9JlqZZUg==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@@ -802,28 +594,9 @@ packages:
optional: true
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0)
- '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0)
- '@mui/base': 5.0.0-alpha.122(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@mui/core-downloads-tracker': 5.11.14
- '@mui/system': 5.11.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react@18.2.0)
- '@mui/types': 7.2.3(@types/react@18.0.28)
- '@mui/utils': 5.11.13(react@18.2.0)
- '@types/react': 18.0.28
- '@types/react-transition-group': 4.4.5
- clsx: 1.2.1
- csstype: 3.1.1
- prop-types: 15.8.1
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-is: 18.2.0
- react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
- dev: false
-
- /@mui/private-theming@5.11.13(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-PJnYNKzW5LIx3R+Zsp6WZVPs6w5sEKJ7mgLNnUXuYB1zo5aX71FVLtV7geyPXRcaN2tsoRNK7h444ED0t7cIjA==}
+
+ '@mui/private-theming@5.16.0':
+ resolution: {integrity: sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
@@ -831,16 +604,9 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@mui/utils': 5.11.13(react@18.2.0)
- '@types/react': 18.0.28
- prop-types: 15.8.1
- react: 18.2.0
- dev: false
- /@mui/styled-engine-sc@5.11.11(styled-components@5.3.9):
- resolution: {integrity: sha512-6+HsfcKHlhjQklDoEup7Itl+Xgn+BCsqEpIdIIhlxED4YlOZ38xghxIKrx78XFZznTorbhAspUgDDKIaB5vDMg==}
+ '@mui/styled-engine-sc@5.14.12':
+ resolution: {integrity: sha512-FQ5KDd17OkRurE0ljR4Pddekv1uPSoJxcBqXa9tdoOETGULVCefM5Gd9CRGzT+alNPDyHBoUeEYKulIkDN9ytA==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/styled-components': ^5.1.14
@@ -848,14 +614,9 @@ packages:
peerDependenciesMeta:
'@types/styled-components':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- prop-types: 15.8.1
- styled-components: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)
- dev: false
- /@mui/styled-engine@5.11.11(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0):
- resolution: {integrity: sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==}
+ '@mui/styled-engine@5.15.14':
+ resolution: {integrity: sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.4.1
@@ -866,18 +627,9 @@ packages:
optional: true
'@emotion/styled':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/cache': 11.10.5
- '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0)
- '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0)
- csstype: 3.1.1
- prop-types: 15.8.1
- react: 18.2.0
- dev: false
- /@mui/system@5.11.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-/MBv5dUoijJNEKEGi5tppIszGN0o2uejmeISi5vl0CLcaQsI1cd+uBgK+JYUP1VWvI/MtkWRLVSWtF2FWhu5Nw==}
+ '@mui/system@5.16.0':
+ resolution: {integrity: sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@@ -891,1966 +643,5594 @@ packages:
optional: true
'@types/react':
optional: true
- dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0)
- '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0)
- '@mui/private-theming': 5.11.13(@types/react@18.0.28)(react@18.2.0)
- '@mui/styled-engine': 5.11.11(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0)
- '@mui/types': 7.2.3(@types/react@18.0.28)
- '@mui/utils': 5.11.13(react@18.2.0)
- '@types/react': 18.0.28
- clsx: 1.2.1
- csstype: 3.1.1
- prop-types: 15.8.1
- react: 18.2.0
- dev: false
- /@mui/types@7.2.3(@types/react@18.0.28):
- resolution: {integrity: sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==}
+ '@mui/types@7.2.14':
+ resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==}
peerDependencies:
- '@types/react': '*'
+ '@types/react': ^17.0.0 || ^18.0.0
peerDependenciesMeta:
'@types/react':
optional: true
- dependencies:
- '@types/react': 18.0.28
- dev: false
- /@mui/utils@5.11.13(react@18.2.0):
- resolution: {integrity: sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==}
+ '@mui/utils@5.16.0':
+ resolution: {integrity: sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==}
engines: {node: '>=12.0.0'}
peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
- dependencies:
- '@babel/runtime': 7.21.0
- '@types/prop-types': 15.7.5
- '@types/react-is': 17.0.3
- prop-types: 15.8.1
- react: 18.2.0
- react-is: 18.2.0
- dev: false
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- /@nem035/gpt-3-encoder@1.1.7:
+ '@nem035/gpt-3-encoder@1.1.7':
resolution: {integrity: sha512-dtOenP4ZAmsKXkobTDUCcbkQvPJbuJ6Kp/LHqWDYLK//XNgGs3Re8ymcQzyVhtph8JckdI3K8FR5Q+6mX7HnpQ==}
- dev: true
- /@next-auth/prisma-adapter@1.0.6(@prisma/client@4.13.0)(next-auth@4.22.1):
- resolution: {integrity: sha512-Z7agwfSZEeEcqKqrnisBun7VndRPshd6vyDsoRU68MXbkui8storkHgvN2hnNDrqr/hSCF9aRn56a1qpihaB4A==}
+ '@next-auth/prisma-adapter@1.0.7':
+ resolution: {integrity: sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==}
peerDependencies:
'@prisma/client': '>=2.26.0 || >=3'
next-auth: ^4
- dependencies:
- '@prisma/client': 4.13.0(prisma@4.13.0)
- next-auth: 4.22.1(next@13.2.4)(nodemailer@6.9.1)(react-dom@18.2.0)(react@18.2.0)
- dev: false
- /@next/env@13.2.4:
- resolution: {integrity: sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA==}
- dev: false
+ '@next/env@13.5.6':
+ resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==}
- /@next/eslint-plugin-next@12.2.3:
+ '@next/eslint-plugin-next@12.2.3':
resolution: {integrity: sha512-B2e8Yg1MpuLsGxhCx4rU8/Tcnr5wFmCx1O2eyLXBPnaCcsFXfGCo067ujagtDLtWASL3GNgzg78U1SB0dbc38A==}
- dependencies:
- glob: 7.1.7
- dev: true
-
- /@next/swc-android-arm-eabi@13.2.4:
- resolution: {integrity: sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
- /@next/swc-android-arm64@13.2.4:
- resolution: {integrity: sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-darwin-arm64@13.2.4:
- resolution: {integrity: sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==}
+ '@next/swc-darwin-arm64@13.5.6':
+ resolution: {integrity: sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-darwin-x64@13.2.4:
- resolution: {integrity: sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==}
+ '@next/swc-darwin-x64@13.5.6':
+ resolution: {integrity: sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /@next/swc-freebsd-x64@13.2.4:
- resolution: {integrity: sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: false
- optional: true
-
- /@next/swc-linux-arm-gnueabihf@13.2.4:
- resolution: {integrity: sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-linux-arm64-gnu@13.2.4:
- resolution: {integrity: sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==}
+ '@next/swc-linux-arm64-gnu@13.5.6':
+ resolution: {integrity: sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-linux-arm64-musl@13.2.4:
- resolution: {integrity: sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==}
+ '@next/swc-linux-arm64-musl@13.5.6':
+ resolution: {integrity: sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-linux-x64-gnu@13.2.4:
- resolution: {integrity: sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==}
+ '@next/swc-linux-x64-gnu@13.5.6':
+ resolution: {integrity: sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-linux-x64-musl@13.2.4:
- resolution: {integrity: sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==}
+ '@next/swc-linux-x64-musl@13.5.6':
+ resolution: {integrity: sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-win32-arm64-msvc@13.2.4:
- resolution: {integrity: sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==}
+ '@next/swc-win32-arm64-msvc@13.5.6':
+ resolution: {integrity: sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-win32-ia32-msvc@13.2.4:
- resolution: {integrity: sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==}
+ '@next/swc-win32-ia32-msvc@13.5.6':
+ resolution: {integrity: sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- requiresBuild: true
- dev: false
- optional: true
- /@next/swc-win32-x64-msvc@13.2.4:
- resolution: {integrity: sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==}
+ '@next/swc-win32-x64-msvc@13.5.6':
+ resolution: {integrity: sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- requiresBuild: true
- dev: false
- optional: true
- /@nodelib/fs.scandir@2.1.5:
+ '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
- dev: true
- /@nodelib/fs.stat@2.0.5:
+ '@nodelib/fs.stat@2.0.5':
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
- dev: true
- /@nodelib/fs.walk@1.2.8:
+ '@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.15.0
- dev: true
- /@panva/hkdf@1.1.1:
- resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==}
- dev: false
+ '@panva/hkdf@1.2.1':
+ resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
- /@popperjs/core@2.11.7:
- resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==}
- dev: false
+ '@popperjs/core@2.11.8':
+ resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- /@prisma/client@4.13.0(prisma@4.13.0):
+ '@prisma/client@4.13.0':
resolution: {integrity: sha512-YaiiICcRB2hatxsbnfB66uWXjcRw3jsZdlAVxmx0cFcTc/Ad/sKdHCcWSnqyDX47vAewkjRFwiLwrOUjswVvmA==}
engines: {node: '>=14.17'}
- requiresBuild: true
peerDependencies:
prisma: '*'
peerDependenciesMeta:
prisma:
optional: true
- dependencies:
- '@prisma/engines-version': 4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a
- prisma: 4.13.0
- dev: false
- /@prisma/engines-version@4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a:
+ '@prisma/engines-version@4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a':
resolution: {integrity: sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ==}
- dev: false
- /@prisma/engines@4.13.0:
- resolution: {integrity: sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw==}
- requiresBuild: true
+ '@prisma/engines@4.16.2':
+ resolution: {integrity: sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==}
- /@radix-ui/number@1.0.0:
- resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==}
- dependencies:
- '@babel/runtime': 7.21.0
- dev: false
+ '@radix-ui/number@1.0.1':
+ resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==}
- /@radix-ui/primitive@1.0.0:
- resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
- dependencies:
- '@babel/runtime': 7.21.0
- dev: false
+ '@radix-ui/number@1.1.0':
+ resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==}
+
+ '@radix-ui/primitive@1.0.1':
+ resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==}
- /@radix-ui/react-arrow@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==}
+ '@radix-ui/primitive@1.1.0':
+ resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
+
+ '@radix-ui/react-arrow@1.0.3':
+ resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==}
peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@radix-ui/react-collection@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==}
+ '@radix-ui/react-arrow@1.1.0':
+ resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==}
peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@radix-ui/react-compose-refs@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
+ '@radix-ui/react-checkbox@1.1.1':
+ resolution: {integrity: sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==}
peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@radix-ui/react-context@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
+ '@radix-ui/react-collection@1.0.3':
+ resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==}
peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@radix-ui/react-direction@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==}
+ '@radix-ui/react-collection@1.1.0':
+ resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@radix-ui/react-dismissable-layer@1.0.3(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==}
+ '@radix-ui/react-compose-refs@1.0.1':
+ resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
peerDependencies:
+ '@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- /@radix-ui/react-dropdown-menu@2.0.4(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==}
+ '@radix-ui/react-compose-refs@1.1.0':
+ resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.0.1':
+ resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.1.0':
+ resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-direction@1.0.1':
+ resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-direction@1.1.0':
+ resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.0.4':
+ resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.0':
+ resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.1.1':
+ resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.0.1':
+ resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.0':
+ resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.0.3':
+ resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.0':
+ resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-icons@1.3.0':
+ resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==}
+ peerDependencies:
+ react: ^16.x || ^17.x || ^18.x
+
+ '@radix-ui/react-id@1.0.1':
+ resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-id@1.1.0':
+ resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-menu@2.1.1':
+ resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popover@1.1.1':
+ resolution: {integrity: sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.1.2':
+ resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.0':
+ resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.0.3':
+ resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.1':
+ resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.0':
+ resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@1.0.3':
+ resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.0.0':
+ resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.0':
+ resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-scroll-area@1.1.0':
+ resolution: {integrity: sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-select@1.2.2':
+ resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.0.2':
+ resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-slot@1.1.0':
+ resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tooltip@1.1.2':
+ resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.0.1':
+ resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.0':
+ resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.0.1':
+ resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.1.0':
+ resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.0.3':
+ resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.0':
+ resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.0.1':
+ resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.0':
+ resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.0.1':
+ resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.1.0':
+ resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.0.1':
+ resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.0':
+ resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.0.1':
+ resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.0':
+ resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.0.3':
+ resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.1.0':
+ resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/rect@1.0.1':
+ resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==}
+
+ '@radix-ui/rect@1.1.0':
+ resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+
+ '@rushstack/eslint-patch@1.10.3':
+ resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==}
+
+ '@stripe/stripe-js@1.54.2':
+ resolution: {integrity: sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg==}
+
+ '@swc/helpers@0.5.2':
+ resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
+
+ '@tailwindcss/typography@0.5.13':
+ resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || insiders'
+
+ '@tanem/svg-injector@10.1.68':
+ resolution: {integrity: sha512-UkJajeR44u73ujtr5GVSbIlELDWD/mzjqWe54YMK61ljKxFcJoPd9RBSaO7xj02ISCWUqJW99GjrS+sVF0UnrA==}
+
+ '@tanstack/react-virtual@3.8.1':
+ resolution: {integrity: sha512-dP5a7giEM4BQWLJ7K07ToZv8rF51mzbrBMkf0scg1QNYuFx3utnPUBPUHdzaowZhIez1K2XS78amuzD+YGRA5Q==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@tanstack/virtual-core@3.8.1':
+ resolution: {integrity: sha512-uNtAwenT276M9QYCjTBoHZ8X3MUeCRoGK59zPi92hMIxdfS9AyHjkDWJ94WroDxnv48UE+hIeo21BU84jKc8aQ==}
+
+ '@tediousjs/connection-string@0.5.0':
+ resolution: {integrity: sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
+ '@types/js-cookie@2.2.7':
+ resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/lodash-es@4.17.12':
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
+
+ '@types/lodash@4.17.6':
+ resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==}
+
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+
+ '@types/micro-cors@0.1.5':
+ resolution: {integrity: sha512-BTHpXEz+yC/7/Jv2BfDFbGtgnwdKUDVX2PY+Cd2k4Jx9+uUfVooAxhlGEy6p0Uvm0+yM5FgSyc1n2tdVHyCDbw==}
+
+ '@types/micro@7.3.7':
+ resolution: {integrity: sha512-MFsX7eCj0Tg3TtphOQvANNvNtFpya+s/rYOCdV6o+DFjOQPFi2EVRbBALjbbgZTXUaJP1Q281MJiJOD40d0UxQ==}
+
+ '@types/ms@0.7.34':
+ resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+
+ '@types/mssql@8.1.2':
+ resolution: {integrity: sha512-hoDM+mZUClfXu0J1pyVdbhv2Ve0dl0TdagAE3M5rd1slqoVEEHuNObPD+giwtJgyo99CcS58qbF9ektVKdxSfQ==}
+
+ '@types/node@18.19.39':
+ resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==}
+
+ '@types/parse-json@4.0.2':
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+
+ '@types/pg@8.11.6':
+ resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
+
+ '@types/prop-types@15.7.12':
+ resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+
+ '@types/react-dom@18.3.0':
+ resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+
+ '@types/react-syntax-highlighter@15.5.13':
+ resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
+
+ '@types/react-transition-group@4.4.10':
+ resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==}
+
+ '@types/react@18.3.3':
+ resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+
+ '@types/request-ip@0.0.37':
+ resolution: {integrity: sha512-uw6/i3rQnpznxD7LtLaeuZytLhKZK6bRoTS6XVJlwxIOoOpEBU7bgKoVXDNtOg4Xl6riUKHa9bjMVrL6ESqYlQ==}
+
+ '@types/tedious@4.0.14':
+ resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
+
+ '@types/unist@2.0.10':
+ resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
+
+ '@types/uuid@9.0.8':
+ resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+
+ '@typescript-eslint/parser@5.62.0':
+ resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/types@5.62.0':
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/typescript-estree@5.62.0':
+ resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@vercel/analytics@0.1.11':
+ resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
+ peerDependencies:
+ react: ^16.8||^17||^18
+
+ '@xobotyi/scrollbar-width@1.9.5':
+ resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.12.1:
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@7.1.1:
+ resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
+ engines: {node: '>= 14'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@4.1.0:
+ resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-hidden@1.2.4:
+ resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
+ engines: {node: '>=10'}
+
+ aria-query@5.1.3:
+ resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+
+ array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+ engines: {node: '>= 0.4'}
+
+ array-includes@3.1.8:
+ resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
+ engines: {node: '>= 0.4'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ array.prototype.findlast@1.2.5:
+ resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.findlastindex@1.2.5:
+ resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flat@1.3.2:
+ resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.2:
+ resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.toreversed@1.1.2:
+ resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==}
+
+ array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
+ engines: {node: '>= 0.4'}
+
+ ast-types-flow@0.0.8:
+ resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ autoprefixer@10.4.19:
+ resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axe-core@4.9.1:
+ resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==}
+ engines: {node: '>=4'}
+
+ axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+
+ axobject-query@3.1.1:
+ resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+
+ babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+
+ babel-plugin-styled-components@2.1.4:
+ resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==}
+ peerDependencies:
+ styled-components: '>= 2'
+
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bl@5.1.0:
+ resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-equal-constant-time@1.0.1:
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
+
+ bytes@3.1.0:
+ resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
+ engines: {node: '>= 0.8'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ camelize@1.0.1:
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
+
+ caniuse-lite@1.0.30001640:
+ resolution: {integrity: sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ character-entities-legacy@1.1.4:
+ resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+
+ character-entities@1.2.4:
+ resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@1.1.4:
+ resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ comma-separated-tokens@1.0.8:
+ resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ content-type@1.0.4:
+ resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+
+ copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+
+ cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ css-color-keywords@1.0.0:
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
+
+ css-in-js-utils@3.1.0:
+ resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==}
+
+ css-to-react-native@3.2.0:
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ damerau-levenshtein@1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+
+ data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+ engines: {node: '>= 0.4'}
+
+ dayjs@1.11.11:
+ resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==}
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+
+ deep-equal@2.2.3:
+ resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
+ engines: {node: '>= 0.4'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ denque@2.1.0:
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
+ engines: {node: '>=0.10'}
+
+ depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dom-helpers@5.2.1:
+ resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ ecdsa-sig-formatter@1.0.11:
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+
+ electron-to-chromium@1.4.816:
+ resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ env-cmd@10.1.0:
+ resolution: {integrity: sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ error-stack-parser@2.1.4:
+ resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
+ es-abstract@1.23.3:
+ resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
+ engines: {node: '>= 0.4'}
+
+ es-aggregate-error@1.0.13:
+ resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-get-iterator@1.1.3:
+ resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+
+ es-iterator-helpers@1.0.19:
+ resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.0.3:
+ resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+ engines: {node: '>= 0.4'}
+
+ es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+
+ es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ eslint-config-next@12.2.3:
+ resolution: {integrity: sha512-xAQqAqwa2bu9ZMRypz58ym4tNCo22Wc6LuoLpbpf3yW5c4ZkVib9934AgGDDvh2zKrP56Z6X0Pp6gNnuuZzcRw==}
+ peerDependencies:
+ eslint: ^7.23.0 || ^8.0.0
+ typescript: '>=3.3.1'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ eslint-config-prettier@8.10.0:
+ resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+
+ eslint-import-resolver-typescript@2.7.1:
+ resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+
+ eslint-module-utils@2.8.1:
+ resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+
+ eslint-plugin-import@2.29.1:
+ resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+
+ eslint-plugin-jsx-a11y@6.9.0:
+ resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+
+ eslint-plugin-prettier@4.2.1:
+ resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ eslint: '>=7.28.0'
+ eslint-config-prettier: '*'
+ prettier: '>=2.0.0'
+ peerDependenciesMeta:
+ eslint-config-prettier:
+ optional: true
+
+ eslint-plugin-react-hooks@4.6.2:
+ resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+
+ eslint-plugin-react@7.34.3:
+ resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-utils@3.0.0:
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+
+ eslint-visitor-keys@2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@8.20.0:
+ resolution: {integrity: sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ eventsource-parser@1.1.2:
+ resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==}
+ engines: {node: '>=14.18'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-shallow-equal@1.0.0:
+ resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==}
+
+ fastest-stable-stringify@2.0.2:
+ resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fault@1.0.4:
+ resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ foreground-child@3.2.1:
+ resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
+ engines: {node: '>=14'}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
+
+ functional-red-black-tree@1.0.1:
+ resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ generate-function@2.3.1:
+ resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
+ get-symbol-description@1.0.2:
+ resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ glob@10.4.2:
+ resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==}
+ engines: {node: '>=16 || 14 >=14.18'}
+ hasBin: true
+
+ glob@7.1.7:
+ resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ goober@2.1.14:
+ resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==}
+ peerDependencies:
+ csstype: ^3.0.10
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hast-util-parse-selector@2.2.5:
+ resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
+
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
+ hastscript@6.0.0:
+ resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
+
+ highlight.js@10.7.3:
+ resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
+
+ highlight.js@11.9.0:
+ resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==}
+ engines: {node: '>=12.0.0'}
+
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+
+ html-parse-stringify@3.0.1:
+ resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
+
+ http-errors@1.7.3:
+ resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
+ engines: {node: '>= 0.6'}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.5:
+ resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
+ engines: {node: '>= 14'}
+
+ hyphenate-style-name@1.1.0:
+ resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
+
+ i18next@22.5.1:
+ resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+
+ inline-style-prefixer@7.0.1:
+ resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==}
+
+ internal-slot@1.0.7:
+ resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
+ engines: {node: '>= 0.4'}
+
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
+ is-alphabetical@1.0.4:
+ resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+
+ is-alphanumerical@1.0.4:
+ resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.4:
+ resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-async-function@2.0.0:
+ resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+
+ is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.14.0:
+ resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+
+ is-decimal@1.0.4:
+ resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.0.2:
+ resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hexadecimal@1.0.4:
+ resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-property@1.0.2:
+ resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
+
+ is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
+ engines: {node: '>= 0.4'}
+
+ is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+
+ is-weakset@2.0.3:
+ resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==}
+ engines: {node: '>= 0.4'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ iterator.prototype@1.1.2:
+ resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+
+ jackspeak@3.4.0:
+ resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==}
+ engines: {node: '>=14'}
+
+ jiti@1.21.6:
+ resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
+ hasBin: true
+
+ jose@4.15.9:
+ resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==}
+
+ js-cookie@2.2.1:
+ resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==}
+
+ js-md4@0.3.2:
+ resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsbi@4.3.0:
+ resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==}
+
+ jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonwebtoken@9.0.2:
+ resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
+ engines: {node: '>=12', npm: '>=6'}
+
+ jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+
+ jwa@1.4.1:
+ resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
+
+ jwa@2.0.0:
+ resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
+
+ jws@3.2.2:
+ resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
+
+ jws@4.0.0:
+ resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
+ language-subtag-registry@0.3.23:
+ resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
+
+ language-tags@1.0.9:
+ resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
+ engines: {node: '>=0.10'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
+ lilconfig@3.1.2:
+ resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash.castarray@4.4.0:
+ resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
+
+ lodash.includes@4.3.0:
+ resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
+
+ lodash.isboolean@3.0.3:
+ resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
+
+ lodash.isinteger@4.0.4:
+ resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
+
+ lodash.isnumber@3.0.3:
+ resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.isstring@4.0.1:
+ resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.once@4.1.1:
+ resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ long@5.2.3:
+ resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
+
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lowlight@1.20.0:
+ resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+
+ lru-cache@10.3.0:
+ resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==}
+ engines: {node: 14 || >=16.14}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
+ lru-cache@8.0.5:
+ resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==}
+ engines: {node: '>=16.14'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ markdown-table@3.0.3:
+ resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+
+ mdast-util-definitions@5.1.2:
+ resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+
+ mdast-util-find-and-replace@2.2.2:
+ resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
+
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+
+ mdast-util-gfm-autolink-literal@1.0.3:
+ resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+
+ mdast-util-gfm-footnote@1.0.2:
+ resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
+
+ mdast-util-gfm-strikethrough@1.0.3:
+ resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+
+ mdast-util-gfm-table@1.0.7:
+ resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+
+ mdast-util-gfm-task-list-item@1.0.2:
+ resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+
+ mdast-util-gfm@2.0.2:
+ resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
+
+ mdast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+
+ mdast-util-to-hast@12.3.0:
+ resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+
+ mdast-util-to-markdown@1.5.0:
+ resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micro-cors@0.1.1:
+ resolution: {integrity: sha512-6WqIahA5sbQR1Gjexp1VuWGFDKbZZleJb/gy1khNGk18a6iN1FdTcr3Q8twaxkV5H94RjxIBjirYbWCehpMBFw==}
+ engines: {node: '>=6'}
+
+ micro@10.0.1:
+ resolution: {integrity: sha512-9uwZSsUrqf6+4FLLpiPj5TRWQv5w5uJrJwsx1LR/TjqvQmKC1XnGQ9OHrFwR3cbZ46YqPqxO/XJCOpWnqMPw2Q==}
+ engines: {node: '>= 16.0.0'}
+ hasBin: true
+
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+
+ micromark-extension-gfm-autolink-literal@1.0.5:
+ resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
+
+ micromark-extension-gfm-footnote@1.1.2:
+ resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
+
+ micromark-extension-gfm-strikethrough@1.0.7:
+ resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
+
+ micromark-extension-gfm-table@1.0.7:
+ resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
+
+ micromark-extension-gfm-tagfilter@1.0.2:
+ resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
+
+ micromark-extension-gfm-task-list-item@1.0.5:
+ resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
+
+ micromark-extension-gfm@2.0.3:
+ resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
+
+ micromark-factory-destination@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+
+ micromark-factory-space@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+
+ micromark-util-html-tag-name@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+
+ micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mssql@9.3.2:
+ resolution: {integrity: sha512-XI5GOGCCSSNL8K2SSXg9HMyugJoCjLmrhiZfcZrJrJ2r3NfTcnz3Cegeg4m+xPkNVd0o3owsSL/NsDCFYfjOlw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mysql2@3.10.2:
+ resolution: {integrity: sha512-KCXPEvAkO0RcHPr362O5N8tFY2fXvbjfkPvRY/wGumh4EOemo9Hm5FjQZqv/pCmrnuxGu5OxnSENG0gTXqKMgQ==}
+ engines: {node: '>= 8.0'}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ named-placeholders@1.1.3:
+ resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==}
+ engines: {node: '>=12.0.0'}
+
+ nano-css@5.6.1:
+ resolution: {integrity: sha512-T2Mhc//CepkTa3X4pUhKgbEheJHYAxD0VptuqFhDbGMUWVV2m+lkNiW/Ieuj35wrfC8Zm0l7HvssQh7zcEttSw==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ native-duplexpair@1.0.0:
+ resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ next-auth@4.24.7:
+ resolution: {integrity: sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==}
+ peerDependencies:
+ next: ^12.2.5 || ^13 || ^14
+ nodemailer: ^6.6.5
+ react: ^17.0.2 || ^18
+ react-dom: ^17.0.2 || ^18
+ peerDependenciesMeta:
+ nodemailer:
+ optional: true
+
+ next@13.5.6:
+ resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==}
+ engines: {node: '>=16.14.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ sass:
+ optional: true
+
+ node-abort-controller@3.1.1:
+ resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
+
+ node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+
+ nodemailer@6.9.14:
+ resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==}
+ engines: {node: '>=6.0.0'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ oauth@0.9.15:
+ resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@2.2.0:
+ resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
+ engines: {node: '>= 6'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ object.entries@1.1.8:
+ resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
+ engines: {node: '>= 0.4'}
+
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+
+ object.groupby@1.0.3:
+ resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+ engines: {node: '>= 0.4'}
+
+ object.hasown@1.1.4:
+ resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==}
+ engines: {node: '>= 0.4'}
+
+ object.values@1.2.0:
+ resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
+ engines: {node: '>= 0.4'}
+
+ obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+
+ oidc-token-hash@5.0.3:
+ resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
+ engines: {node: ^10.13.0 || >=12.0.0}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ openid-client@5.6.5:
+ resolution: {integrity: sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ package-json-from-dist@1.0.0:
+ resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-entities@2.0.0:
+ resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pg-cloudflare@1.1.1:
+ resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
+
+ pg-connection-string@2.6.4:
+ resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==}
+
+ pg-int8@1.0.1:
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
+
+ pg-numeric@1.0.2:
+ resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==}
+ engines: {node: '>=4'}
+
+ pg-pool@3.6.2:
+ resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==}
+ peerDependencies:
+ pg: '>=8.0'
+
+ pg-protocol@1.6.1:
+ resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==}
+
+ pg-types@2.2.0:
+ resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+ engines: {node: '>=4'}
+
+ pg-types@4.0.2:
+ resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==}
+ engines: {node: '>=10'}
+
+ pg@8.12.0:
+ resolution: {integrity: sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==}
+ engines: {node: '>= 8.0.0'}
+ peerDependencies:
+ pg-native: '>=3.0.1'
+ peerDependenciesMeta:
+ pg-native:
+ optional: true
+
+ pgpass@1.0.5:
+ resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-nested@6.0.1:
+ resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.0.10:
+ resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@6.1.0:
+ resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postcss@8.4.39:
+ resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postgres-array@2.0.0:
+ resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+ engines: {node: '>=4'}
+
+ postgres-array@3.0.2:
+ resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==}
+ engines: {node: '>=12'}
+
+ postgres-bytea@1.0.0:
+ resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-bytea@3.0.0:
+ resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==}
+ engines: {node: '>= 6'}
+
+ postgres-date@1.0.7:
+ resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-date@2.1.0:
+ resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==}
+ engines: {node: '>=12'}
+
+ postgres-interval@1.2.0:
+ resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-interval@3.0.0:
+ resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==}
+ engines: {node: '>=12'}
+
+ postgres-range@1.1.4:
+ resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==}
+
+ preact-render-to-string@5.2.6:
+ resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
+ peerDependencies:
+ preact: '>=10'
+
+ preact@10.22.1:
+ resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ pretty-format@3.8.0:
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
+
+ prisma@4.16.2:
+ resolution: {integrity: sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ prismjs@1.27.0:
+ resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
+ engines: {node: '>=6'}
+
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
+ property-information@5.6.0:
+ resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ qs@6.12.2:
+ resolution: {integrity: sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==}
+ engines: {node: '>=0.6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ raw-body@2.4.1:
+ resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==}
+ engines: {node: '>= 0.8'}
+
+ react-data-table-component@7.6.2:
+ resolution: {integrity: sha512-nHe7040fmtrJyQr/ieGrTfV0jBflYGK4sLokC6/AFOv3ThjmA9WzKz8Z8/2wMxzRqLU+Rn0CVFg+8+frKLepWQ==}
+ peerDependencies:
+ react: '>= 16.8.3'
+ styled-components: '>= 5.0.0'
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-hot-toast@2.4.1:
+ resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>=16'
+ react-dom: '>=16'
+
+ react-i18next@12.3.1:
+ resolution: {integrity: sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA==}
+ peerDependencies:
+ i18next: '>= 19.0.0'
+ react: '>= 16.8.0'
+ react-dom: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+
+ react-icons@4.12.0:
+ resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==}
+ peerDependencies:
+ react: '*'
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-loader-spinner@5.5.0:
+ resolution: {integrity: sha512-3y+l6RPbkfW8EMs/X7MtfiPlAPwYp+WbCtls3gZn+fDJCt0SW4TakRoj2/lExbCVxSxA6Y5M8Nly+WfhNxnFcw==}
+ deprecated: Breaking changes was include so major version was use
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+
+ react-markdown@8.0.7:
+ resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
+ react-remove-scroll-bar@2.3.6:
+ resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.5.5:
+ resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.5.7:
+ resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-style-singleton@2.2.1:
+ resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-svg@16.1.34:
+ resolution: {integrity: sha512-L4ak1qNFLgzVbHm0xQEpHoIOqb3um/B0ybahd3U2TKoGZxb0JaPVI5lsAhvSng2P1kcsYEok2Z7RpcKx7arJGw==}
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+
+ react-syntax-highlighter@15.5.0:
+ resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
+ peerDependencies:
+ react: '>= 0.14.0'
+
+ react-textarea-autosize@8.5.3:
+ resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ react-transition-group@4.4.5:
+ resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+ peerDependencies:
+ react: '>=16.6.0'
+ react-dom: '>=16.6.0'
+
+ react-universal-interface@0.6.2:
+ resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==}
+ peerDependencies:
+ react: '*'
+ tslib: '*'
+
+ react-use@17.5.0:
+ resolution: {integrity: sha512-PbfwSPMwp/hoL847rLnm/qkjg3sTRCvn6YhUZiHaUa3FA6/aNoFX79ul5Xt70O1rK+9GxSVqkY0eTwMdsR/bWg==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ reflect.getprototypeof@1.0.6:
+ resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
+ engines: {node: '>= 0.4'}
+
+ refractor@3.6.0:
+ resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
+ engines: {node: '>= 0.4'}
+
+ regexpp@3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+
+ remark-gfm@3.0.1:
+ resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+
+ remark-parse@10.0.2:
+ resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+
+ remark-rehype@10.1.0:
+ resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+
+ request-ip@3.3.0:
+ resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==}
+
+ resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
+ resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rtl-css-js@1.16.1:
+ resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
+ safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
+ engines: {node: '>=0.4'}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex-test@1.0.3:
+ resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
+ engines: {node: '>= 0.4'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ screenfull@5.2.0:
+ resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
+ engines: {node: '>=0.10.0'}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.2:
+ resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ seq-queue@0.0.5:
+ resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-harmonic-interval@1.0.1:
+ resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==}
+ engines: {node: '>=6.9'}
+
+ setprototypeof@1.1.1:
+ resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
+
+ shallowequal@1.1.0:
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.5.6:
+ resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ space-separated-tokens@1.1.5:
+ resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+ sqlstring@2.3.3:
+ resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
+ engines: {node: '>= 0.6'}
+
+ stack-generator@2.0.10:
+ resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
+
+ stackframe@1.3.4:
+ resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+
+ stacktrace-gps@3.1.2:
+ resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==}
+
+ stacktrace-js@2.0.2:
+ resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ stop-iteration-iterator@1.0.0:
+ resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
+ engines: {node: '>= 0.4'}
+
+ stoppable@1.1.0:
+ resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
+ engines: {node: '>=4', npm: '>=6'}
+
+ streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string.prototype.includes@2.0.0:
+ resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==}
+
+ string.prototype.matchall@4.0.11:
+ resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ stripe@12.18.0:
+ resolution: {integrity: sha512-cYjgBM2SY/dTm8Lr6eMyyONaHTZHA/QjHxFUIW5WH8FevSRIGAVtXEmBkUXF1fsqe7QvvRgQSGSJZmjDacegGg==}
+ engines: {node: '>=12.*'}
+
+ style-to-object@0.4.4:
+ resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+
+ styled-components@5.3.11:
+ resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
+ react-is: '>= 16.8.0'
+
+ styled-jsx@5.1.1:
+ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+
+ styled-tools@1.7.2:
+ resolution: {integrity: sha512-IjLxzM20RMwAsx8M1QoRlCG/Kmq8lKzCGyospjtSXt/BTIIcvgTonaxQAsKnBrsZNwhpHzO9ADx5te0h76ILVg==}
+
+ stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+
+ stylis@4.3.2:
+ resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ swr@2.2.5:
+ resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
+ peerDependencies:
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0
+
+ tailwind-scrollbar-hide@1.1.7:
+ resolution: {integrity: sha512-X324n9OtpTmOMqEgDUEA/RgLrNfBF/jwJdctaPZDzB3mppxJk7TLIDmOreEDm1Bq4R9LSPu4Epf8VSdovNU+iA==}
+
+ tailwindcss@3.4.4:
+ resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ tarn@3.0.2:
+ resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==}
+ engines: {node: '>=8.0.0'}
+
+ tedious@15.1.3:
+ resolution: {integrity: sha512-166EpRm5qknwhEisjZqz/mF7k14fXKJYHRg6XiAXVovd/YkyHJ3SG4Ppy89caPaNFfRr7PVYe+s4dAvKaCMFvw==}
+ engines: {node: '>=14'}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ throttle-debounce@3.0.1:
+ resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==}
+ engines: {node: '>=10'}
+
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+
+ toidentifier@1.0.0:
+ resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
+ engines: {node: '>=0.6'}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-easing@0.2.0:
+ resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+
+ tsutils@3.21.0:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ typed-array-buffer@1.0.2:
+ resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.1:
+ resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.2:
+ resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
+ engines: {node: '>= 0.4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
+ unist-util-generated@2.0.1:
+ resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
+ unist-util-position@4.0.4:
+ resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ update-browserslist-db@1.1.0:
+ resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ use-callback-ref@1.3.2:
+ resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-composed-ref@1.3.0:
+ resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ use-isomorphic-layout-effect@1.1.2:
+ resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-latest@1.2.1:
+ resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.2:
+ resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sync-external-store@1.2.0:
+ resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ use-sync-external-store@1.2.2:
+ resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-compile-cache@2.4.0:
+ resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
+
+ vfile-message@3.1.4:
+ resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
+ vfile@5.3.7:
+ resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
+ void-elements@3.1.0:
+ resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
+ engines: {node: '>=0.10.0'}
+
+ watchpack@2.4.0:
+ resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+ engines: {node: '>=10.13.0'}
+
+ which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+
+ which-builtin-type@1.1.3:
+ resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ yaml@2.4.5:
+ resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ zustand@4.5.4:
+ resolution: {integrity: sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@azure/abort-controller@1.1.0':
+ dependencies:
+ tslib: 2.6.3
+
+ '@azure/abort-controller@2.1.2':
+ dependencies:
+ tslib: 2.6.3
+
+ '@azure/core-auth@1.7.2':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ '@azure/core-util': 1.9.0
+ tslib: 2.6.3
+
+ '@azure/core-client@1.9.2':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ '@azure/core-auth': 1.7.2
+ '@azure/core-rest-pipeline': 1.16.1
+ '@azure/core-tracing': 1.1.2
+ '@azure/core-util': 1.9.0
+ '@azure/logger': 1.1.2
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@azure/core-http-compat@2.1.2':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ '@azure/core-client': 1.9.2
+ '@azure/core-rest-pipeline': 1.16.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@azure/core-lro@2.7.2':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ '@azure/core-util': 1.9.0
+ '@azure/logger': 1.1.2
+ tslib: 2.6.3
+
+ '@azure/core-paging@1.6.2':
+ dependencies:
+ tslib: 2.6.3
+
+ '@azure/core-rest-pipeline@1.16.1':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ '@azure/core-auth': 1.7.2
+ '@azure/core-tracing': 1.1.2
+ '@azure/core-util': 1.9.0
+ '@azure/logger': 1.1.2
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.5
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@azure/core-tracing@1.1.2':
+ dependencies:
+ tslib: 2.6.3
+
+ '@azure/core-util@1.9.0':
+ dependencies:
+ '@azure/abort-controller': 2.1.2
+ tslib: 2.6.3
+
+ '@azure/identity@2.1.0':
+ dependencies:
+ '@azure/abort-controller': 1.1.0
+ '@azure/core-auth': 1.7.2
+ '@azure/core-client': 1.9.2
+ '@azure/core-rest-pipeline': 1.16.1
+ '@azure/core-tracing': 1.1.2
+ '@azure/core-util': 1.9.0
+ '@azure/logger': 1.1.2
+ '@azure/msal-browser': 2.39.0
+ '@azure/msal-common': 7.6.0
+ '@azure/msal-node': 1.18.4
+ events: 3.3.0
+ jws: 4.0.0
+ open: 8.4.2
+ stoppable: 1.1.0
+ tslib: 2.6.3
+ uuid: 8.3.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@azure/keyvault-keys@4.8.0':
+ dependencies:
+ '@azure/abort-controller': 1.1.0
+ '@azure/core-auth': 1.7.2
+ '@azure/core-client': 1.9.2
+ '@azure/core-http-compat': 2.1.2
+ '@azure/core-lro': 2.7.2
+ '@azure/core-paging': 1.6.2
+ '@azure/core-rest-pipeline': 1.16.1
+ '@azure/core-tracing': 1.1.2
+ '@azure/core-util': 1.9.0
+ '@azure/logger': 1.1.2
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@azure/logger@1.1.2':
+ dependencies:
+ tslib: 2.6.3
+
+ '@azure/msal-browser@2.39.0':
+ dependencies:
+ '@azure/msal-common': 13.3.3
+
+ '@azure/msal-common@13.3.1': {}
+
+ '@azure/msal-common@13.3.3': {}
+
+ '@azure/msal-common@7.6.0': {}
+
+ '@azure/msal-node@1.18.4':
+ dependencies:
+ '@azure/msal-common': 13.3.1
+ jsonwebtoken: 9.0.2
+ uuid: 8.3.2
+
+ '@babel/code-frame@7.24.7':
+ dependencies:
+ '@babel/highlight': 7.24.7
+ picocolors: 1.0.1
+
+ '@babel/compat-data@7.24.7': {}
+
+ '@babel/core@7.24.7':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-compilation-targets': 7.24.7
+ '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7)
+ '@babel/helpers': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/template': 7.24.7
+ '@babel/traverse': 7.24.7(supports-color@5.5.0)
+ '@babel/types': 7.24.7
+ convert-source-map: 2.0.0
+ debug: 4.3.5(supports-color@5.5.0)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 2.5.2
+
+ '@babel/helper-annotate-as-pure@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@babel/helper-compilation-targets@7.24.7':
+ dependencies:
+ '@babel/compat-data': 7.24.7
+ '@babel/helper-validator-option': 7.24.7
+ browserslist: 4.23.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-environment-visitor@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@babel/helper-function-name@7.24.7':
+ dependencies:
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
+
+ '@babel/helper-hoist-variables@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@babel/helper-module-imports@7.24.7(supports-color@5.5.0)':
+ dependencies:
+ '@babel/traverse': 7.24.7(supports-color@5.5.0)
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0)
+ '@babel/helper-simple-access': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.24.7': {}
+
+ '@babel/helper-simple-access@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.24.7(supports-color@5.5.0)
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-split-export-declaration@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@babel/helper-string-parser@7.24.7': {}
+
+ '@babel/helper-validator-identifier@7.24.7': {}
+
+ '@babel/helper-validator-option@7.24.7': {}
+
+ '@babel/helpers@7.24.7':
+ dependencies:
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
+
+ '@babel/highlight@7.24.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.24.7
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.0.1
+
+ '@babel/parser@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.7
+
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.7
+
+ '@babel/runtime@7.24.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/template@7.24.7':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
+
+ '@babel/traverse@7.24.7(supports-color@5.5.0)':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-function-name': 7.24.7
+ '@babel/helper-hoist-variables': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
+ debug: 4.3.5(supports-color@5.5.0)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.24.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
+ to-fast-properties: 2.0.0
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@emotion/babel-plugin@11.11.0':
+ dependencies:
+ '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0)
+ '@babel/runtime': 7.24.7
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/serialize': 1.1.4
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/cache@11.11.0':
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ stylis: 4.2.0
+
+ '@emotion/hash@0.9.1': {}
+
+ '@emotion/is-prop-valid@1.2.2':
+ dependencies:
+ '@emotion/memoize': 0.8.1
+
+ '@emotion/memoize@0.8.1': {}
+
+ '@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/cache': 11.11.0
+ '@emotion/serialize': 1.1.4
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1)
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ hoist-non-react-statics: 3.3.2
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/serialize@1.1.4':
+ dependencies:
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/unitless': 0.8.1
+ '@emotion/utils': 1.2.1
+ csstype: 3.1.3
+
+ '@emotion/sheet@1.2.2': {}
+
+ '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/is-prop-valid': 1.2.2
+ '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
+ '@emotion/serialize': 1.1.4
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1)
+ '@emotion/utils': 1.2.1
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/stylis@0.8.5': {}
+
+ '@emotion/unitless@0.7.5': {}
+
+ '@emotion/unitless@0.8.1': {}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@emotion/utils@1.2.1': {}
+
+ '@emotion/weak-memoize@0.3.1': {}
+
+ '@eslint/eslintrc@1.4.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.5(supports-color@5.5.0)
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@floating-ui/core@1.6.4':
+ dependencies:
+ '@floating-ui/utils': 0.2.4
+
+ '@floating-ui/dom@1.6.7':
+ dependencies:
+ '@floating-ui/core': 1.6.4
+ '@floating-ui/utils': 0.2.4
+
+ '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/dom': 1.6.7
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@floating-ui/utils@0.2.4': {}
+
+ '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tanstack/react-virtual': 3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ client-only: 0.0.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@heroicons/react@2.1.4(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@humanwhocodes/config-array@0.9.5':
+ dependencies:
+ '@humanwhocodes/object-schema': 1.2.1
+ debug: 4.3.5(supports-color@5.5.0)
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/object-schema@1.2.1': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@js-joda/core@5.6.3': {}
+
+ '@mui/base@5.0.0-beta.40(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mui/types': 7.2.14(@types/react@18.3.3)
+ '@mui/utils': 5.16.0(@types/react@18.3.3)(react@18.3.1)
+ '@popperjs/core': 2.11.8
+ clsx: 2.1.1
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@mui/core-downloads-tracker@5.16.0': {}
+
+ '@mui/material@5.16.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@mui/base': 5.0.0-beta.40(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mui/core-downloads-tracker': 5.16.0
+ '@mui/system': 5.16.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
+ '@mui/types': 7.2.14(@types/react@18.3.3)
+ '@mui/utils': 5.16.0(@types/react@18.3.3)(react@18.3.1)
+ '@types/react-transition-group': 4.4.10
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+ react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ optionalDependencies:
+ '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
+ '@types/react': 18.3.3
+
+ '@mui/private-theming@5.16.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@mui/utils': 5.16.0(@types/react@18.3.3)(react@18.3.1)
+ prop-types: 15.8.1
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@mui/styled-engine-sc@5.14.12(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+
+ '@mui/styled-engine@5.15.14(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@emotion/cache': 11.11.0
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.3.1
+ optionalDependencies:
+ '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
+
+ '@mui/system@5.16.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@mui/private-theming': 5.16.0(@types/react@18.3.3)(react@18.3.1)
+ '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
+ '@mui/types': 7.2.14(@types/react@18.3.3)
+ '@mui/utils': 5.16.0(@types/react@18.3.3)(react@18.3.1)
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.3.1
+ optionalDependencies:
+ '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
+ '@types/react': 18.3.3
+
+ '@mui/types@7.2.14(@types/react@18.3.3)':
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@mui/utils@5.16.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@types/prop-types': 15.7.12
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-is: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@nem035/gpt-3-encoder@1.1.7': {}
+
+ '@next-auth/prisma-adapter@1.0.7(@prisma/client@4.13.0(prisma@4.16.2))(next-auth@4.24.7(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@prisma/client': 4.13.0(prisma@4.16.2)
+ next-auth: 4.24.7(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@next/env@13.5.6': {}
+
+ '@next/eslint-plugin-next@12.2.3':
+ dependencies:
+ glob: 7.1.7
+
+ '@next/swc-darwin-arm64@13.5.6':
+ optional: true
+
+ '@next/swc-darwin-x64@13.5.6':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@13.5.6':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@13.5.6':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@13.5.6':
+ optional: true
+
+ '@next/swc-linux-x64-musl@13.5.6':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@13.5.6':
+ optional: true
+
+ '@next/swc-win32-ia32-msvc@13.5.6':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@13.5.6':
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@panva/hkdf@1.2.1': {}
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@popperjs/core@2.11.8': {}
+
+ '@prisma/client@4.13.0(prisma@4.16.2)':
+ dependencies:
+ '@prisma/engines-version': 4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a
+ optionalDependencies:
+ prisma: 4.16.2
+
+ '@prisma/engines-version@4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a': {}
+
+ '@prisma/engines@4.16.2': {}
+
+ '@radix-ui/number@1.0.1':
+ dependencies:
+ '@babel/runtime': 7.24.7
+
+ '@radix-ui/number@1.1.0': {}
+
+ '@radix-ui/primitive@1.0.1':
+ dependencies:
+ '@babel/runtime': 7.24.7
+
+ '@radix-ui/primitive@1.1.0': {}
+
+ '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-checkbox@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/primitive': 1.0.1
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-icons@1.3.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/rect': 1.0.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/rect': 1.1.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-menu': 2.0.4(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-focus-guards@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-focus-scope@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-id@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/number': 1.1.0
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+
+ '@radix-ui/react-select@1.2.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@radix-ui/number': 1.0.1
+ '@radix-ui/primitive': 1.0.1
+ '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-menu@2.0.4(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-direction': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- aria-hidden: 1.2.3
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-popover@1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-GRHZ8yD12MrN2NLobHPE8Rb5uHTxd9x372DE9PPNnBjpczAQHcZ5ne0KXG4xpf+RDdXSzdLv9ym6mYJCDTaUZg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- aria-hidden: 1.2.3
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-popper@1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@floating-ui/react-dom': 0.7.2(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-rect': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-size': 1.0.0(react@18.2.0)
- '@radix-ui/rect': 1.0.0
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-portal@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-roving-focus@1.0.3(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-direction': 1.0.0(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
- /@radix-ui/react-select@1.2.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/number': 1.0.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-direction': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-previous': 1.0.0(react@18.2.0)
- '@radix-ui/react-visually-hidden': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- aria-hidden: 1.2.3
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-slot@1.0.1(react@18.2.0):
- resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-tooltip@1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-popper': 1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.1(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- '@radix-ui/react-visually-hidden': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- dev: false
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0):
- resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/rect': 1.0.1
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@radix-ui/rect': 1.1.0
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-previous@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-rect@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/rect': 1.0.0
- react: 18.2.0
- dev: false
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /@radix-ui/react-use-size@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ '@babel/runtime': 7.24.7
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/react-visually-hidden@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
+ '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.21.0
- '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
- /@radix-ui/rect@1.0.0:
- resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==}
+ '@radix-ui/rect@1.0.1':
dependencies:
- '@babel/runtime': 7.21.0
- dev: false
+ '@babel/runtime': 7.24.7
+
+ '@radix-ui/rect@1.1.0': {}
- /@rushstack/eslint-patch@1.2.0:
- resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
- dev: true
+ '@rushstack/eslint-patch@1.10.3': {}
- /@stripe/stripe-js@1.52.1:
- resolution: {integrity: sha512-fza40OPSpGQlFxc5TZWiYC/6Lk89Sep1fLuv9ss33YS6lCAF8UZbfA1E6W+lwO4c7WRKZIZumHIEbPJfP/O9uw==}
- dev: false
+ '@stripe/stripe-js@1.54.2': {}
- /@swc/helpers@0.4.14:
- resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
+ '@swc/helpers@0.5.2':
dependencies:
- tslib: 2.5.0
- dev: false
+ tslib: 2.6.3
- /@tailwindcss/typography@0.5.9(tailwindcss@3.2.7):
- resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==}
- peerDependencies:
- tailwindcss: '>=3.0.0 || insiders'
+ '@tailwindcss/typography@0.5.13(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
- tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1)
- dev: true
+ tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))
- /@tediousjs/connection-string@0.4.2:
- resolution: {integrity: sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ==}
- dev: true
+ '@tanem/svg-injector@10.1.68':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ content-type: 1.0.5
+ tslib: 2.6.3
- /@tootallnate/once@2.0.0:
- resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
- engines: {node: '>= 10'}
- dev: true
+ '@tanstack/react-virtual@3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tanstack/virtual-core': 3.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- /@tsconfig/node10@1.0.9:
- resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
- dev: true
+ '@tanstack/virtual-core@3.8.1': {}
- /@tsconfig/node12@1.0.11:
- resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
- dev: true
+ '@tediousjs/connection-string@0.5.0': {}
- /@tsconfig/node14@1.0.3:
- resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
- dev: true
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
- /@tsconfig/node16@1.0.3:
- resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
- dev: true
+ '@tsconfig/node14@1.0.3': {}
- /@types/debug@4.1.7:
- resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/debug@4.1.12':
dependencies:
- '@types/ms': 0.7.31
- dev: false
+ '@types/ms': 0.7.34
- /@types/hast@2.3.4:
- resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
+ '@types/hast@2.3.10':
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
- /@types/js-cookie@2.2.7:
- resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==}
- dev: false
+ '@types/js-cookie@2.2.7': {}
- /@types/json5@0.0.29:
- resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- dev: true
+ '@types/json5@0.0.29': {}
- /@types/lodash-es@4.17.7:
- resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==}
+ '@types/lodash-es@4.17.12':
dependencies:
- '@types/lodash': 4.14.191
- dev: true
+ '@types/lodash': 4.17.6
- /@types/lodash@4.14.191:
- resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
- dev: true
+ '@types/lodash@4.17.6': {}
- /@types/mdast@3.0.11:
- resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
+ '@types/mdast@3.0.15':
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@types/unist': 2.0.10
- /@types/micro-cors@0.1.3:
- resolution: {integrity: sha512-f4aMXqEw9YjfdKX87m1LecvZJ2Mhz5maIHXjIvm5K6OTPe9auaTQwaFk4OZYS9zY6zdzfxqs2cEmwJAF7C9Y8A==}
+ '@types/micro-cors@0.1.5':
dependencies:
'@types/micro': 7.3.7
- dev: true
- /@types/micro@7.3.7:
- resolution: {integrity: sha512-MFsX7eCj0Tg3TtphOQvANNvNtFpya+s/rYOCdV6o+DFjOQPFi2EVRbBALjbbgZTXUaJP1Q281MJiJOD40d0UxQ==}
+ '@types/micro@7.3.7':
dependencies:
- '@types/node': 18.15.3
- dev: true
+ '@types/node': 18.19.39
- /@types/ms@0.7.31:
- resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
- dev: false
+ '@types/ms@0.7.34': {}
- /@types/mssql@8.1.2:
- resolution: {integrity: sha512-hoDM+mZUClfXu0J1pyVdbhv2Ve0dl0TdagAE3M5rd1slqoVEEHuNObPD+giwtJgyo99CcS58qbF9ektVKdxSfQ==}
+ '@types/mssql@8.1.2':
dependencies:
- '@types/node': 18.15.3
- '@types/tedious': 4.0.9
+ '@types/node': 18.19.39
+ '@types/tedious': 4.0.14
tarn: 3.0.2
- dev: true
-
- /@types/node@18.15.3:
- resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==}
- /@types/parse-json@4.0.0:
- resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
- dev: false
-
- /@types/pg@8.6.6:
- resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
+ '@types/node@18.19.39':
dependencies:
- '@types/node': 18.15.3
- pg-protocol: 1.6.0
- pg-types: 2.2.0
- dev: true
+ undici-types: 5.26.5
- /@types/prop-types@15.7.5:
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+ '@types/parse-json@4.0.2': {}
- /@types/react-dom@18.0.11:
- resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
+ '@types/pg@8.11.6':
dependencies:
- '@types/react': 18.0.28
- dev: true
+ '@types/node': 18.19.39
+ pg-protocol: 1.6.1
+ pg-types: 4.0.2
- /@types/react-is@17.0.3:
- resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==}
- dependencies:
- '@types/react': 18.0.28
- dev: false
+ '@types/prop-types@15.7.12': {}
- /@types/react-syntax-highlighter@15.5.6:
- resolution: {integrity: sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==}
+ '@types/react-dom@18.3.0':
dependencies:
- '@types/react': 18.0.28
- dev: true
+ '@types/react': 18.3.3
- /@types/react-transition-group@4.4.5:
- resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==}
+ '@types/react-syntax-highlighter@15.5.13':
dependencies:
- '@types/react': 18.0.28
- dev: false
+ '@types/react': 18.3.3
- /@types/react@18.0.28:
- resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
+ '@types/react-transition-group@4.4.10':
dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.2
- csstype: 3.1.1
+ '@types/react': 18.3.3
- /@types/request-ip@0.0.37:
- resolution: {integrity: sha512-uw6/i3rQnpznxD7LtLaeuZytLhKZK6bRoTS6XVJlwxIOoOpEBU7bgKoVXDNtOg4Xl6riUKHa9bjMVrL6ESqYlQ==}
+ '@types/react@18.3.3':
dependencies:
- '@types/node': 18.15.3
- dev: false
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
- /@types/scheduler@0.16.2:
- resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
+ '@types/request-ip@0.0.37':
+ dependencies:
+ '@types/node': 18.19.39
- /@types/tedious@4.0.9:
- resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==}
+ '@types/tedious@4.0.14':
dependencies:
- '@types/node': 18.15.3
- dev: true
+ '@types/node': 18.19.39
- /@types/unist@2.0.6:
- resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
+ '@types/unist@2.0.10': {}
- /@types/uuid@9.0.1:
- resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==}
- dev: true
+ '@types/uuid@9.0.8': {}
- /@typescript-eslint/parser@5.55.0(eslint@8.20.0)(typescript@4.9.5):
- resolution: {integrity: sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5)':
dependencies:
- '@typescript-eslint/scope-manager': 5.55.0
- '@typescript-eslint/types': 5.55.0
- '@typescript-eslint/typescript-estree': 5.55.0(typescript@4.9.5)
- debug: 4.3.4(supports-color@5.5.0)
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ debug: 4.3.5(supports-color@5.5.0)
eslint: 8.20.0
+ optionalDependencies:
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
- dev: true
- /@typescript-eslint/scope-manager@5.55.0:
- resolution: {integrity: sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/scope-manager@5.62.0':
dependencies:
- '@typescript-eslint/types': 5.55.0
- '@typescript-eslint/visitor-keys': 5.55.0
- dev: true
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
- /@typescript-eslint/types@5.55.0:
- resolution: {integrity: sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
+ '@typescript-eslint/types@5.62.0': {}
- /@typescript-eslint/typescript-estree@5.55.0(typescript@4.9.5):
- resolution: {integrity: sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)':
dependencies:
- '@typescript-eslint/types': 5.55.0
- '@typescript-eslint/visitor-keys': 5.55.0
- debug: 4.3.4(supports-color@5.5.0)
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.3.5(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
- semver: 7.3.8
+ semver: 7.6.2
tsutils: 3.21.0(typescript@4.9.5)
+ optionalDependencies:
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
- dev: true
- /@typescript-eslint/visitor-keys@5.55.0:
- resolution: {integrity: sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/visitor-keys@5.62.0':
dependencies:
- '@typescript-eslint/types': 5.55.0
- eslint-visitor-keys: 3.3.0
- dev: true
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
- /@vercel/analytics@0.1.11(react@18.2.0):
- resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
- peerDependencies:
- react: ^16.8||^17||^18
+ '@vercel/analytics@0.1.11(react@18.3.1)':
dependencies:
- react: 18.2.0
- dev: false
+ react: 18.3.1
- /@xobotyi/scrollbar-width@1.9.5:
- resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==}
- dev: false
+ '@xobotyi/scrollbar-width@1.9.5': {}
- /acorn-jsx@5.3.2(acorn@8.8.2):
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-jsx@5.3.2(acorn@8.12.1):
dependencies:
- acorn: 8.8.2
- dev: true
+ acorn: 8.12.1
- /acorn-node@1.8.2:
- resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
+ acorn-walk@8.3.3:
dependencies:
- acorn: 7.4.1
- acorn-walk: 7.2.0
- xtend: 4.0.2
- dev: true
-
- /acorn-walk@7.2.0:
- resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
- engines: {node: '>=0.4.0'}
- dev: true
-
- /acorn-walk@8.2.0:
- resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
- engines: {node: '>=0.4.0'}
- dev: true
-
- /acorn@7.4.1:
- resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
- engines: {node: '>=0.4.0'}
- hasBin: true
- dev: true
+ acorn: 8.12.1
- /acorn@8.8.2:
- resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
- engines: {node: '>=0.4.0'}
- hasBin: true
- dev: true
+ acorn@8.12.1: {}
- /agent-base@6.0.2:
- resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
- engines: {node: '>= 6.0.0'}
+ agent-base@7.1.1:
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.5(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
- dev: true
- /ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- dev: true
- /ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
- dev: true
+ ansi-regex@5.0.1: {}
- /ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
+ ansi-regex@6.0.1: {}
+
+ ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.3
- dev: false
- /ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
+ ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
- dev: true
- /anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
+ ansi-styles@6.2.1: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
- dev: true
- /arg@4.1.0:
- resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==}
- dev: false
+ arg@4.1.0: {}
- /arg@4.1.3:
- resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
- dev: true
+ arg@4.1.3: {}
- /arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
- dev: true
+ arg@5.0.2: {}
- /argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- dev: true
+ argparse@2.0.1: {}
- /aria-hidden@1.2.3:
- resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==}
- engines: {node: '>=10'}
+ aria-hidden@1.2.4:
dependencies:
- tslib: 2.5.0
- dev: false
+ tslib: 2.6.3
- /aria-query@5.1.3:
- resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+ aria-query@5.1.3:
dependencies:
- deep-equal: 2.2.0
- dev: true
+ deep-equal: 2.2.3
- /array-buffer-byte-length@1.0.0:
- resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+ array-buffer-byte-length@1.0.1:
dependencies:
- call-bind: 1.0.2
- is-array-buffer: 3.0.2
- dev: true
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.4
- /array-includes@3.1.6:
- resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
- engines: {node: '>= 0.4'}
+ array-includes@3.1.8:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- get-intrinsic: 1.2.0
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ get-intrinsic: 1.2.4
is-string: 1.0.7
- dev: true
- /array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
- dev: true
+ array-union@2.1.0: {}
- /array.prototype.flat@1.3.1:
- resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
- engines: {node: '>= 0.4'}
+ array.prototype.findlast@1.2.5:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- es-shim-unscopables: 1.0.0
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-shim-unscopables: 1.0.2
- /array.prototype.flatmap@1.3.1:
- resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
- engines: {node: '>= 0.4'}
+ array.prototype.findlastindex@1.2.5:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- es-shim-unscopables: 1.0.0
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-shim-unscopables: 1.0.2
- /array.prototype.tosorted@1.1.1:
- resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
+ array.prototype.flat@1.3.2:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- es-shim-unscopables: 1.0.0
- get-intrinsic: 1.2.0
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
- /ast-types-flow@0.0.7:
- resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
- dev: true
+ array.prototype.flatmap@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
- /asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ array.prototype.toreversed@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
- /autoprefixer@10.4.14(postcss@8.4.21):
- resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
+ array.prototype.tosorted@1.1.4:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-shim-unscopables: 1.0.2
+
+ arraybuffer.prototype.slice@1.0.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ is-array-buffer: 3.0.4
+ is-shared-array-buffer: 1.0.3
+
+ ast-types-flow@0.0.8: {}
+
+ asynckit@0.4.0: {}
+
+ autoprefixer@10.4.19(postcss@8.4.39):
dependencies:
- browserslist: 4.21.5
- caniuse-lite: 1.0.30001466
- fraction.js: 4.2.0
+ browserslist: 4.23.1
+ caniuse-lite: 1.0.30001640
+ fraction.js: 4.3.7
normalize-range: 0.1.2
- picocolors: 1.0.0
- postcss: 8.4.21
+ picocolors: 1.0.1
+ postcss: 8.4.39
postcss-value-parser: 4.2.0
- dev: true
- /available-typed-arrays@1.0.5:
- resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
- engines: {node: '>= 0.4'}
- dev: true
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
- /axe-core@4.6.3:
- resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==}
- engines: {node: '>=4'}
- dev: true
+ axe-core@4.9.1: {}
- /axios@1.3.4:
- resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==}
+ axios@1.7.2:
dependencies:
- follow-redirects: 1.15.2
+ follow-redirects: 1.15.6
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
- dev: false
- /axobject-query@3.1.1:
- resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+ axobject-query@3.1.1:
dependencies:
- deep-equal: 2.2.0
- dev: true
+ deep-equal: 2.2.3
- /babel-plugin-macros@3.1.0:
- resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
- engines: {node: '>=10', npm: '>=6'}
+ babel-plugin-macros@3.1.0:
dependencies:
- '@babel/runtime': 7.21.0
+ '@babel/runtime': 7.24.7
cosmiconfig: 7.1.0
- resolve: 1.22.1
- dev: false
+ resolve: 1.22.8
- /babel-plugin-styled-components@2.0.7(styled-components@5.3.9):
- resolution: {integrity: sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==}
- peerDependencies:
- styled-components: '>= 2'
+ babel-plugin-styled-components@2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0):
dependencies:
- '@babel/helper-annotate-as-pure': 7.18.6
- '@babel/helper-module-imports': 7.18.6
- babel-plugin-syntax-jsx: 6.18.0
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0)
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7)
lodash: 4.17.21
picomatch: 2.3.1
- styled-components: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)
- dev: false
-
- /babel-plugin-syntax-jsx@6.18.0:
- resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==}
- dev: false
+ styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
- /bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- dev: false
+ bail@2.0.2: {}
- /balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
+ balanced-match@1.0.2: {}
- /base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: true
+ base64-js@1.5.1: {}
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: true
+ binary-extensions@2.3.0: {}
- /bl@5.1.0:
- resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
+ bl@5.1.0:
dependencies:
buffer: 6.0.3
inherits: 2.0.4
readable-stream: 3.6.2
- dev: true
- /brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- dev: true
- /braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
+ brace-expansion@2.0.1:
dependencies:
- fill-range: 7.0.1
- dev: true
+ balanced-match: 1.0.2
- /browserslist@4.21.5:
- resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
+ braces@3.0.3:
dependencies:
- caniuse-lite: 1.0.30001466
- electron-to-chromium: 1.4.330
- node-releases: 2.0.10
- update-browserslist-db: 1.0.10(browserslist@4.21.5)
- dev: true
+ fill-range: 7.1.1
- /buffer-equal-constant-time@1.0.1:
- resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
- dev: true
+ browserslist@4.23.1:
+ dependencies:
+ caniuse-lite: 1.0.30001640
+ electron-to-chromium: 1.4.816
+ node-releases: 2.0.14
+ update-browserslist-db: 1.1.0(browserslist@4.23.1)
- /buffer-writer@2.0.0:
- resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==}
- engines: {node: '>=4'}
- dev: true
+ buffer-equal-constant-time@1.0.1: {}
- /buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ buffer@6.0.3:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
- dev: true
- /bytes@3.1.0:
- resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
- engines: {node: '>= 0.8'}
- dev: false
+ busboy@1.6.0:
+ dependencies:
+ streamsearch: 1.1.0
+
+ bytes@3.1.0: {}
- /call-bind@1.0.2:
- resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ call-bind@1.0.7:
dependencies:
- function-bind: 1.1.1
- get-intrinsic: 1.2.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.2
- /callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
+ callsites@3.1.0: {}
- /camelcase-css@2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
- dev: true
+ camelcase-css@2.0.1: {}
- /camelize@1.0.1:
- resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
- dev: false
+ camelize@1.0.1: {}
- /caniuse-lite@1.0.30001466:
- resolution: {integrity: sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==}
+ caniuse-lite@1.0.30001640: {}
- /ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- dev: false
+ ccount@2.0.1: {}
- /chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
+ chalk@2.4.2:
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- dev: false
- /chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
+ chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
- dev: true
- /character-entities-legacy@1.1.4:
- resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
- dev: true
+ character-entities-legacy@1.1.4: {}
- /character-entities@1.2.4:
- resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
- dev: true
+ character-entities@1.2.4: {}
- /character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- dev: false
+ character-entities@2.0.2: {}
- /character-reference-invalid@1.1.4:
- resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
- dev: true
+ character-reference-invalid@1.1.4: {}
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
+ chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
- braces: 3.0.2
+ braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
- fsevents: 2.3.2
- dev: true
+ fsevents: 2.3.3
- /client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
- dev: false
+ client-only@0.0.1: {}
- /clsx@1.2.1:
- resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
- engines: {node: '>=6'}
- dev: false
+ clsx@2.1.1: {}
- /color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ color-convert@1.9.3:
dependencies:
color-name: 1.1.3
- dev: false
- /color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
+ color-convert@2.0.1:
dependencies:
color-name: 1.1.4
- dev: true
- /color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: false
+ color-name@1.1.3: {}
- /color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: true
+ color-name@1.1.4: {}
- /combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
+ combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
- /comma-separated-tokens@1.0.8:
- resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
- dev: true
+ comma-separated-tokens@1.0.8: {}
- /comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- dev: false
+ comma-separated-tokens@2.0.3: {}
- /commander@9.5.0:
- resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
- engines: {node: ^12.20.0 || >=14}
- dev: true
+ commander@11.1.0: {}
- /concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- dev: true
+ commander@4.1.1: {}
- /content-type@1.0.4:
- resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
- engines: {node: '>= 0.6'}
- dev: false
+ concat-map@0.0.1: {}
- /convert-source-map@1.9.0:
- resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
- dev: false
+ content-type@1.0.4: {}
- /cookie@0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
- engines: {node: '>= 0.6'}
- dev: false
+ content-type@1.0.5: {}
- /copy-to-clipboard@3.3.3:
- resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+ convert-source-map@1.9.0: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie@0.5.0: {}
+
+ copy-to-clipboard@3.3.3:
dependencies:
toggle-selection: 1.0.6
- dev: false
- /cosmiconfig@7.1.0:
- resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
- engines: {node: '>=10'}
+ cosmiconfig@7.1.0:
dependencies:
- '@types/parse-json': 4.0.0
+ '@types/parse-json': 4.0.2
import-fresh: 3.3.0
parse-json: 5.2.0
path-type: 4.0.0
yaml: 1.10.2
- dev: false
- /create-require@1.1.1:
- resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
- dev: true
-
- /cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
+ create-require@1.1.1: {}
+
+ cross-spawn@7.0.3:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
- dev: true
- /css-color-keywords@1.0.0:
- resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
- engines: {node: '>=4'}
- dev: false
+ css-color-keywords@1.0.0: {}
- /css-in-js-utils@3.1.0:
- resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==}
+ css-in-js-utils@3.1.0:
dependencies:
- hyphenate-style-name: 1.0.4
- dev: false
+ hyphenate-style-name: 1.1.0
- /css-to-react-native@3.2.0:
- resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
+ css-to-react-native@3.2.0:
dependencies:
camelize: 1.0.1
css-color-keywords: 1.0.0
postcss-value-parser: 4.2.0
- dev: false
- /css-tree@1.1.3:
- resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
- engines: {node: '>=8.0.0'}
+ css-tree@1.1.3:
dependencies:
mdn-data: 2.0.14
source-map: 0.6.1
- dev: false
- /cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
+ cssesc@3.0.0: {}
- /csstype@3.1.1:
- resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
+ csstype@3.1.3: {}
- /damerau-levenshtein@1.0.8:
- resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dev: true
+ damerau-levenshtein@1.0.8: {}
- /dayjs@1.11.7:
- resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
- dev: false
+ data-view-buffer@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
- /debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ data-view-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ data-view-byte-offset@1.0.0:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ dayjs@1.11.11: {}
+
+ debug@3.2.7:
dependencies:
ms: 2.1.3
- dev: true
- /debug@4.3.4(supports-color@5.5.0):
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ debug@4.3.5(supports-color@5.5.0):
dependencies:
ms: 2.1.2
+ optionalDependencies:
supports-color: 5.5.0
- /decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+ decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
- dev: false
- /deep-equal@2.2.0:
- resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==}
+ deep-equal@2.2.3:
dependencies:
- call-bind: 1.0.2
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
es-get-iterator: 1.1.3
- get-intrinsic: 1.2.0
+ get-intrinsic: 1.2.4
is-arguments: 1.1.1
- is-array-buffer: 3.0.2
+ is-array-buffer: 3.0.4
is-date-object: 1.0.5
is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
+ is-shared-array-buffer: 1.0.3
isarray: 2.0.5
- object-is: 1.1.5
+ object-is: 1.1.6
object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.4.3
- side-channel: 1.0.4
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ side-channel: 1.0.6
which-boxed-primitive: 1.0.2
- which-collection: 1.0.1
- which-typed-array: 1.1.9
- dev: true
-
- /deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- dev: true
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
- /deepmerge@4.3.1:
- resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
- engines: {node: '>=0.10.0'}
- dev: false
+ deep-is@0.1.4: {}
- /define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
- dev: true
+ deepmerge@4.3.1: {}
- /define-properties@1.2.0:
- resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
- engines: {node: '>= 0.4'}
+ define-data-property@1.1.4:
dependencies:
- has-property-descriptors: 1.0.0
- object-keys: 1.1.1
- dev: true
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
- /defined@1.0.1:
- resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
- dev: true
+ define-lazy-prop@2.0.0: {}
- /delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
- /denque@2.1.0:
- resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
- engines: {node: '>=0.10'}
- dev: true
+ delayed-stream@1.0.0: {}
- /depd@1.1.2:
- resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
- engines: {node: '>= 0.6'}
- dev: false
+ denque@2.1.0: {}
- /dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
- dev: false
+ depd@1.1.2: {}
- /detect-node-es@1.1.0:
- resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
- dev: false
+ dequal@2.0.3: {}
- /detective@5.2.1:
- resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
- engines: {node: '>=0.8.0'}
- hasBin: true
- dependencies:
- acorn-node: 1.8.2
- defined: 1.0.1
- minimist: 1.2.8
- dev: true
+ detect-node-es@1.1.0: {}
- /didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- dev: true
+ didyoumean@1.2.2: {}
- /diff@4.0.2:
- resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
- engines: {node: '>=0.3.1'}
- dev: true
+ diff@4.0.2: {}
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
- engines: {node: '>=0.3.1'}
- dev: false
+ diff@5.2.0: {}
- /dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
+ dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
- dev: true
- /dlv@1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
- dev: true
+ dlv@1.1.3: {}
- /doctrine@2.1.0:
- resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
- engines: {node: '>=0.10.0'}
+ doctrine@2.1.0:
dependencies:
esutils: 2.0.3
- dev: true
- /doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
+ doctrine@3.0.0:
dependencies:
esutils: 2.0.3
- dev: true
- /dom-helpers@5.2.1:
- resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dom-helpers@5.2.1:
dependencies:
- '@babel/runtime': 7.21.0
- csstype: 3.1.1
- dev: false
+ '@babel/runtime': 7.24.7
+ csstype: 3.1.3
- /ecdsa-sig-formatter@1.0.11:
- resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+ eastasianwidth@0.2.0: {}
+
+ ecdsa-sig-formatter@1.0.11:
dependencies:
safe-buffer: 5.2.1
- dev: true
- /electron-to-chromium@1.4.330:
- resolution: {integrity: sha512-PqyefhybrVdjAJ45HaPLtuVaehiSw7C3ya0aad+rvmV53IVyXmYRk3pwIOb2TxTDTnmgQdn46NjMMaysx79/6Q==}
- dev: true
+ electron-to-chromium@1.4.816: {}
- /emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- dev: true
+ emoji-regex@8.0.0: {}
- /error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ emoji-regex@9.2.2: {}
+
+ env-cmd@10.1.0:
+ dependencies:
+ commander: 4.1.1
+ cross-spawn: 7.0.3
+
+ error-ex@1.3.2:
dependencies:
is-arrayish: 0.2.1
- dev: false
- /error-stack-parser@2.1.4:
- resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+ error-stack-parser@2.1.4:
dependencies:
stackframe: 1.3.4
- dev: false
- /es-abstract@1.21.2:
- resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
- engines: {node: '>= 0.4'}
- dependencies:
- array-buffer-byte-length: 1.0.0
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- es-set-tostringtag: 2.0.1
+ es-abstract@1.23.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ arraybuffer.prototype.slice: 1.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ data-view-buffer: 1.0.1
+ data-view-byte-length: 1.0.1
+ data-view-byte-offset: 1.0.0
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-set-tostringtag: 2.0.3
es-to-primitive: 1.2.1
- function.prototype.name: 1.1.5
- get-intrinsic: 1.2.0
- get-symbol-description: 1.0.0
- globalthis: 1.0.3
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.4
+ get-symbol-description: 1.0.2
+ globalthis: 1.0.4
gopd: 1.0.1
- has: 1.0.3
- has-property-descriptors: 1.0.0
- has-proto: 1.0.1
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
has-symbols: 1.0.3
- internal-slot: 1.0.5
- is-array-buffer: 3.0.2
+ hasown: 2.0.2
+ internal-slot: 1.0.7
+ is-array-buffer: 3.0.4
is-callable: 1.2.7
- is-negative-zero: 2.0.2
+ is-data-view: 1.0.1
+ is-negative-zero: 2.0.3
is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
+ is-shared-array-buffer: 1.0.3
is-string: 1.0.7
- is-typed-array: 1.1.10
+ is-typed-array: 1.1.13
is-weakref: 1.0.2
- object-inspect: 1.12.3
+ object-inspect: 1.13.2
object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.4.3
- safe-regex-test: 1.0.0
- string.prototype.trim: 1.2.7
- string.prototype.trimend: 1.0.6
- string.prototype.trimstart: 1.0.6
- typed-array-length: 1.0.4
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ safe-array-concat: 1.1.2
+ safe-regex-test: 1.0.3
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.2
+ typed-array-byte-length: 1.0.1
+ typed-array-byte-offset: 1.0.2
+ typed-array-length: 1.0.6
unbox-primitive: 1.0.2
- which-typed-array: 1.1.9
- dev: true
+ which-typed-array: 1.1.15
- /es-aggregate-error@1.0.9:
- resolution: {integrity: sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==}
- engines: {node: '>= 0.4'}
+ es-aggregate-error@1.0.13:
dependencies:
- define-properties: 1.2.0
- es-abstract: 1.21.2
- function-bind: 1.1.1
- functions-have-names: 1.2.3
- get-intrinsic: 1.2.0
- globalthis: 1.0.3
- has-property-descriptors: 1.0.0
- dev: true
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ set-function-name: 2.0.2
- /es-get-iterator@1.1.3:
- resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es-get-iterator@1.1.3:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
has-symbols: 1.0.3
is-arguments: 1.1.1
- is-map: 2.0.2
- is-set: 2.0.2
+ is-map: 2.0.3
+ is-set: 2.0.3
is-string: 1.0.7
isarray: 2.0.5
stop-iteration-iterator: 1.0.0
- dev: true
- /es-set-tostringtag@2.0.1:
- resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
- engines: {node: '>= 0.4'}
+ es-iterator-helpers@1.0.19:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-set-tostringtag: 2.0.3
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ internal-slot: 1.0.7
+ iterator.prototype: 1.1.2
+ safe-array-concat: 1.1.2
+
+ es-object-atoms@1.0.0:
dependencies:
- get-intrinsic: 1.2.0
- has: 1.0.3
- has-tostringtag: 1.0.0
- dev: true
+ es-errors: 1.3.0
- /es-shim-unscopables@1.0.0:
- resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+ es-set-tostringtag@2.0.3:
dependencies:
- has: 1.0.3
- dev: true
+ get-intrinsic: 1.2.4
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
- /es-to-primitive@1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
+ es-shim-unscopables@1.0.2:
+ dependencies:
+ hasown: 2.0.2
+
+ es-to-primitive@1.2.1:
dependencies:
is-callable: 1.2.7
is-date-object: 1.0.5
is-symbol: 1.0.4
- dev: true
- /escalade@3.1.1:
- resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
- engines: {node: '>=6'}
- dev: true
+ escalade@3.1.2: {}
- /escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
- dev: false
+ escape-string-regexp@1.0.5: {}
- /escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ escape-string-regexp@4.0.0: {}
- /escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
- dev: false
+ escape-string-regexp@5.0.0: {}
- /eslint-config-next@12.2.3(eslint@8.20.0)(typescript@4.9.5):
- resolution: {integrity: sha512-xAQqAqwa2bu9ZMRypz58ym4tNCo22Wc6LuoLpbpf3yW5c4ZkVib9934AgGDDvh2zKrP56Z6X0Pp6gNnuuZzcRw==}
- peerDependencies:
- eslint: ^7.23.0 || ^8.0.0
- typescript: '>=3.3.1'
- peerDependenciesMeta:
- typescript:
- optional: true
+ eslint-config-next@12.2.3(eslint@8.20.0)(typescript@4.9.5):
dependencies:
'@next/eslint-plugin-next': 12.2.3
- '@rushstack/eslint-patch': 1.2.0
- '@typescript-eslint/parser': 5.55.0(eslint@8.20.0)(typescript@4.9.5)
+ '@rushstack/eslint-patch': 1.10.3
+ '@typescript-eslint/parser': 5.62.0(eslint@8.20.0)(typescript@4.9.5)
eslint: 8.20.0
- eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.27.5)(eslint@8.20.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.20.0)
- eslint-plugin-react: 7.32.2(eslint@8.20.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.20.0)
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.20.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0)
+ eslint-plugin-jsx-a11y: 6.9.0(eslint@8.20.0)
+ eslint-plugin-react: 7.34.3(eslint@8.20.0)
+ eslint-plugin-react-hooks: 4.6.2(eslint@8.20.0)
+ optionalDependencies:
typescript: 4.9.5
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
- dev: true
- /eslint-import-resolver-node@0.3.7:
- resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
+ eslint-config-prettier@8.10.0(eslint@8.20.0):
+ dependencies:
+ eslint: 8.20.0
+
+ eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
- is-core-module: 2.11.0
- resolve: 1.22.1
+ is-core-module: 2.14.0
+ resolve: 1.22.8
transitivePeerDependencies:
- supports-color
- dev: true
- /eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.27.5)(eslint@8.20.0):
- resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
- engines: {node: '>=4'}
- peerDependencies:
- eslint: '*'
- eslint-plugin-import: '*'
+ eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.20.0):
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.5(supports-color@5.5.0)
eslint: 8.20.0
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0)
glob: 7.2.3
is-glob: 4.0.3
- resolve: 1.22.1
- tsconfig-paths: 3.14.2
+ resolve: 1.22.8
+ tsconfig-paths: 3.15.0
transitivePeerDependencies:
- supports-color
- dev: true
- /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0):
- resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: '*'
- eslint-import-resolver-node: '*'
- eslint-import-resolver-typescript: '*'
- eslint-import-resolver-webpack: '*'
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
- eslint:
- optional: true
- eslint-import-resolver-node:
- optional: true
- eslint-import-resolver-typescript:
- optional: true
- eslint-import-resolver-webpack:
- optional: true
+ eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.20.0))(eslint@8.20.0):
dependencies:
- '@typescript-eslint/parser': 5.55.0(eslint@8.20.0)(typescript@4.9.5)
debug: 3.2.7
+ optionalDependencies:
+ '@typescript-eslint/parser': 5.62.0(eslint@8.20.0)(typescript@4.9.5)
eslint: 8.20.0
- eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.27.5)(eslint@8.20.0)
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.20.0)
transitivePeerDependencies:
- supports-color
- dev: true
- /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0):
- resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0):
dependencies:
- '@typescript-eslint/parser': 5.55.0(eslint@8.20.0)(typescript@4.9.5)
- array-includes: 3.1.6
- array.prototype.flat: 1.3.1
- array.prototype.flatmap: 1.3.1
+ array-includes: 3.1.8
+ array.prototype.findlastindex: 1.2.5
+ array.prototype.flat: 1.3.2
+ array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
eslint: 8.20.0
- eslint-import-resolver-node: 0.3.7
- eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@2.7.1)(eslint@8.20.0)
- has: 1.0.3
- is-core-module: 2.11.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.20.0))(eslint@8.20.0)
+ hasown: 2.0.2
+ is-core-module: 2.14.0
is-glob: 4.0.3
minimatch: 3.1.2
- object.values: 1.1.6
- resolve: 1.22.1
- semver: 6.3.0
- tsconfig-paths: 3.14.2
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.0
+ semver: 6.3.1
+ tsconfig-paths: 3.15.0
+ optionalDependencies:
+ '@typescript-eslint/parser': 5.62.0(eslint@8.20.0)(typescript@4.9.5)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- dev: true
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.20.0):
- resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ eslint-plugin-jsx-a11y@6.9.0(eslint@8.20.0):
dependencies:
- '@babel/runtime': 7.21.0
aria-query: 5.1.3
- array-includes: 3.1.6
- array.prototype.flatmap: 1.3.1
- ast-types-flow: 0.0.7
- axe-core: 4.6.3
+ array-includes: 3.1.8
+ array.prototype.flatmap: 1.3.2
+ ast-types-flow: 0.0.8
+ axe-core: 4.9.1
axobject-query: 3.1.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
+ es-iterator-helpers: 1.0.19
eslint: 8.20.0
- has: 1.0.3
- jsx-ast-utils: 3.3.3
- language-tags: 1.0.5
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
minimatch: 3.1.2
- object.entries: 1.1.6
- object.fromentries: 2.0.6
- semver: 6.3.0
- dev: true
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.0.3
+ string.prototype.includes: 2.0.0
- /eslint-plugin-react-hooks@4.6.0(eslint@8.20.0):
- resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
- engines: {node: '>=10'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.20.0))(eslint@8.20.0)(prettier@2.8.8):
dependencies:
eslint: 8.20.0
- dev: true
+ prettier: 2.8.8
+ prettier-linter-helpers: 1.0.0
+ optionalDependencies:
+ eslint-config-prettier: 8.10.0(eslint@8.20.0)
- /eslint-plugin-react@7.32.2(eslint@8.20.0):
- resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
- engines: {node: '>=4'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ eslint-plugin-react-hooks@4.6.2(eslint@8.20.0):
+ dependencies:
+ eslint: 8.20.0
+
+ eslint-plugin-react@7.34.3(eslint@8.20.0):
dependencies:
- array-includes: 3.1.6
- array.prototype.flatmap: 1.3.1
- array.prototype.tosorted: 1.1.1
+ array-includes: 3.1.8
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.2
+ array.prototype.toreversed: 1.1.2
+ array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
+ es-iterator-helpers: 1.0.19
eslint: 8.20.0
estraverse: 5.3.0
- jsx-ast-utils: 3.3.3
+ jsx-ast-utils: 3.3.5
minimatch: 3.1.2
- object.entries: 1.1.6
- object.fromentries: 2.0.6
- object.hasown: 1.1.2
- object.values: 1.1.6
+ object.entries: 1.1.8
+ object.fromentries: 2.0.8
+ object.hasown: 1.1.4
+ object.values: 1.2.0
prop-types: 15.8.1
- resolve: 2.0.0-next.4
- semver: 6.3.0
- string.prototype.matchall: 4.0.8
- dev: true
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.11
- /eslint-scope@7.1.1:
- resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-scope@7.2.2:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
- dev: true
- /eslint-utils@3.0.0(eslint@8.20.0):
- resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
- engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
- peerDependencies:
- eslint: '>=5'
+ eslint-utils@3.0.0(eslint@8.20.0):
dependencies:
eslint: 8.20.0
eslint-visitor-keys: 2.1.0
- dev: true
- /eslint-visitor-keys@2.1.0:
- resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
- engines: {node: '>=10'}
- dev: true
+ eslint-visitor-keys@2.1.0: {}
- /eslint-visitor-keys@3.3.0:
- resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
+ eslint-visitor-keys@3.4.3: {}
- /eslint@8.20.0:
- resolution: {integrity: sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- hasBin: true
+ eslint@8.20.0:
dependencies:
'@eslint/eslintrc': 1.4.1
'@humanwhocodes/config-array': 0.9.5
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.5(supports-color@5.5.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
- eslint-scope: 7.1.1
+ eslint-scope: 7.2.2
eslint-utils: 3.0.0(eslint@8.20.0)
- eslint-visitor-keys: 3.3.0
- espree: 9.5.0
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 6.0.1
functional-red-black-tree: 1.0.1
glob-parent: 6.0.2
- globals: 13.20.0
- ignore: 5.2.4
+ globals: 13.24.0
+ ignore: 5.3.1
import-fresh: 3.3.0
imurmurhash: 0.1.4
is-glob: 4.0.3
@@ -2860,247 +6240,166 @@ packages:
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
- optionator: 0.9.1
+ optionator: 0.9.4
regexpp: 3.2.0
strip-ansi: 6.0.1
strip-json-comments: 3.1.1
text-table: 0.2.0
- v8-compile-cache: 2.3.0
+ v8-compile-cache: 2.4.0
transitivePeerDependencies:
- supports-color
- dev: true
- /espree@9.5.0:
- resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ espree@9.6.1:
dependencies:
- acorn: 8.8.2
- acorn-jsx: 5.3.2(acorn@8.8.2)
- eslint-visitor-keys: 3.3.0
- dev: true
+ acorn: 8.12.1
+ acorn-jsx: 5.3.2(acorn@8.12.1)
+ eslint-visitor-keys: 3.4.3
- /esquery@1.5.0:
- resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
- engines: {node: '>=0.10'}
+ esquery@1.5.0:
dependencies:
estraverse: 5.3.0
- dev: true
- /esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
+ esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
- dev: true
- /estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
- dev: true
+ estraverse@5.3.0: {}
- /esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
- dev: true
+ esutils@2.0.3: {}
- /events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
- dev: true
+ events@3.3.0: {}
- /eventsource-parser@1.0.0:
- resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
- engines: {node: '>=14.18'}
- dev: false
+ eventsource-parser@1.1.2: {}
- /extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: false
+ extend@3.0.2: {}
- /fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ fast-deep-equal@3.1.3: {}
- /fast-glob@3.2.12:
- resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
- engines: {node: '>=8.6.0'}
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.2:
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.5
- dev: true
-
- /fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
+ micromatch: 4.0.7
- /fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- dev: true
+ fast-json-stable-stringify@2.1.0: {}
- /fast-loops@1.1.3:
- resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==}
- dev: false
+ fast-levenshtein@2.0.6: {}
- /fast-shallow-equal@1.0.0:
- resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==}
- dev: false
+ fast-shallow-equal@1.0.0: {}
- /fastest-stable-stringify@2.0.2:
- resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==}
- dev: false
+ fastest-stable-stringify@2.0.2: {}
- /fastq@1.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+ fastq@1.17.1:
dependencies:
reusify: 1.0.4
- dev: true
- /fault@1.0.4:
- resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+ fault@1.0.4:
dependencies:
format: 0.2.2
- dev: true
- /file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ file-entry-cache@6.0.1:
dependencies:
- flat-cache: 3.0.4
- dev: true
+ flat-cache: 3.2.0
- /fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
+ fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
- dev: true
- /find-root@1.1.0:
- resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
- dev: false
+ find-root@1.1.0: {}
- /flat-cache@3.0.4:
- resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ flat-cache@3.2.0:
dependencies:
- flatted: 3.2.7
+ flatted: 3.3.1
+ keyv: 4.5.4
rimraf: 3.0.2
- dev: true
- /flatted@3.2.7:
- resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
- dev: true
+ flatted@3.3.1: {}
- /follow-redirects@1.15.2:
- resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
- dev: false
+ follow-redirects@1.15.6: {}
- /for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ for-each@0.3.3:
dependencies:
is-callable: 1.2.7
- dev: true
- /form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
+ foreground-child@3.2.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+
+ form-data@4.0.0:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
- /format@0.2.2:
- resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
- engines: {node: '>=0.4.x'}
- dev: true
+ format@0.2.2: {}
- /fraction.js@4.2.0:
- resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
- dev: true
+ fraction.js@4.3.7: {}
- /fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- dev: true
+ fs.realpath@1.0.0: {}
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: true
+ fsevents@2.3.3:
optional: true
- /function-bind@1.1.1:
- resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+ function-bind@1.1.2: {}
- /function.prototype.name@1.1.5:
- resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
- engines: {node: '>= 0.4'}
+ function.prototype.name@1.1.6:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
functions-have-names: 1.2.3
- dev: true
- /functional-red-black-tree@1.0.1:
- resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
- dev: true
+ functional-red-black-tree@1.0.1: {}
- /functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
- dev: true
+ functions-have-names@1.2.3: {}
- /generate-function@2.3.1:
- resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
+ generate-function@2.3.1:
dependencies:
is-property: 1.0.2
- dev: true
- /get-intrinsic@1.2.0:
- resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
+ gensync@1.0.0-beta.2: {}
+
+ get-intrinsic@1.2.4:
dependencies:
- function-bind: 1.1.1
- has: 1.0.3
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
has-symbols: 1.0.3
+ hasown: 2.0.2
- /get-nonce@1.0.1:
- resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
- engines: {node: '>=6'}
- dev: false
+ get-nonce@1.0.1: {}
- /get-symbol-description@1.0.0:
- resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
- engines: {node: '>= 0.4'}
+ get-symbol-description@1.0.2:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- dev: true
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
- /glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
+ glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
- dev: true
- /glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
+ glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
- dev: true
- /glob@7.1.7:
- resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
+ glob-to-regexp@0.4.1: {}
+
+ glob@10.4.2:
+ dependencies:
+ foreground-child: 3.2.1
+ jackspeak: 3.4.0
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.0
+ path-scurry: 1.11.1
+
+ glob@7.1.7:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -3108,10 +6407,8 @@ packages:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
- dev: true
- /glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -3119,723 +6416,512 @@ packages:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
- dev: true
- /globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
- dev: false
+ globals@11.12.0: {}
- /globals@13.20.0:
- resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
- engines: {node: '>=8'}
+ globals@13.24.0:
dependencies:
type-fest: 0.20.2
- dev: true
- /globalthis@1.0.3:
- resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
- engines: {node: '>= 0.4'}
+ globalthis@1.0.4:
dependencies:
- define-properties: 1.2.0
- dev: true
+ define-properties: 1.2.1
+ gopd: 1.0.1
- /globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
+ globby@11.1.0:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.2.12
- ignore: 5.2.4
+ fast-glob: 3.3.2
+ ignore: 5.3.1
merge2: 1.4.1
slash: 3.0.0
- dev: true
- /goober@2.1.12(csstype@3.1.1):
- resolution: {integrity: sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==}
- peerDependencies:
- csstype: ^3.0.10
+ goober@2.1.14(csstype@3.1.3):
dependencies:
- csstype: 3.1.1
- dev: false
+ csstype: 3.1.3
- /gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ gopd@1.0.1:
dependencies:
- get-intrinsic: 1.2.0
- dev: true
+ get-intrinsic: 1.2.4
- /has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
- dev: true
+ graceful-fs@4.2.11: {}
- /has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
+ has-bigints@1.0.2: {}
- /has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
- dev: true
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
- /has-property-descriptors@1.0.0:
- resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ has-property-descriptors@1.0.2:
dependencies:
- get-intrinsic: 1.2.0
- dev: true
+ es-define-property: 1.0.0
- /has-proto@1.0.1:
- resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
- engines: {node: '>= 0.4'}
- dev: true
+ has-proto@1.0.3: {}
- /has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
+ has-symbols@1.0.3: {}
- /has-tostringtag@1.0.0:
- resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
- engines: {node: '>= 0.4'}
+ has-tostringtag@1.0.2:
dependencies:
has-symbols: 1.0.3
- dev: true
- /has@1.0.3:
- resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
- engines: {node: '>= 0.4.0'}
+ hasown@2.0.2:
dependencies:
- function-bind: 1.1.1
+ function-bind: 1.1.2
- /hast-util-parse-selector@2.2.5:
- resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
- dev: true
+ hast-util-parse-selector@2.2.5: {}
- /hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
- dev: false
+ hast-util-whitespace@2.0.1: {}
- /hastscript@6.0.0:
- resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
+ hastscript@6.0.0:
dependencies:
- '@types/hast': 2.3.4
+ '@types/hast': 2.3.10
comma-separated-tokens: 1.0.8
hast-util-parse-selector: 2.2.5
property-information: 5.6.0
space-separated-tokens: 1.1.5
- dev: true
- /highlight.js@10.7.3:
- resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
- dev: true
+ highlight.js@10.7.3: {}
- /highlight.js@11.7.0:
- resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==}
- engines: {node: '>=12.0.0'}
- dev: false
+ highlight.js@11.9.0: {}
- /hoist-non-react-statics@3.3.2:
- resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+ hoist-non-react-statics@3.3.2:
dependencies:
react-is: 16.13.1
- dev: false
- /html-parse-stringify@3.0.1:
- resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
+ html-parse-stringify@3.0.1:
dependencies:
void-elements: 3.1.0
- dev: false
- /http-errors@1.7.3:
- resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
- engines: {node: '>= 0.6'}
+ http-errors@1.7.3:
dependencies:
depd: 1.1.2
inherits: 2.0.4
setprototypeof: 1.1.1
statuses: 1.5.0
toidentifier: 1.0.0
- dev: false
- /http-proxy-agent@5.0.0:
- resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
- engines: {node: '>= 6'}
+ http-proxy-agent@7.0.2:
dependencies:
- '@tootallnate/once': 2.0.0
- agent-base: 6.0.2
- debug: 4.3.4(supports-color@5.5.0)
+ agent-base: 7.1.1
+ debug: 4.3.5(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
- dev: true
- /https-proxy-agent@5.0.1:
- resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
- engines: {node: '>= 6'}
+ https-proxy-agent@7.0.5:
dependencies:
- agent-base: 6.0.2
- debug: 4.3.4(supports-color@5.5.0)
+ agent-base: 7.1.1
+ debug: 4.3.5(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
- dev: true
- /hyphenate-style-name@1.0.4:
- resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==}
- dev: false
+ hyphenate-style-name@1.1.0: {}
- /i18next@22.4.14:
- resolution: {integrity: sha512-VtLPtbdwGn0+DAeE00YkiKKXadkwg+rBUV+0v8v0ikEjwdiJ0gmYChVE4GIa9HXymY6wKapkL93vGT7xpq6aTw==}
+ i18next@22.5.1:
dependencies:
- '@babel/runtime': 7.21.0
- dev: false
+ '@babel/runtime': 7.24.7
- /iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
+ iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
- dev: false
- /iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
+ iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
- dev: true
- /ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: true
+ ieee754@1.2.1: {}
- /ignore@5.2.4:
- resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
- engines: {node: '>= 4'}
- dev: true
+ ignore@5.3.1: {}
- /import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
+ import-fresh@3.3.0:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
- /imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
- dev: true
+ imurmurhash@0.1.4: {}
- /inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
- dev: true
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inherits@2.0.4: {}
- /inline-style-parser@0.1.1:
- resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
- dev: false
+ inline-style-parser@0.1.1: {}
- /inline-style-prefixer@6.0.4:
- resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==}
+ inline-style-prefixer@7.0.1:
dependencies:
css-in-js-utils: 3.1.0
- fast-loops: 1.1.3
- dev: false
- /internal-slot@1.0.5:
- resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
- engines: {node: '>= 0.4'}
+ internal-slot@1.0.7:
dependencies:
- get-intrinsic: 1.2.0
- has: 1.0.3
- side-channel: 1.0.4
- dev: true
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.0.6
- /invariant@2.2.4:
- resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+ invariant@2.2.4:
dependencies:
loose-envify: 1.4.0
- dev: false
- /is-alphabetical@1.0.4:
- resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
- dev: true
+ is-alphabetical@1.0.4: {}
- /is-alphanumerical@1.0.4:
- resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+ is-alphanumerical@1.0.4:
dependencies:
is-alphabetical: 1.0.4
is-decimal: 1.0.4
- dev: true
- /is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
- engines: {node: '>= 0.4'}
+ is-arguments@1.1.1:
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
- /is-array-buffer@3.0.2:
- resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+ is-array-buffer@3.0.4:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- is-typed-array: 1.1.10
- dev: true
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
- /is-arrayish@0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: false
+ is-arrayish@0.2.1: {}
- /is-bigint@1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ is-async-function@2.0.0:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-bigint@1.0.4:
dependencies:
has-bigints: 1.0.2
- dev: true
- /is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
+ is-binary-path@2.1.0:
dependencies:
- binary-extensions: 2.2.0
- dev: true
+ binary-extensions: 2.3.0
- /is-boolean-object@1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
+ is-boolean-object@1.1.2:
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
- /is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
- dev: false
+ is-buffer@2.0.5: {}
- /is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
- dev: true
+ is-callable@1.2.7: {}
- /is-core-module@2.11.0:
- resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+ is-core-module@2.14.0:
dependencies:
- has: 1.0.3
+ hasown: 2.0.2
- /is-date-object@1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
- engines: {node: '>= 0.4'}
+ is-data-view@1.0.1:
dependencies:
- has-tostringtag: 1.0.0
- dev: true
+ is-typed-array: 1.1.13
- /is-decimal@1.0.4:
- resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
- dev: true
+ is-date-object@1.0.5:
+ dependencies:
+ has-tostringtag: 1.0.2
- /is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
- dev: true
+ is-decimal@1.0.4: {}
- /is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
- dev: true
+ is-docker@2.2.1: {}
- /is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
- dev: true
- /is-hexadecimal@1.0.4:
- resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
- dev: true
+ is-hexadecimal@1.0.4: {}
- /is-map@2.0.2:
- resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
- dev: true
+ is-map@2.0.3: {}
- /is-negative-zero@2.0.2:
- resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
- engines: {node: '>= 0.4'}
- dev: true
+ is-negative-zero@2.0.3: {}
- /is-number-object@1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
+ is-number-object@1.0.7:
dependencies:
- has-tostringtag: 1.0.0
- dev: true
+ has-tostringtag: 1.0.2
- /is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
- dev: true
+ is-number@7.0.0: {}
- /is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
- dev: false
+ is-plain-obj@4.1.0: {}
- /is-property@1.0.2:
- resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
- dev: true
+ is-property@1.0.2: {}
- /is-regex@1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
+ is-regex@1.1.4:
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
- /is-set@2.0.2:
- resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
- dev: true
+ is-set@2.0.3: {}
- /is-shared-array-buffer@1.0.2:
- resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ is-shared-array-buffer@1.0.3:
dependencies:
- call-bind: 1.0.2
- dev: true
+ call-bind: 1.0.7
- /is-string@1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
+ is-string@1.0.7:
dependencies:
- has-tostringtag: 1.0.0
- dev: true
+ has-tostringtag: 1.0.2
- /is-symbol@1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
+ is-symbol@1.0.4:
dependencies:
has-symbols: 1.0.3
- dev: true
- /is-typed-array@1.1.10:
- resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
- engines: {node: '>= 0.4'}
+ is-typed-array@1.1.13:
dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- for-each: 0.3.3
- gopd: 1.0.1
- has-tostringtag: 1.0.0
- dev: true
+ which-typed-array: 1.1.15
- /is-weakmap@2.0.1:
- resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
- dev: true
+ is-weakmap@2.0.2: {}
- /is-weakref@1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ is-weakref@1.0.2:
dependencies:
- call-bind: 1.0.2
- dev: true
+ call-bind: 1.0.7
- /is-weakset@2.0.2:
- resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+ is-weakset@2.0.3:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- dev: true
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
- /is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
+ is-wsl@2.2.0:
dependencies:
is-docker: 2.2.1
- dev: true
- /isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
- dev: true
+ isarray@2.0.5: {}
- /isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- dev: true
+ isexe@2.0.0: {}
- /jose@4.14.4:
- resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==}
- dev: false
+ iterator.prototype@1.1.2:
+ dependencies:
+ define-properties: 1.2.1
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ reflect.getprototypeof: 1.0.6
+ set-function-name: 2.0.2
- /js-cookie@2.2.1:
- resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==}
- dev: false
+ jackspeak@3.4.0:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
- /js-md4@0.3.2:
- resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==}
- dev: true
+ jiti@1.21.6: {}
- /js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ jose@4.15.9: {}
- /js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
+ js-cookie@2.2.1: {}
+
+ js-md4@0.3.2: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
- dev: true
- /jsbi@4.3.0:
- resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==}
- dev: true
+ jsbi@4.3.0: {}
- /jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
- dev: false
+ jsesc@2.5.2: {}
- /json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: false
+ json-buffer@3.0.1: {}
- /json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- dev: true
+ json-parse-even-better-errors@2.3.1: {}
- /json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
- dev: true
+ json-schema-traverse@0.4.1: {}
- /json5@1.0.2:
- resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
- hasBin: true
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@1.0.2:
dependencies:
minimist: 1.2.8
- dev: true
- /jsonwebtoken@9.0.0:
- resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==}
- engines: {node: '>=12', npm: '>=6'}
+ json5@2.2.3: {}
+
+ jsonwebtoken@9.0.2:
dependencies:
jws: 3.2.2
- lodash: 4.17.21
+ lodash.includes: 4.3.0
+ lodash.isboolean: 3.0.3
+ lodash.isinteger: 4.0.4
+ lodash.isnumber: 3.0.3
+ lodash.isplainobject: 4.0.6
+ lodash.isstring: 4.0.1
+ lodash.once: 4.1.1
ms: 2.1.3
- semver: 7.3.8
- dev: true
+ semver: 7.6.2
- /jsx-ast-utils@3.3.3:
- resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
- engines: {node: '>=4.0'}
+ jsx-ast-utils@3.3.5:
dependencies:
- array-includes: 3.1.6
- object.assign: 4.1.4
- dev: true
+ array-includes: 3.1.8
+ array.prototype.flat: 1.3.2
+ object.assign: 4.1.5
+ object.values: 1.2.0
- /jwa@1.4.1:
- resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
+ jwa@1.4.1:
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
safe-buffer: 5.2.1
- dev: true
- /jwa@2.0.0:
- resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
+ jwa@2.0.0:
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
safe-buffer: 5.2.1
- dev: true
- /jws@3.2.2:
- resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
+ jws@3.2.2:
dependencies:
jwa: 1.4.1
safe-buffer: 5.2.1
- dev: true
- /jws@4.0.0:
- resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
+ jws@4.0.0:
dependencies:
jwa: 2.0.0
safe-buffer: 5.2.1
- dev: true
- /kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: false
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
- /language-subtag-registry@0.3.22:
- resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
- dev: true
+ kleur@4.1.5: {}
- /language-tags@1.0.5:
- resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
+ language-subtag-registry@0.3.23: {}
+
+ language-tags@1.0.9:
dependencies:
- language-subtag-registry: 0.3.22
- dev: true
+ language-subtag-registry: 0.3.23
- /levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
- dev: true
- /lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
- dev: true
+ lilconfig@2.1.0: {}
- /lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: false
+ lilconfig@3.1.2: {}
- /lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
- dev: false
+ lines-and-columns@1.2.4: {}
- /lodash.castarray@4.4.0:
- resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
- dev: true
+ lodash-es@4.17.21: {}
- /lodash.isplainobject@4.0.6:
- resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
- dev: true
+ lodash.castarray@4.4.0: {}
- /lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- dev: true
+ lodash.includes@4.3.0: {}
- /lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ lodash.isboolean@3.0.3: {}
- /long@5.2.1:
- resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==}
- dev: true
+ lodash.isinteger@4.0.4: {}
- /longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- dev: false
+ lodash.isnumber@3.0.3: {}
- /loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.isstring@4.0.1: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.once@4.1.1: {}
+
+ lodash@4.17.21: {}
+
+ long@5.2.3: {}
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
- /lowlight@1.20.0:
- resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+ lowlight@1.20.0:
dependencies:
fault: 1.0.4
highlight.js: 10.7.3
- dev: true
- /lru-cache@6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
- engines: {node: '>=10'}
+ lru-cache@10.3.0: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
dependencies:
yallist: 4.0.0
- /lru-cache@7.18.3:
- resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
- engines: {node: '>=12'}
- dev: true
+ lru-cache@7.18.3: {}
- /make-error@1.3.6:
- resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
- dev: true
+ lru-cache@8.0.5: {}
- /markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
- dev: false
+ make-error@1.3.6: {}
- /mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+ markdown-table@3.0.3: {}
+
+ mdast-util-definitions@5.1.2:
dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.10
unist-util-visit: 4.1.2
- dev: false
- /mdast-util-find-and-replace@2.2.2:
- resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
+ mdast-util-find-and-replace@2.2.2:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
escape-string-regexp: 5.0.0
unist-util-is: 5.2.1
unist-util-visit-parents: 5.1.3
- dev: false
- /mdast-util-from-markdown@1.3.0:
- resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==}
+ mdast-util-from-markdown@1.3.1:
dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.10
decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.1.1
- micromark: 3.1.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-decode-string: 1.0.2
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
unist-util-stringify-position: 3.0.3
uvu: 0.5.6
transitivePeerDependencies:
- supports-color
- dev: false
- /mdast-util-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+ mdast-util-gfm-autolink-literal@1.0.3:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
ccount: 2.0.1
mdast-util-find-and-replace: 2.2.2
- micromark-util-character: 1.1.0
- dev: false
+ micromark-util-character: 1.2.0
- /mdast-util-gfm-footnote@1.0.2:
- resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
+ mdast-util-gfm-footnote@1.0.2:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
mdast-util-to-markdown: 1.5.0
- micromark-util-normalize-identifier: 1.0.0
- dev: false
+ micromark-util-normalize-identifier: 1.1.0
- /mdast-util-gfm-strikethrough@1.0.3:
- resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+ mdast-util-gfm-strikethrough@1.0.3:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
mdast-util-to-markdown: 1.5.0
- dev: false
- /mdast-util-gfm-table@1.0.7:
- resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+ mdast-util-gfm-table@1.0.7:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
markdown-table: 3.0.3
- mdast-util-from-markdown: 1.3.0
+ mdast-util-from-markdown: 1.3.1
mdast-util-to-markdown: 1.5.0
transitivePeerDependencies:
- supports-color
- dev: false
- /mdast-util-gfm-task-list-item@1.0.2:
- resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+ mdast-util-gfm-task-list-item@1.0.2:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
mdast-util-to-markdown: 1.5.0
- dev: false
- /mdast-util-gfm@2.0.2:
- resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
+ mdast-util-gfm@2.0.2:
dependencies:
- mdast-util-from-markdown: 1.3.0
+ mdast-util-from-markdown: 1.3.1
mdast-util-gfm-autolink-literal: 1.0.3
mdast-util-gfm-footnote: 1.0.2
mdast-util-gfm-strikethrough: 1.0.3
@@ -3844,654 +6930,465 @@ packages:
mdast-util-to-markdown: 1.5.0
transitivePeerDependencies:
- supports-color
- dev: false
- /mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+ mdast-util-phrasing@3.0.1:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
unist-util-is: 5.2.1
- dev: false
- /mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+ mdast-util-to-hast@12.3.0:
dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
trim-lines: 3.0.1
unist-util-generated: 2.0.1
unist-util-position: 4.0.4
unist-util-visit: 4.1.2
- dev: false
- /mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+ mdast-util-to-markdown@1.5.0:
dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.10
longest-streak: 3.1.0
mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.1.1
- micromark-util-decode-string: 1.0.2
+ mdast-util-to-string: 3.2.0
+ micromark-util-decode-string: 1.1.0
unist-util-visit: 4.1.2
zwitch: 2.0.4
- dev: false
- /mdast-util-to-string@3.1.1:
- resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
+ mdast-util-to-string@3.2.0:
dependencies:
- '@types/mdast': 3.0.11
- dev: false
+ '@types/mdast': 3.0.15
- /mdn-data@2.0.14:
- resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
- dev: false
+ mdn-data@2.0.14: {}
- /merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
- dev: true
+ merge2@1.4.1: {}
- /micro-cors@0.1.1:
- resolution: {integrity: sha512-6WqIahA5sbQR1Gjexp1VuWGFDKbZZleJb/gy1khNGk18a6iN1FdTcr3Q8twaxkV5H94RjxIBjirYbWCehpMBFw==}
- engines: {node: '>=6'}
- dev: false
+ micro-cors@0.1.1: {}
- /micro@10.0.1:
- resolution: {integrity: sha512-9uwZSsUrqf6+4FLLpiPj5TRWQv5w5uJrJwsx1LR/TjqvQmKC1XnGQ9OHrFwR3cbZ46YqPqxO/XJCOpWnqMPw2Q==}
- engines: {node: '>= 16.0.0'}
- hasBin: true
+ micro@10.0.1:
dependencies:
arg: 4.1.0
content-type: 1.0.4
raw-body: 2.4.1
- dev: false
- /micromark-core-commonmark@1.0.6:
- resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
+ micromark-core-commonmark@1.1.0:
dependencies:
decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.0.0
- micromark-factory-label: 1.0.2
- micromark-factory-space: 1.0.0
- micromark-factory-title: 1.0.2
- micromark-factory-whitespace: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-chunked: 1.0.0
- micromark-util-classify-character: 1.0.0
- micromark-util-html-tag-name: 1.1.0
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-subtokenize: 1.0.2
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-extension-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==}
+ micromark-extension-gfm-autolink-literal@1.0.5:
dependencies:
- micromark-util-character: 1.1.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-footnote@1.0.4:
- resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==}
- dependencies:
- micromark-core-commonmark: 1.0.6
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-util-character: 1.2.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-gfm-footnote@1.1.2:
+ dependencies:
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-extension-gfm-strikethrough@1.0.4:
- resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==}
+ micromark-extension-gfm-strikethrough@1.0.7:
dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-classify-character: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-extension-gfm-table@1.0.5:
- resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==}
+ micromark-extension-gfm-table@1.0.7:
dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-extension-gfm-tagfilter@1.0.1:
- resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==}
+ micromark-extension-gfm-tagfilter@1.0.2:
dependencies:
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-types: 1.1.0
- /micromark-extension-gfm-task-list-item@1.0.3:
- resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==}
+ micromark-extension-gfm-task-list-item@1.0.5:
dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm@2.0.1:
- resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==}
- dependencies:
- micromark-extension-gfm-autolink-literal: 1.0.3
- micromark-extension-gfm-footnote: 1.0.4
- micromark-extension-gfm-strikethrough: 1.0.4
- micromark-extension-gfm-table: 1.0.5
- micromark-extension-gfm-tagfilter: 1.0.1
- micromark-extension-gfm-task-list-item: 1.0.3
- micromark-util-combine-extensions: 1.0.0
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-factory-destination@1.0.0:
- resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-factory-label@1.0.2:
- resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
- /micromark-factory-space@1.0.0:
- resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==}
+ micromark-extension-gfm@2.0.3:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 1.0.5
+ micromark-extension-gfm-footnote: 1.1.2
+ micromark-extension-gfm-strikethrough: 1.0.7
+ micromark-extension-gfm-table: 1.0.7
+ micromark-extension-gfm-tagfilter: 1.0.2
+ micromark-extension-gfm-task-list-item: 1.0.5
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-destination@1.1.0:
dependencies:
- micromark-util-character: 1.1.0
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- /micromark-factory-title@1.0.2:
- resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==}
+ micromark-factory-label@1.1.0:
dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-factory-whitespace@1.0.0:
- resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==}
+ micromark-factory-space@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-title@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-whitespace@1.1.0:
dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- /micromark-util-character@1.1.0:
- resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==}
+ micromark-util-character@1.2.0:
dependencies:
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- /micromark-util-chunked@1.0.0:
- resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==}
+ micromark-util-chunked@1.1.0:
dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
+ micromark-util-symbol: 1.1.0
- /micromark-util-classify-character@1.0.0:
- resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==}
+ micromark-util-classify-character@1.1.0:
dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- /micromark-util-combine-extensions@1.0.0:
- resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==}
+ micromark-util-combine-extensions@1.1.0:
dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
- /micromark-util-decode-numeric-character-reference@1.0.0:
- resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==}
+ micromark-util-decode-numeric-character-reference@1.1.0:
dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
+ micromark-util-symbol: 1.1.0
- /micromark-util-decode-string@1.0.2:
- resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==}
+ micromark-util-decode-string@1.1.0:
dependencies:
decode-named-character-reference: 1.0.2
- micromark-util-character: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-symbol: 1.0.1
- dev: false
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
- /micromark-util-encode@1.0.1:
- resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==}
- dev: false
+ micromark-util-encode@1.1.0: {}
- /micromark-util-html-tag-name@1.1.0:
- resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==}
- dev: false
+ micromark-util-html-tag-name@1.2.0: {}
- /micromark-util-normalize-identifier@1.0.0:
- resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==}
+ micromark-util-normalize-identifier@1.1.0:
dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
+ micromark-util-symbol: 1.1.0
- /micromark-util-resolve-all@1.0.0:
- resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==}
+ micromark-util-resolve-all@1.1.0:
dependencies:
- micromark-util-types: 1.0.2
- dev: false
+ micromark-util-types: 1.1.0
- /micromark-util-sanitize-uri@1.1.0:
- resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==}
+ micromark-util-sanitize-uri@1.2.0:
dependencies:
- micromark-util-character: 1.1.0
- micromark-util-encode: 1.0.1
- micromark-util-symbol: 1.0.1
- dev: false
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
- /micromark-util-subtokenize@1.0.2:
- resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==}
+ micromark-util-subtokenize@1.1.0:
dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
- dev: false
- /micromark-util-symbol@1.0.1:
- resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==}
- dev: false
+ micromark-util-symbol@1.1.0: {}
- /micromark-util-types@1.0.2:
- resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
- dev: false
+ micromark-util-types@1.1.0: {}
- /micromark@3.1.0:
- resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
+ micromark@3.2.0:
dependencies:
- '@types/debug': 4.1.7
- debug: 4.3.4(supports-color@5.5.0)
+ '@types/debug': 4.1.12
+ debug: 4.3.5(supports-color@5.5.0)
decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.0.6
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-chunked: 1.0.0
- micromark-util-combine-extensions: 1.0.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-encode: 1.0.1
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-subtokenize: 1.0.2
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
uvu: 0.5.6
transitivePeerDependencies:
- supports-color
- dev: false
- /micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
+ micromatch@4.0.7:
dependencies:
- braces: 3.0.2
+ braces: 3.0.3
picomatch: 2.3.1
- dev: true
- /mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
+ mime-db@1.52.0: {}
- /mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
+ mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
- /minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
- dev: true
- /minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- dev: true
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
- /mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
- dev: false
+ minimist@1.2.8: {}
- /ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ minipass@7.1.2: {}
- /ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- dev: true
+ mri@1.2.0: {}
- /mssql@9.1.1:
- resolution: {integrity: sha512-m0yTx9xzUtTvJpWJHqknUXUDPRnJXZYOOFNygnNIXn1PBkLsC/rkXQdquObd+M0ZPlBhGC00Jg28zG0wCl7VWg==}
- engines: {node: '>=10'}
- hasBin: true
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ mssql@9.3.2:
dependencies:
- '@tediousjs/connection-string': 0.4.2
- commander: 9.5.0
- debug: 4.3.4(supports-color@5.5.0)
- rfdc: 1.3.0
+ '@tediousjs/connection-string': 0.5.0
+ commander: 11.1.0
+ debug: 4.3.5(supports-color@5.5.0)
+ rfdc: 1.4.1
tarn: 3.0.2
tedious: 15.1.3
transitivePeerDependencies:
- supports-color
- dev: true
- /mysql2@3.2.0:
- resolution: {integrity: sha512-0Vn6a9WSrq6fWwvPgrvIwnOCldiEcgbzapVRDAtDZ4cMTxN7pnGqCTx8EG32S/NYXl6AXkdO+9hV1tSIi/LigA==}
- engines: {node: '>= 8.0'}
+ mysql2@3.10.2:
dependencies:
denque: 2.1.0
generate-function: 2.3.1
iconv-lite: 0.6.3
- long: 5.2.1
- lru-cache: 7.18.3
+ long: 5.2.3
+ lru-cache: 8.0.5
named-placeholders: 1.1.3
seq-queue: 0.0.5
sqlstring: 2.3.3
- dev: true
- /named-placeholders@1.1.3:
- resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==}
- engines: {node: '>=12.0.0'}
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ named-placeholders@1.1.3:
dependencies:
lru-cache: 7.18.3
- dev: true
- /nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==}
- peerDependencies:
- react: '*'
- react-dom: '*'
+ nano-css@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
css-tree: 1.1.3
- csstype: 3.1.1
+ csstype: 3.1.3
fastest-stable-stringify: 2.0.2
- inline-style-prefixer: 6.0.4
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
+ inline-style-prefixer: 7.0.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
rtl-css-js: 1.16.1
- sourcemap-codec: 1.4.8
stacktrace-js: 2.0.2
- stylis: 4.1.3
- dev: false
+ stylis: 4.3.2
- /nanoid@3.3.4:
- resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
+ nanoid@3.3.7: {}
- /native-duplexpair@1.0.0:
- resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==}
- dev: true
+ native-duplexpair@1.0.0: {}
- /natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- dev: true
+ natural-compare@1.4.0: {}
- /next-auth@4.22.1(next@13.2.4)(nodemailer@6.9.1)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-NTR3f6W7/AWXKw8GSsgSyQcDW6jkslZLH8AiZa5PQ09w1kR8uHtR9rez/E9gAq/o17+p0JYHE8QjF3RoniiObA==}
- peerDependencies:
- next: ^12.2.5 || ^13
- nodemailer: ^6.6.5
- react: ^17.0.2 || ^18
- react-dom: ^17.0.2 || ^18
- peerDependenciesMeta:
- nodemailer:
- optional: true
+ next-auth@4.24.7(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.21.0
- '@panva/hkdf': 1.1.1
+ '@babel/runtime': 7.24.7
+ '@panva/hkdf': 1.2.1
cookie: 0.5.0
- jose: 4.14.4
- next: 13.2.4(react-dom@18.2.0)(react@18.2.0)
- nodemailer: 6.9.1
+ jose: 4.15.9
+ next: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
oauth: 0.9.15
- openid-client: 5.4.2
- preact: 10.13.2
- preact-render-to-string: 5.2.6(preact@10.13.2)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
+ openid-client: 5.6.5
+ preact: 10.22.1
+ preact-render-to-string: 5.2.6(preact@10.22.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
uuid: 8.3.2
- dev: false
-
- /next@13.2.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==}
- engines: {node: '>=14.6.0'}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.4.0
- fibers: '>= 3.1.0'
- node-sass: ^6.0.0 || ^7.0.0
- react: ^18.2.0
- react-dom: ^18.2.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- fibers:
- optional: true
- node-sass:
- optional: true
- sass:
- optional: true
- dependencies:
- '@next/env': 13.2.4
- '@swc/helpers': 0.4.14
- caniuse-lite: 1.0.30001466
- postcss: 8.4.14
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- styled-jsx: 5.1.1(react@18.2.0)
optionalDependencies:
- '@next/swc-android-arm-eabi': 13.2.4
- '@next/swc-android-arm64': 13.2.4
- '@next/swc-darwin-arm64': 13.2.4
- '@next/swc-darwin-x64': 13.2.4
- '@next/swc-freebsd-x64': 13.2.4
- '@next/swc-linux-arm-gnueabihf': 13.2.4
- '@next/swc-linux-arm64-gnu': 13.2.4
- '@next/swc-linux-arm64-musl': 13.2.4
- '@next/swc-linux-x64-gnu': 13.2.4
- '@next/swc-linux-x64-musl': 13.2.4
- '@next/swc-win32-arm64-msvc': 13.2.4
- '@next/swc-win32-ia32-msvc': 13.2.4
- '@next/swc-win32-x64-msvc': 13.2.4
+ nodemailer: 6.9.14
+
+ next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@next/env': 13.5.6
+ '@swc/helpers': 0.5.2
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001640
+ postcss: 8.4.31
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ styled-jsx: 5.1.1(@babel/core@7.24.7)(react@18.3.1)
+ watchpack: 2.4.0
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 13.5.6
+ '@next/swc-darwin-x64': 13.5.6
+ '@next/swc-linux-arm64-gnu': 13.5.6
+ '@next/swc-linux-arm64-musl': 13.5.6
+ '@next/swc-linux-x64-gnu': 13.5.6
+ '@next/swc-linux-x64-musl': 13.5.6
+ '@next/swc-win32-arm64-msvc': 13.5.6
+ '@next/swc-win32-ia32-msvc': 13.5.6
+ '@next/swc-win32-x64-msvc': 13.5.6
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- dev: false
- /node-abort-controller@3.1.1:
- resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
- dev: true
+ node-abort-controller@3.1.1: {}
- /node-releases@2.0.10:
- resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
- dev: true
+ node-releases@2.0.14: {}
- /nodemailer@6.9.1:
- resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==}
- engines: {node: '>=6.0.0'}
- dev: false
+ nodemailer@6.9.14: {}
- /normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ normalize-path@3.0.0: {}
- /normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ normalize-range@0.1.2: {}
- /oauth@0.9.15:
- resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
- dev: false
+ oauth@0.9.15: {}
- /object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
+ object-assign@4.1.1: {}
- /object-hash@2.2.0:
- resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
- engines: {node: '>= 6'}
- dev: false
+ object-hash@2.2.0: {}
- /object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
- dev: true
+ object-hash@3.0.0: {}
- /object-inspect@1.12.3:
- resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
+ object-inspect@1.13.2: {}
- /object-is@1.1.5:
- resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
- engines: {node: '>= 0.4'}
+ object-is@1.1.6:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
- /object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
- dev: true
+ object-keys@1.1.1: {}
- /object.assign@4.1.4:
- resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
- engines: {node: '>= 0.4'}
+ object.assign@4.1.5:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
+ call-bind: 1.0.7
+ define-properties: 1.2.1
has-symbols: 1.0.3
object-keys: 1.1.1
- dev: true
- /object.entries@1.1.6:
- resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
- engines: {node: '>= 0.4'}
+ object.entries@1.1.8:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
- /object.fromentries@2.0.6:
- resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
- engines: {node: '>= 0.4'}
+ object.fromentries@2.0.8:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
- /object.hasown@1.1.2:
- resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
+ object.groupby@1.0.3:
dependencies:
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
- /object.values@1.1.6:
- resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
- engines: {node: '>= 0.4'}
+ object.hasown@1.1.4:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
- /oidc-token-hash@5.0.3:
- resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
- engines: {node: ^10.13.0 || >=12.0.0}
- dev: false
+ object.values@1.2.0:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ obuf@1.1.2: {}
+
+ oidc-token-hash@5.0.3: {}
+
+ once@1.4.0:
dependencies:
wrappy: 1.0.2
- dev: true
- /open@8.4.2:
- resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
- engines: {node: '>=12'}
+ open@8.4.2:
dependencies:
define-lazy-prop: 2.0.0
is-docker: 2.2.1
is-wsl: 2.2.0
- dev: true
- /openid-client@5.4.2:
- resolution: {integrity: sha512-lIhsdPvJ2RneBm3nGBBhQchpe3Uka//xf7WPHTIglery8gnckvW7Bd9IaQzekzXJvWthCMyi/xVEyGW0RFPytw==}
+ openid-client@5.6.5:
dependencies:
- jose: 4.14.4
+ jose: 4.15.9
lru-cache: 6.0.0
object-hash: 2.2.0
oidc-token-hash: 5.0.3
- dev: false
- /optionator@0.9.1:
- resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
- engines: {node: '>= 0.8.0'}
+ optionator@0.9.4:
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.4.1
prelude-ls: 1.2.1
type-check: 0.4.0
- word-wrap: 1.2.3
- dev: true
+ word-wrap: 1.2.5
- /packet-reader@1.0.0:
- resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==}
- dev: true
+ package-json-from-dist@1.0.0: {}
- /parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
+ parent-module@1.0.1:
dependencies:
callsites: 3.1.0
- /parse-entities@2.0.0:
- resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+ parse-entities@2.0.0:
dependencies:
character-entities: 1.2.4
character-entities-legacy: 1.1.4
@@ -4499,528 +7396,359 @@ packages:
is-alphanumerical: 1.0.4
is-decimal: 1.0.4
is-hexadecimal: 1.0.4
- dev: true
- /parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
+ parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.18.6
+ '@babel/code-frame': 7.24.7
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
- dev: false
- /path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.3.0
+ minipass: 7.1.2
- /path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
- dev: true
+ path-type@4.0.0: {}
- /path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ pg-cloudflare@1.1.1:
+ optional: true
- /path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
+ pg-connection-string@2.6.4: {}
- /pg-connection-string@2.5.0:
- resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
- dev: true
+ pg-int8@1.0.1: {}
- /pg-int8@1.0.1:
- resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
- engines: {node: '>=4.0.0'}
- dev: true
+ pg-numeric@1.0.2: {}
- /pg-pool@3.6.0(pg@8.10.0):
- resolution: {integrity: sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==}
- peerDependencies:
- pg: '>=8.0'
+ pg-pool@3.6.2(pg@8.12.0):
dependencies:
- pg: 8.10.0
- dev: true
+ pg: 8.12.0
- /pg-protocol@1.6.0:
- resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==}
- dev: true
+ pg-protocol@1.6.1: {}
- /pg-types@2.2.0:
- resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
- engines: {node: '>=4'}
+ pg-types@2.2.0:
dependencies:
pg-int8: 1.0.1
postgres-array: 2.0.0
postgres-bytea: 1.0.0
postgres-date: 1.0.7
postgres-interval: 1.2.0
- dev: true
- /pg@8.10.0:
- resolution: {integrity: sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ==}
- engines: {node: '>= 8.0.0'}
- peerDependencies:
- pg-native: '>=3.0.1'
- peerDependenciesMeta:
- pg-native:
- optional: true
+ pg-types@4.0.2:
dependencies:
- buffer-writer: 2.0.0
- packet-reader: 1.0.0
- pg-connection-string: 2.5.0
- pg-pool: 3.6.0(pg@8.10.0)
- pg-protocol: 1.6.0
+ pg-int8: 1.0.1
+ pg-numeric: 1.0.2
+ postgres-array: 3.0.2
+ postgres-bytea: 3.0.0
+ postgres-date: 2.1.0
+ postgres-interval: 3.0.0
+ postgres-range: 1.1.4
+
+ pg@8.12.0:
+ dependencies:
+ pg-connection-string: 2.6.4
+ pg-pool: 3.6.2(pg@8.12.0)
+ pg-protocol: 1.6.1
pg-types: 2.2.0
pgpass: 1.0.5
- dev: true
+ optionalDependencies:
+ pg-cloudflare: 1.1.1
- /pgpass@1.0.5:
- resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
+ pgpass@1.0.5:
dependencies:
- split2: 4.1.0
- dev: true
+ split2: 4.2.0
- /picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ picocolors@1.0.1: {}
- /picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
+ picomatch@2.3.1: {}
- /pify@2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
- dev: true
+ pify@2.3.0: {}
- /postcss-import@14.1.0(postcss@8.4.21):
- resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- postcss: ^8.0.0
+ pirates@4.0.6: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ postcss-import@15.1.0(postcss@8.4.39):
dependencies:
- postcss: 8.4.21
+ postcss: 8.4.39
postcss-value-parser: 4.2.0
read-cache: 1.0.0
- resolve: 1.22.1
- dev: true
+ resolve: 1.22.8
- /postcss-js@4.0.1(postcss@8.4.21):
- resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.4.21
+ postcss-js@4.0.1(postcss@8.4.39):
dependencies:
camelcase-css: 2.0.1
- postcss: 8.4.21
- dev: true
+ postcss: 8.4.39
- /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1):
- resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
- engines: {node: '>= 10'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
+ postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)):
dependencies:
- lilconfig: 2.1.0
- postcss: 8.4.21
- ts-node: 10.9.1(@types/node@18.15.3)(typescript@4.9.5)
- yaml: 1.10.2
- dev: true
+ lilconfig: 3.1.2
+ yaml: 2.4.5
+ optionalDependencies:
+ postcss: 8.4.39
+ ts-node: 10.9.2(@types/node@18.19.39)(typescript@4.9.5)
- /postcss-nested@6.0.0(postcss@8.4.21):
- resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
+ postcss-nested@6.0.1(postcss@8.4.39):
dependencies:
- postcss: 8.4.21
- postcss-selector-parser: 6.0.11
- dev: true
+ postcss: 8.4.39
+ postcss-selector-parser: 6.1.0
- /postcss-selector-parser@6.0.10:
- resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
- engines: {node: '>=4'}
+ postcss-selector-parser@6.0.10:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- dev: true
- /postcss-selector-parser@6.0.11:
- resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
- engines: {node: '>=4'}
+ postcss-selector-parser@6.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- dev: true
- /postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ postcss-value-parser@4.2.0: {}
- /postcss@8.4.14:
- resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
- engines: {node: ^10 || ^12 || >=14}
+ postcss@8.4.31:
dependencies:
- nanoid: 3.3.4
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: false
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
- /postcss@8.4.21:
- resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
- engines: {node: ^10 || ^12 || >=14}
+ postcss@8.4.39:
dependencies:
- nanoid: 3.3.4
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
- /postgres-array@2.0.0:
- resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
- engines: {node: '>=4'}
- dev: true
+ postgres-array@2.0.0: {}
- /postgres-bytea@1.0.0:
- resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
- engines: {node: '>=0.10.0'}
- dev: true
+ postgres-array@3.0.2: {}
- /postgres-date@1.0.7:
- resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
- engines: {node: '>=0.10.0'}
- dev: true
+ postgres-bytea@1.0.0: {}
- /postgres-interval@1.2.0:
- resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
- engines: {node: '>=0.10.0'}
+ postgres-bytea@3.0.0:
+ dependencies:
+ obuf: 1.1.2
+
+ postgres-date@1.0.7: {}
+
+ postgres-date@2.1.0: {}
+
+ postgres-interval@1.2.0:
dependencies:
xtend: 4.0.2
- dev: true
- /preact-render-to-string@5.2.6(preact@10.13.2):
- resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
- peerDependencies:
- preact: '>=10'
+ postgres-interval@3.0.0: {}
+
+ postgres-range@1.1.4: {}
+
+ preact-render-to-string@5.2.6(preact@10.22.1):
dependencies:
- preact: 10.13.2
+ preact: 10.22.1
pretty-format: 3.8.0
- dev: false
- /preact@10.13.2:
- resolution: {integrity: sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==}
- dev: false
+ preact@10.22.1: {}
- /prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
- dev: true
+ prelude-ls@1.2.1: {}
- /prettier@2.8.8:
- resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- dev: true
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
- /pretty-format@3.8.0:
- resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
- dev: false
+ prettier@2.8.8: {}
- /prisma@4.13.0:
- resolution: {integrity: sha512-L9mqjnSmvWIRCYJ9mQkwCtj4+JDYYTdhoyo8hlsHNDXaZLh/b4hR0IoKIBbTKxZuyHQzLopb/+0Rvb69uGV7uA==}
- engines: {node: '>=14.17'}
- hasBin: true
- requiresBuild: true
+ pretty-format@3.8.0: {}
+
+ prisma@4.16.2:
dependencies:
- '@prisma/engines': 4.13.0
+ '@prisma/engines': 4.16.2
- /prismjs@1.27.0:
- resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
- engines: {node: '>=6'}
- dev: true
+ prismjs@1.27.0: {}
- /prismjs@1.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
- engines: {node: '>=6'}
- dev: true
+ prismjs@1.29.0: {}
- /prop-types@15.8.1:
- resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
- /property-information@5.6.0:
- resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+ property-information@5.6.0:
dependencies:
xtend: 4.0.2
- dev: true
- /property-information@6.2.0:
- resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
- dev: false
+ property-information@6.5.0: {}
- /proxy-from-env@1.1.0:
- resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
- dev: false
+ proxy-from-env@1.1.0: {}
- /punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
- dev: true
+ punycode@2.3.1: {}
- /qs@6.11.1:
- resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==}
- engines: {node: '>=0.6'}
+ qs@6.12.2:
dependencies:
- side-channel: 1.0.4
- dev: false
-
- /queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: true
+ side-channel: 1.0.6
- /quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
- dev: true
+ queue-microtask@1.2.3: {}
- /raw-body@2.4.1:
- resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==}
- engines: {node: '>= 0.8'}
+ raw-body@2.4.1:
dependencies:
bytes: 3.1.0
http-errors: 1.7.3
iconv-lite: 0.4.24
unpipe: 1.0.0
- dev: false
- /react-data-table-component@7.5.3(react@18.2.0)(styled-components@5.3.9):
- resolution: {integrity: sha512-JhatRTgThAAa1HobPaPmkNPsjLT6+fnMIdtcXRCy+0bSYN7XJnTgob9Qyi4bjHh/8tMPTHtxZCV/TKiPwRvFMA==}
- peerDependencies:
- react: '>= 16.8.3'
- styled-components: '>= 4'
+ react-data-table-component@7.6.2(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)):
dependencies:
deepmerge: 4.3.1
- react: 18.2.0
- styled-components: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)
- dev: false
+ react: 18.3.1
+ styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
- /react-dom@18.2.0(react@18.2.0):
- resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
- peerDependencies:
- react: ^18.2.0
+ react-dom@18.3.1(react@18.3.1):
dependencies:
loose-envify: 1.4.0
- react: 18.2.0
- scheduler: 0.23.0
- dev: false
+ react: 18.3.1
+ scheduler: 0.23.2
- /react-hot-toast@2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==}
- engines: {node: '>=10'}
- peerDependencies:
- react: '>=16'
- react-dom: '>=16'
+ react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- goober: 2.1.12(csstype@3.1.1)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
+ goober: 2.1.14(csstype@3.1.3)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
- csstype
- dev: false
- /react-i18next@12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==}
- peerDependencies:
- i18next: '>= 19.0.0'
- react: '>= 16.8.0'
- react-dom: '*'
- react-native: '*'
- peerDependenciesMeta:
- react-dom:
- optional: true
- react-native:
- optional: true
+ react-i18next@12.3.1(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.21.0
+ '@babel/runtime': 7.24.7
html-parse-stringify: 3.0.1
- i18next: 22.4.14
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ i18next: 22.5.1
+ react: 18.3.1
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
- /react-icons@4.8.0(react@18.2.0):
- resolution: {integrity: sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==}
- peerDependencies:
- react: '*'
+ react-icons@4.12.0(react@18.3.1):
dependencies:
- react: 18.2.0
- dev: false
+ react: 18.3.1
- /react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ react-is@16.13.1: {}
- /react-is@18.2.0:
- resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
- dev: false
+ react-is@18.3.1: {}
- /react-loader-spinner@5.3.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-G2vw4ssX+RDZ/vfaeva06yfNqyFViv/u+tVZ3kFLy5TKNlNx2DbuwreBSpRtPespQA+VxinxUJsigwLwG9erOg==}
- peerDependencies:
- react: ^16.0.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-loader-spinner@5.5.0(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-is: 18.2.0
- styled-components: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+ styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
styled-tools: 1.7.2
- dev: false
+ transitivePeerDependencies:
+ - '@babel/core'
- /react-markdown@8.0.6(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-KgPWsYgHuftdx510wwIzpwf+5js/iHqBR+fzxefv8Khk3mFbnioF1bmL2idHN3ler0LMQmICKeDrWnZrX9mtbQ==}
- peerDependencies:
- '@types/react': '>=16'
- react: '>=16'
+ react-markdown@8.0.7(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/hast': 2.3.4
- '@types/prop-types': 15.7.5
- '@types/react': 18.0.28
- '@types/unist': 2.0.6
+ '@types/hast': 2.3.10
+ '@types/prop-types': 15.7.12
+ '@types/react': 18.3.3
+ '@types/unist': 2.0.10
comma-separated-tokens: 2.0.3
hast-util-whitespace: 2.0.1
prop-types: 15.8.1
- property-information: 6.2.0
- react: 18.2.0
- react-is: 18.2.0
- remark-parse: 10.0.1
+ property-information: 6.5.0
+ react: 18.3.1
+ react-is: 18.3.1
+ remark-parse: 10.0.2
remark-rehype: 10.1.0
space-separated-tokens: 2.0.2
- style-to-object: 0.4.1
+ style-to-object: 0.4.4
unified: 10.1.2
unist-util-visit: 4.1.2
vfile: 5.3.7
transitivePeerDependencies:
- supports-color
- dev: false
- /react-remove-scroll-bar@2.3.4(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
- react: 18.2.0
- react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.2.0)
- tslib: 2.5.0
- dev: false
+ react: 18.3.1
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
+ tslib: 2.6.3
+ optionalDependencies:
+ '@types/react': 18.3.3
- /react-remove-scroll@2.5.5(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
- react: 18.2.0
- react-remove-scroll-bar: 2.3.4(@types/react@18.0.28)(react@18.2.0)
- react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.2.0)
- tslib: 2.5.0
- use-callback-ref: 1.3.0(@types/react@18.0.28)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.0.28)(react@18.2.0)
- dev: false
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1)
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
+ tslib: 2.6.3
+ use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1)
+ use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
- /react-style-singleton@2.2.1(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1)
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
+ tslib: 2.6.3
+ use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1)
+ use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+
+ react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
get-nonce: 1.0.1
invariant: 2.2.4
- react: 18.2.0
- tslib: 2.5.0
- dev: false
+ react: 18.3.1
+ tslib: 2.6.3
+ optionalDependencies:
+ '@types/react': 18.3.3
- /react-syntax-highlighter@15.5.0(react@18.2.0):
- resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
- peerDependencies:
- react: '>= 0.14.0'
+ react-svg@16.1.34(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@tanem/svg-injector': 10.1.68
+ '@types/prop-types': 15.7.12
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-syntax-highlighter@15.5.0(react@18.3.1):
dependencies:
- '@babel/runtime': 7.21.0
+ '@babel/runtime': 7.24.7
highlight.js: 10.7.3
lowlight: 1.20.0
prismjs: 1.29.0
- react: 18.2.0
+ react: 18.3.1
refractor: 3.6.0
- dev: true
- /react-textarea-autosize@8.4.0(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==}
- engines: {node: '>=10'}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@babel/runtime': 7.21.0
- react: 18.2.0
- use-composed-ref: 1.3.0(react@18.2.0)
- use-latest: 1.2.1(@types/react@18.0.28)(react@18.2.0)
+ '@babel/runtime': 7.24.7
+ react: 18.3.1
+ use-composed-ref: 1.3.0(react@18.3.1)
+ use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1)
transitivePeerDependencies:
- '@types/react'
- dev: false
- /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
- peerDependencies:
- react: '>=16.6.0'
- react-dom: '>=16.6.0'
+ react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.21.0
+ '@babel/runtime': 7.24.7
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.5.0):
- resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==}
- peerDependencies:
- react: '*'
- tslib: '*'
+ react-universal-interface@0.6.2(react@18.3.1)(tslib@2.6.3):
dependencies:
- react: 18.2.0
- tslib: 2.5.0
- dev: false
+ react: 18.3.1
+ tslib: 2.6.3
- /react-use@17.4.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-use@17.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@types/js-cookie': 2.2.7
'@xobotyi/scrollbar-width': 1.9.5
@@ -5028,605 +7756,458 @@ packages:
fast-deep-equal: 3.1.3
fast-shallow-equal: 1.0.0
js-cookie: 2.2.1
- nano-css: 5.3.5(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.5.0)
+ nano-css: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-universal-interface: 0.6.2(react@18.3.1)(tslib@2.6.3)
resize-observer-polyfill: 1.5.1
screenfull: 5.2.0
set-harmonic-interval: 1.0.1
throttle-debounce: 3.0.1
ts-easing: 0.2.0
- tslib: 2.5.0
- dev: false
+ tslib: 2.6.3
- /react@18.2.0:
- resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
- engines: {node: '>=0.10.0'}
+ react@18.3.1:
dependencies:
loose-envify: 1.4.0
- /read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+ read-cache@1.0.0:
dependencies:
pify: 2.3.0
- dev: true
- /readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
+ readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
- dev: true
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
- dev: true
- /refractor@3.6.0:
- resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
+ reflect.getprototypeof@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ globalthis: 1.0.4
+ which-builtin-type: 1.1.3
+
+ refractor@3.6.0:
dependencies:
hastscript: 6.0.0
parse-entities: 2.0.0
prismjs: 1.27.0
- dev: true
- /regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+ regenerator-runtime@0.14.1: {}
- /regexp.prototype.flags@1.4.3:
- resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
- engines: {node: '>= 0.4'}
+ regexp.prototype.flags@1.5.2:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- functions-have-names: 1.2.3
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ set-function-name: 2.0.2
- /regexpp@3.2.0:
- resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
- engines: {node: '>=8'}
- dev: true
+ regexpp@3.2.0: {}
- /remark-gfm@3.0.1:
- resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+ remark-gfm@3.0.1:
dependencies:
- '@types/mdast': 3.0.11
+ '@types/mdast': 3.0.15
mdast-util-gfm: 2.0.2
- micromark-extension-gfm: 2.0.1
+ micromark-extension-gfm: 2.0.3
unified: 10.1.2
transitivePeerDependencies:
- supports-color
- dev: false
- /remark-parse@10.0.1:
- resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==}
+ remark-parse@10.0.2:
dependencies:
- '@types/mdast': 3.0.11
- mdast-util-from-markdown: 1.3.0
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
unified: 10.1.2
transitivePeerDependencies:
- supports-color
- dev: false
- /remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+ remark-rehype@10.1.0:
dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
mdast-util-to-hast: 12.3.0
unified: 10.1.2
- dev: false
- /request-ip@3.3.0:
- resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==}
- dev: false
+ request-ip@3.3.0: {}
- /resize-observer-polyfill@1.5.1:
- resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
- dev: false
+ resize-observer-polyfill@1.5.1: {}
- /resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
+ resolve-from@4.0.0: {}
- /resolve@1.22.1:
- resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
- hasBin: true
+ resolve@1.22.8:
dependencies:
- is-core-module: 2.11.0
+ is-core-module: 2.14.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- /resolve@2.0.0-next.4:
- resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
- hasBin: true
+ resolve@2.0.0-next.5:
dependencies:
- is-core-module: 2.11.0
+ is-core-module: 2.14.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: true
- /reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: true
+ reusify@1.0.4: {}
- /rfdc@1.3.0:
- resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
- dev: true
+ rfdc@1.4.1: {}
- /rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- hasBin: true
+ rimraf@3.0.2:
dependencies:
glob: 7.2.3
- dev: true
- /rtl-css-js@1.16.1:
- resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==}
+ rtl-css-js@1.16.1:
dependencies:
- '@babel/runtime': 7.21.0
- dev: false
+ '@babel/runtime': 7.24.7
- /run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- dev: true
- /sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
+ sade@1.8.1:
dependencies:
mri: 1.2.0
- dev: false
- /safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: true
+ safe-array-concat@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+
+ safe-buffer@5.2.1: {}
- /safe-regex-test@1.0.0:
- resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+ safe-regex-test@1.0.3:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
+ call-bind: 1.0.7
+ es-errors: 1.3.0
is-regex: 1.1.4
- dev: true
- /safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ safer-buffer@2.1.2: {}
- /scheduler@0.23.0:
- resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ scheduler@0.23.2:
dependencies:
loose-envify: 1.4.0
- dev: false
- /screenfull@5.2.0:
- resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
- engines: {node: '>=0.10.0'}
- dev: false
+ screenfull@5.2.0: {}
- /semver@6.3.0:
- resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
- hasBin: true
- dev: true
+ semver@6.3.1: {}
- /semver@7.3.8:
- resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
- engines: {node: '>=10'}
- hasBin: true
+ semver@7.6.2: {}
+
+ seq-queue@0.0.5: {}
+
+ set-function-length@1.2.2:
dependencies:
- lru-cache: 6.0.0
- dev: true
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
- /seq-queue@0.0.5:
- resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
- dev: true
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
- /set-harmonic-interval@1.0.1:
- resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==}
- engines: {node: '>=6.9'}
- dev: false
+ set-harmonic-interval@1.0.1: {}
- /setprototypeof@1.1.1:
- resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
- dev: false
+ setprototypeof@1.1.1: {}
- /shallowequal@1.1.0:
- resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
- dev: false
+ shallowequal@1.1.0: {}
- /shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
+ shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
- dev: true
- /shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
- dev: true
+ shebang-regex@3.0.0: {}
- /side-channel@1.0.4:
- resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ side-channel@1.0.6:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- object-inspect: 1.12.3
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
- /slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: true
+ signal-exit@4.1.0: {}
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
+ slash@3.0.0: {}
- /source-map@0.5.6:
- resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==}
- engines: {node: '>=0.10.0'}
- dev: false
+ source-map-js@1.2.0: {}
- /source-map@0.5.7:
- resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
- engines: {node: '>=0.10.0'}
- dev: false
+ source-map@0.5.6: {}
- /source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
- dev: false
+ source-map@0.5.7: {}
- /sourcemap-codec@1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
- dev: false
+ source-map@0.6.1: {}
- /space-separated-tokens@1.1.5:
- resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
- dev: true
+ space-separated-tokens@1.1.5: {}
- /space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: false
+ space-separated-tokens@2.0.2: {}
- /split2@4.1.0:
- resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==}
- engines: {node: '>= 10.x'}
- dev: true
+ split2@4.2.0: {}
- /sprintf-js@1.1.2:
- resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
- dev: true
+ sprintf-js@1.1.3: {}
- /sqlstring@2.3.3:
- resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
- engines: {node: '>= 0.6'}
- dev: true
+ sqlstring@2.3.3: {}
- /stack-generator@2.0.10:
- resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
+ stack-generator@2.0.10:
dependencies:
stackframe: 1.3.4
- dev: false
- /stackframe@1.3.4:
- resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
- dev: false
+ stackframe@1.3.4: {}
- /stacktrace-gps@3.1.2:
- resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==}
+ stacktrace-gps@3.1.2:
dependencies:
source-map: 0.5.6
stackframe: 1.3.4
- dev: false
- /stacktrace-js@2.0.2:
- resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==}
+ stacktrace-js@2.0.2:
dependencies:
error-stack-parser: 2.1.4
stack-generator: 2.0.10
stacktrace-gps: 3.1.2
- dev: false
- /statuses@1.5.0:
- resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
- engines: {node: '>= 0.6'}
- dev: false
+ statuses@1.5.0: {}
+
+ stop-iteration-iterator@1.0.0:
+ dependencies:
+ internal-slot: 1.0.7
+
+ stoppable@1.1.0: {}
+
+ streamsearch@1.1.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
- /stop-iteration-iterator@1.0.0:
- resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
- engines: {node: '>= 0.4'}
+ string-width@5.1.2:
dependencies:
- internal-slot: 1.0.5
- dev: true
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
- /stoppable@1.1.0:
- resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
- engines: {node: '>=4', npm: '>=6'}
- dev: true
+ string.prototype.includes@2.0.0:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
- /string.prototype.matchall@4.0.8:
- resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
+ string.prototype.matchall@4.0.11:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- get-intrinsic: 1.2.0
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
has-symbols: 1.0.3
- internal-slot: 1.0.5
- regexp.prototype.flags: 1.4.3
- side-channel: 1.0.4
- dev: true
+ internal-slot: 1.0.7
+ regexp.prototype.flags: 1.5.2
+ set-function-name: 2.0.2
+ side-channel: 1.0.6
- /string.prototype.trim@1.2.7:
- resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
- engines: {node: '>= 0.4'}
+ string.prototype.trim@1.2.9:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
- /string.prototype.trimend@1.0.6:
- resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
+ string.prototype.trimend@1.0.8:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
- /string.prototype.trimstart@1.0.6:
- resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
+ string.prototype.trimstart@1.0.8:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
- /string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ string_decoder@1.3.0:
dependencies:
safe-buffer: 5.2.1
- dev: true
- /strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
+ strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
- dev: true
- /strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
- dev: true
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.0.1
- /strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
- dev: true
+ strip-bom@3.0.0: {}
- /stripe@12.3.0:
- resolution: {integrity: sha512-B9Q1b0gbKY/Z4fQc1Y82VpHTFLh8A67D6kdcFtgpGfTovVkI7SamE66vmVaWNHgcUjPqI8x6wVvksdRf/ucTDw==}
- engines: {node: '>=12.*'}
+ strip-json-comments@3.1.1: {}
+
+ stripe@12.18.0:
dependencies:
- '@types/node': 18.15.3
- qs: 6.11.1
- dev: false
+ '@types/node': 18.19.39
+ qs: 6.12.2
- /style-to-object@0.4.1:
- resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==}
+ style-to-object@0.4.4:
dependencies:
inline-style-parser: 0.1.1
- dev: false
- /styled-components@5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A==}
- engines: {node: '>=10'}
- peerDependencies:
- react: '>= 16.8.0'
- react-dom: '>= 16.8.0'
- react-is: '>= 16.8.0'
+ styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
dependencies:
- '@babel/helper-module-imports': 7.18.6
- '@babel/traverse': 7.21.3(supports-color@5.5.0)
- '@emotion/is-prop-valid': 1.2.0
+ '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0)
+ '@babel/traverse': 7.24.7(supports-color@5.5.0)
+ '@emotion/is-prop-valid': 1.2.2
'@emotion/stylis': 0.8.5
'@emotion/unitless': 0.7.5
- babel-plugin-styled-components: 2.0.7(styled-components@5.3.9)
+ babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0)
css-to-react-native: 3.2.0
hoist-non-react-statics: 3.3.2
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-is: 18.2.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
shallowequal: 1.1.0
supports-color: 5.5.0
- dev: false
+ transitivePeerDependencies:
+ - '@babel/core'
- /styled-jsx@5.1.1(react@18.2.0):
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
+ styled-jsx@5.1.1(@babel/core@7.24.7)(react@18.3.1):
dependencies:
client-only: 0.0.1
- react: 18.2.0
- dev: false
+ react: 18.3.1
+ optionalDependencies:
+ '@babel/core': 7.24.7
- /styled-tools@1.7.2:
- resolution: {integrity: sha512-IjLxzM20RMwAsx8M1QoRlCG/Kmq8lKzCGyospjtSXt/BTIIcvgTonaxQAsKnBrsZNwhpHzO9ADx5te0h76ILVg==}
- dev: false
+ styled-tools@1.7.2: {}
- /stylis@4.1.3:
- resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==}
- dev: false
+ stylis@4.2.0: {}
- /supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
+ stylis@4.3.2: {}
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ commander: 4.1.1
+ glob: 10.4.2
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.6
+ ts-interface-checker: 0.1.13
+
+ supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
- /supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
+ supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
- dev: true
- /supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
+ supports-preserve-symlinks-flag@1.0.0: {}
- /swr@2.1.5(react@18.2.0):
- resolution: {integrity: sha512-/OhfZMcEpuz77KavXST5q6XE9nrOBOVcBLWjMT+oAE/kQHyE3PASrevXCtQDZ8aamntOfFkbVJp7Il9tNBQWrw==}
- peerDependencies:
- react: ^16.11.0 || ^17.0.0 || ^18.0.0
+ swr@2.2.5(react@18.3.1):
dependencies:
- react: 18.2.0
- use-sync-external-store: 1.2.0(react@18.2.0)
- dev: false
+ client-only: 0.0.1
+ react: 18.3.1
+ use-sync-external-store: 1.2.2(react@18.3.1)
- /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1):
- resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==}
- engines: {node: '>=12.13.0'}
- hasBin: true
- peerDependencies:
- postcss: ^8.0.9
+ tailwind-scrollbar-hide@1.1.7: {}
+
+ tailwindcss@3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)):
dependencies:
+ '@alloc/quick-lru': 5.2.0
arg: 5.0.2
- chokidar: 3.5.3
- color-name: 1.1.4
- detective: 5.2.1
+ chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
- fast-glob: 3.2.12
+ fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
+ jiti: 1.21.6
lilconfig: 2.1.0
- micromatch: 4.0.5
+ micromatch: 4.0.7
normalize-path: 3.0.0
object-hash: 3.0.0
- picocolors: 1.0.0
- postcss: 8.4.21
- postcss-import: 14.1.0(postcss@8.4.21)
- postcss-js: 4.0.1(postcss@8.4.21)
- postcss-load-config: 3.1.4(postcss@8.4.21)(ts-node@10.9.1)
- postcss-nested: 6.0.0(postcss@8.4.21)
- postcss-selector-parser: 6.0.11
- postcss-value-parser: 4.2.0
- quick-lru: 5.1.1
- resolve: 1.22.1
+ picocolors: 1.0.1
+ postcss: 8.4.39
+ postcss-import: 15.1.0(postcss@8.4.39)
+ postcss-js: 4.0.1(postcss@8.4.39)
+ postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))
+ postcss-nested: 6.0.1(postcss@8.4.39)
+ postcss-selector-parser: 6.1.0
+ resolve: 1.22.8
+ sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
- dev: true
- /tarn@3.0.2:
- resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==}
- engines: {node: '>=8.0.0'}
- dev: true
+ tarn@3.0.2: {}
- /tedious@15.1.3:
- resolution: {integrity: sha512-166EpRm5qknwhEisjZqz/mF7k14fXKJYHRg6XiAXVovd/YkyHJ3SG4Ppy89caPaNFfRr7PVYe+s4dAvKaCMFvw==}
- engines: {node: '>=14'}
+ tedious@15.1.3:
dependencies:
'@azure/identity': 2.1.0
- '@azure/keyvault-keys': 4.7.0
- '@js-joda/core': 5.5.3
+ '@azure/keyvault-keys': 4.8.0
+ '@js-joda/core': 5.6.3
bl: 5.1.0
- es-aggregate-error: 1.0.9
+ es-aggregate-error: 1.0.13
iconv-lite: 0.6.3
js-md4: 0.3.2
jsbi: 4.3.0
native-duplexpair: 1.0.0
node-abort-controller: 3.1.1
- punycode: 2.3.0
- sprintf-js: 1.1.2
+ punycode: 2.3.1
+ sprintf-js: 1.1.3
transitivePeerDependencies:
- supports-color
- dev: true
- /text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
- dev: true
+ text-table@0.2.0: {}
- /throttle-debounce@3.0.1:
- resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==}
- engines: {node: '>=10'}
- dev: false
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
- /to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
- dev: false
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
- /to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
+ throttle-debounce@3.0.1: {}
+
+ to-fast-properties@2.0.0: {}
+
+ to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- dev: true
- /toggle-selection@1.0.6:
- resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
- dev: false
+ toggle-selection@1.0.6: {}
- /toidentifier@1.0.0:
- resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
- engines: {node: '>=0.6'}
- dev: false
+ toidentifier@1.0.0: {}
- /trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- dev: false
+ trim-lines@3.0.1: {}
- /trough@2.1.0:
- resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
- dev: false
+ trough@2.2.0: {}
- /ts-easing@0.2.0:
- resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==}
- dev: false
+ ts-easing@0.2.0: {}
- /ts-node@10.9.1(@types/node@18.15.3)(typescript@4.9.5):
- resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
- hasBin: true
- peerDependencies:
- '@swc/core': '>=1.2.50'
- '@swc/wasm': '>=1.2.50'
- '@types/node': '*'
- typescript: '>=2.7'
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- '@swc/wasm':
- optional: true
+ ts-interface-checker@0.1.13: {}
+
+ ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5):
dependencies:
'@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.9
+ '@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.3
- '@types/node': 18.15.3
- acorn: 8.8.2
- acorn-walk: 8.2.0
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 18.19.39
+ acorn: 8.12.1
+ acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
@@ -5634,506 +8215,270 @@ packages:
typescript: 4.9.5
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
- dev: true
- /tsconfig-paths@3.14.2:
- resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
+ tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
json5: 1.0.2
minimist: 1.2.8
strip-bom: 3.0.0
- dev: true
- /tslib@1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: true
+ tslib@1.14.1: {}
- /tslib@2.5.0:
- resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
+ tslib@2.6.3: {}
- /tsutils@3.21.0(typescript@4.9.5):
- resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
- engines: {node: '>= 6'}
- peerDependencies:
- typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ tsutils@3.21.0(typescript@4.9.5):
dependencies:
tslib: 1.14.1
typescript: 4.9.5
- dev: true
- /type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
+ type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
- dev: true
- /type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
- dev: true
+ type-fest@0.20.2: {}
+
+ typed-array-buffer@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-typed-array: 1.1.13
- /typed-array-length@1.0.4:
- resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+ typed-array-byte-length@1.0.1:
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.7
for-each: 0.3.3
- is-typed-array: 1.1.10
- dev: true
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
- /typescript@4.9.5:
- resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
+ typed-array-byte-offset@1.0.2:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
- /unbox-primitive@1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ typed-array-length@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ possible-typed-array-names: 1.0.0
+
+ typescript@4.9.5: {}
+
+ unbox-primitive@1.0.2:
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.7
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
- dev: true
- /unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+ undici-types@5.26.5: {}
+
+ unified@10.1.2:
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
bail: 2.0.2
extend: 3.0.2
is-buffer: 2.0.5
is-plain-obj: 4.1.0
- trough: 2.1.0
+ trough: 2.2.0
vfile: 5.3.7
- dev: false
- /unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
- dev: false
+ unist-util-generated@2.0.1: {}
- /unist-util-is@5.2.1:
- resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+ unist-util-is@5.2.1:
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@types/unist': 2.0.10
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+ unist-util-position@4.0.4:
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@types/unist': 2.0.10
- /unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+ unist-util-stringify-position@3.0.3:
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@types/unist': 2.0.10
- /unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+ unist-util-visit-parents@5.1.3:
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
unist-util-is: 5.2.1
- dev: false
- /unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+ unist-util-visit@4.1.2:
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
unist-util-is: 5.2.1
unist-util-visit-parents: 5.1.3
- dev: false
- /unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
- dev: false
+ unpipe@1.0.0: {}
- /update-browserslist-db@1.0.10(browserslist@4.21.5):
- resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
+ update-browserslist-db@1.1.0(browserslist@4.23.1):
dependencies:
- browserslist: 4.21.5
- escalade: 3.1.1
- picocolors: 1.0.0
- dev: true
+ browserslist: 4.23.1
+ escalade: 3.1.2
+ picocolors: 1.0.1
- /uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ uri-js@4.4.1:
dependencies:
- punycode: 2.3.0
- dev: true
+ punycode: 2.3.1
- /use-callback-ref@1.3.0(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
- react: 18.2.0
- tslib: 2.5.0
- dev: false
+ react: 18.3.1
+ tslib: 2.6.3
+ optionalDependencies:
+ '@types/react': 18.3.3
- /use-composed-ref@1.3.0(react@18.2.0):
- resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ use-composed-ref@1.3.0(react@18.3.1):
dependencies:
- react: 18.2.0
- dev: false
+ react: 18.3.1
- /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
- react: 18.2.0
- dev: false
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
- /use-latest@1.2.1(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
- react: 18.2.0
- use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.28)(react@18.2.0)
- dev: false
+ react: 18.3.1
+ use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
- /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.2.0):
- resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
+ use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@types/react': 18.0.28
detect-node-es: 1.1.0
- react: 18.2.0
- tslib: 2.5.0
- dev: false
+ react: 18.3.1
+ tslib: 2.6.3
+ optionalDependencies:
+ '@types/react': 18.3.3
- /use-sync-external-store@1.2.0(react@18.2.0):
- resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ use-sync-external-store@1.2.0(react@18.3.1):
dependencies:
- react: 18.2.0
- dev: false
+ react: 18.3.1
- /util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- dev: true
+ use-sync-external-store@1.2.2(react@18.3.1):
+ dependencies:
+ react: 18.3.1
- /uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
+ util-deprecate@1.0.2: {}
- /uuid@9.0.0:
- resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
- hasBin: true
- dev: false
+ uuid@8.3.2: {}
- /uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
+ uuid@9.0.1: {}
+
+ uvu@0.5.6:
dependencies:
dequal: 2.0.3
- diff: 5.1.0
+ diff: 5.2.0
kleur: 4.1.5
sade: 1.8.1
- dev: false
- /v8-compile-cache-lib@3.0.1:
- resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
- dev: true
+ v8-compile-cache-lib@3.0.1: {}
- /v8-compile-cache@2.3.0:
- resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
- dev: true
+ v8-compile-cache@2.4.0: {}
- /vfile-message@3.1.4:
- resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+ vfile-message@3.1.4:
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
unist-util-stringify-position: 3.0.3
- dev: false
- /vfile@5.3.7:
- resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+ vfile@5.3.7:
dependencies:
- '@types/unist': 2.0.6
+ '@types/unist': 2.0.10
is-buffer: 2.0.5
unist-util-stringify-position: 3.0.3
vfile-message: 3.1.4
- dev: false
- /void-elements@3.1.0:
- resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
- engines: {node: '>=0.10.0'}
- dev: false
+ void-elements@3.1.0: {}
- /which-boxed-primitive@1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ watchpack@2.4.0:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ which-boxed-primitive@1.0.2:
dependencies:
is-bigint: 1.0.4
is-boolean-object: 1.1.2
is-number-object: 1.0.7
is-string: 1.0.7
is-symbol: 1.0.4
- dev: true
- /which-collection@1.0.1:
- resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+ which-builtin-type@1.1.3:
dependencies:
- is-map: 2.0.2
- is-set: 2.0.2
- is-weakmap: 2.0.1
- is-weakset: 2.0.2
- dev: true
+ function.prototype.name: 1.1.6
+ has-tostringtag: 1.0.2
+ is-async-function: 2.0.0
+ is-date-object: 1.0.5
+ is-finalizationregistry: 1.0.2
+ is-generator-function: 1.0.10
+ is-regex: 1.1.4
+ is-weakref: 1.0.2
+ isarray: 2.0.5
+ which-boxed-primitive: 1.0.2
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
- /which-typed-array@1.1.9:
- resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
- engines: {node: '>= 0.4'}
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.3
+
+ which-typed-array@1.1.15:
dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
for-each: 0.3.3
gopd: 1.0.1
- has-tostringtag: 1.0.0
- is-typed-array: 1.1.10
- dev: true
+ has-tostringtag: 1.0.2
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
+ which@2.0.2:
dependencies:
isexe: 2.0.0
- dev: true
-
- /word-wrap@1.2.3:
- resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: true
-
- /xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
- dev: true
-
- /yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
- /yaml@1.10.2:
- resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
- engines: {node: '>= 6'}
-
- /yn@3.1.1:
- resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
- engines: {node: '>=6'}
- dev: true
-
- /zustand@4.3.6(react@18.2.0):
- resolution: {integrity: sha512-6J5zDxjxLE+yukC2XZWf/IyWVKnXT9b9HUv09VJ/bwGCpKNcaTqp7Ws28Xr8jnbvnZcdRaidztAPsXFBIqufiw==}
- engines: {node: '>=12.7.0'}
- peerDependencies:
- immer: '>=9.0'
- react: '>=16.8'
- peerDependenciesMeta:
- immer:
- optional: true
- react:
- optional: true
- dependencies:
- react: 18.2.0
- use-sync-external-store: 1.2.0(react@18.2.0)
- dev: false
- /zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: false
-
- registry.npmmirror.com/@babel/runtime@7.21.0:
- resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz}
- name: '@babel/runtime'
- version: 7.21.0
- engines: {node: '>=6.9.0'}
- dependencies:
- regenerator-runtime: registry.npmmirror.com/regenerator-runtime@0.13.11
- dev: false
+ word-wrap@1.2.5: {}
- registry.npmmirror.com/@radix-ui/number@1.0.0:
- resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/number/-/number-1.0.0.tgz}
- name: '@radix-ui/number'
- version: 1.0.0
+ wrap-ansi@7.0.0:
dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- dev: false
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
- registry.npmmirror.com/@radix-ui/primitive@1.0.0:
- resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/primitive/-/primitive-1.0.0.tgz}
- name: '@radix-ui/primitive'
- version: 1.0.0
+ wrap-ansi@8.1.0:
dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- dev: false
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
- registry.npmmirror.com/@radix-ui/react-compose-refs@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-compose-refs/1.0.0
- name: '@radix-ui/react-compose-refs'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- react: 18.2.0
- dev: false
+ wrappy@1.0.2: {}
- registry.npmmirror.com/@radix-ui/react-context@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-context/-/react-context-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-context/1.0.0
- name: '@radix-ui/react-context'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- react: 18.2.0
- dev: false
+ xtend@4.0.2: {}
- registry.npmmirror.com/@radix-ui/react-direction@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-direction/-/react-direction-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-direction/1.0.0
- name: '@radix-ui/react-direction'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- react: 18.2.0
- dev: false
+ yallist@3.1.1: {}
- registry.npmmirror.com/@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-presence/-/react-presence-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-presence/1.0.0
- name: '@radix-ui/react-presence'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- '@radix-ui/react-compose-refs': registry.npmmirror.com/@radix-ui/react-compose-refs@1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': registry.npmmirror.com/@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ yallist@4.0.0: {}
- registry.npmmirror.com/@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz}
- id: registry.npmmirror.com/@radix-ui/react-primitive/1.0.2
- name: '@radix-ui/react-primitive'
- version: 1.0.2
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- '@radix-ui/react-slot': registry.npmmirror.com/@radix-ui/react-slot@1.0.1(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
+ yaml@1.10.2: {}
- registry.npmmirror.com/@radix-ui/react-scroll-area@1.0.3(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-sBX9j8Q+0/jReNObEAveKIGXJtk3xUoSIx4cMKygGtO128QJyVDn01XNOFsyvihKDCTcu7SINzQ2jPAZEhIQtw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.3.tgz}
- id: registry.npmmirror.com/@radix-ui/react-scroll-area/1.0.3
- name: '@radix-ui/react-scroll-area'
- version: 1.0.3
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- '@radix-ui/number': registry.npmmirror.com/@radix-ui/number@1.0.0
- '@radix-ui/primitive': registry.npmmirror.com/@radix-ui/primitive@1.0.0
- '@radix-ui/react-compose-refs': registry.npmmirror.com/@radix-ui/react-compose-refs@1.0.0(react@18.2.0)
- '@radix-ui/react-context': registry.npmmirror.com/@radix-ui/react-context@1.0.0(react@18.2.0)
- '@radix-ui/react-direction': registry.npmmirror.com/@radix-ui/react-direction@1.0.0(react@18.2.0)
- '@radix-ui/react-presence': registry.npmmirror.com/@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': registry.npmmirror.com/@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': registry.npmmirror.com/@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': registry.npmmirror.com/@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
- registry.npmmirror.com/@radix-ui/react-slot@1.0.1(react@18.2.0):
- resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.0.1.tgz}
- id: registry.npmmirror.com/@radix-ui/react-slot/1.0.1
- name: '@radix-ui/react-slot'
- version: 1.0.1
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- '@radix-ui/react-compose-refs': registry.npmmirror.com/@radix-ui/react-compose-refs@1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
+ yaml@2.4.5: {}
- registry.npmmirror.com/@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-use-callback-ref/1.0.0
- name: '@radix-ui/react-use-callback-ref'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- react: 18.2.0
- dev: false
+ yn@3.1.1: {}
- registry.npmmirror.com/@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz}
- id: registry.npmmirror.com/@radix-ui/react-use-layout-effect/1.0.0
- name: '@radix-ui/react-use-layout-effect'
- version: 1.0.0
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
+ zustand@4.5.4(@types/react@18.3.3)(react@18.3.1):
dependencies:
- '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.21.0
- react: 18.2.0
- dev: false
+ use-sync-external-store: 1.2.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.3
+ react: 18.3.1
- registry.npmmirror.com/regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz}
- name: regenerator-runtime
- version: 0.13.11
- dev: false
+ zwitch@2.0.4: {}
diff --git a/prisma/migrations/20230517161946_subscription/migration.sql b/prisma/migrations/20230517161946_subscription/migration.sql
new file mode 100644
index 00000000..d269872a
--- /dev/null
+++ b/prisma/migrations/20230517161946_subscription/migration.sql
@@ -0,0 +1,38 @@
+/*
+ Warnings:
+
+ - Added the required column `plan` to the `subscription` table without a default value. This is not possible if the table is not empty.
+
+*/
+-- CreateEnum
+CREATE TYPE "SubscriptionPlan" AS ENUM ('PRO');
+
+-- AlterTable
+ALTER TABLE "subscription" ADD COLUMN "amount" INTEGER NOT NULL DEFAULT 0,
+ADD COLUMN "currency" TEXT NOT NULL DEFAULT '',
+ADD COLUMN "description" TEXT NOT NULL DEFAULT '',
+ADD COLUMN "email" TEXT NOT NULL DEFAULT '',
+ADD COLUMN "plan" "SubscriptionPlan" NOT NULL,
+ADD COLUMN "receipt" TEXT NOT NULL DEFAULT '';
+
+-- CreateTable
+CREATE TABLE "usage" (
+ "id" TEXT NOT NULL,
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "end_user" TEXT NOT NULL DEFAULT '',
+ "count" INTEGER NOT NULL DEFAULT 0,
+
+ CONSTRAINT "usage_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE INDEX "usage_created_at_idx" ON "usage"("created_at");
+
+-- CreateIndex
+CREATE INDEX "usage_end_user_idx" ON "usage"("end_user");
+
+-- CreateIndex
+CREATE INDEX "subscription_user_id_idx" ON "subscription"("user_id");
+
+-- CreateIndex
+CREATE INDEX "subscription_email_idx" ON "subscription"("email");
diff --git a/prisma/migrations/20230518165639_created_at_to_users_table/migration.sql b/prisma/migrations/20230518165639_created_at_to_users_table/migration.sql
new file mode 100644
index 00000000..1769f2e9
--- /dev/null
+++ b/prisma/migrations/20230518165639_created_at_to_users_table/migration.sql
@@ -0,0 +1,5 @@
+-- AlterTable
+ALTER TABLE "users" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
+
+-- CreateIndex
+CREATE INDEX "users_created_at_idx" ON "users"("created_at");
diff --git a/prisma/migrations/20230521103659_separate_payment_from_subscription/migration.sql b/prisma/migrations/20230521103659_separate_payment_from_subscription/migration.sql
new file mode 100644
index 00000000..963155c3
--- /dev/null
+++ b/prisma/migrations/20230521103659_separate_payment_from_subscription/migration.sql
@@ -0,0 +1,49 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `amount` on the `subscription` table. All the data in the column will be lost.
+ - You are about to drop the column `currency` on the `subscription` table. All the data in the column will be lost.
+ - You are about to drop the column `customer_id` on the `subscription` table. All the data in the column will be lost.
+ - You are about to drop the column `description` on the `subscription` table. All the data in the column will be lost.
+ - You are about to drop the column `payment_id` on the `subscription` table. All the data in the column will be lost.
+ - You are about to drop the column `receipt` on the `subscription` table. All the data in the column will be lost.
+
+*/
+-- DropIndex
+DROP INDEX "subscription_payment_id_key";
+
+-- AlterTable
+ALTER TABLE "subscription" DROP COLUMN "amount",
+DROP COLUMN "currency",
+DROP COLUMN "customer_id",
+DROP COLUMN "description",
+DROP COLUMN "payment_id",
+DROP COLUMN "receipt";
+
+-- CreateTable
+CREATE TABLE "payment" (
+ "id" TEXT NOT NULL,
+ "user_id" TEXT NOT NULL DEFAULT '',
+ "email" TEXT NOT NULL DEFAULT '',
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "payment_id" TEXT NOT NULL DEFAULT '',
+ "customer_id" TEXT NOT NULL DEFAULT '',
+ "description" TEXT NOT NULL DEFAULT '',
+ "amount" INTEGER NOT NULL DEFAULT 0,
+ "currency" TEXT NOT NULL DEFAULT '',
+ "receipt" TEXT NOT NULL DEFAULT '',
+
+ CONSTRAINT "payment_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE INDEX "payment_user_id_idx" ON "payment"("user_id");
+
+-- CreateIndex
+CREATE INDEX "payment_email_idx" ON "payment"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "payment_payment_id_key" ON "payment"("payment_id");
+
+-- AddForeignKey
+ALTER TABLE "payment" ADD CONSTRAINT "payment_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20230521112004_remove_subscription_status_add_cancel_at/migration.sql b/prisma/migrations/20230521112004_remove_subscription_status_add_cancel_at/migration.sql
new file mode 100644
index 00000000..7765269e
--- /dev/null
+++ b/prisma/migrations/20230521112004_remove_subscription_status_add_cancel_at/migration.sql
@@ -0,0 +1,12 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `status` on the `subscription` table. All the data in the column will be lost.
+
+*/
+-- AlterTable
+ALTER TABLE "subscription" DROP COLUMN "status",
+ADD COLUMN "canceled_at" TIMESTAMP(3);
+
+-- DropEnum
+DROP TYPE "SubscriptionStatus";
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 7d75fb65..a1428490 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -10,8 +10,11 @@ generator client {
}
datasource db {
- provider = "postgresql"
- url = env("DATABASE_URL")
+ provider = "postgresql"
+ // Connection pooling URL
+ url = env("DATABASE_URL")
+ // Connection pooling is not supported by Prisma migrate yet. So need to use directUrl
+ directUrl = env("DATABASE_DIRECT_URL")
}
model Chat {
@@ -43,24 +46,56 @@ model Message {
@@map("message")
}
-model Subscription {
- id String @id @default(cuid())
- user User @relation(fields: [userId], references: [id])
- userId String @default("") @map("user_id")
- createdAt DateTime @default(now()) @map("created_at")
- status SubscriptionStatus @default(ACTIVE)
- startAt DateTime @default(now()) @map("start_at")
- expireAt DateTime @default(now()) @map("expire_at")
- paymentId String @default("") @map("payment_id")
- customerId String @default("") @map("customer_id")
+model Usage {
+ id String @id @default(cuid())
+ createdAt DateTime @default(now()) @map("created_at")
+ endUser String @default("") @map("end_user")
+ count Int @default(0)
- @@unique([paymentId])
+ @@index([createdAt], map: "usage_created_at_idx")
+ @@index([endUser], map: "usage_end_user_idx")
+ @@map("usage")
+}
+
+model Subscription {
+ id String @id @default(cuid())
+ user User @relation(fields: [userId], references: [id])
+ userId String @default("") @map("user_id")
+ // Denormalize to avoid join with the user table
+ email String @default("") @map("email")
+ createdAt DateTime @default(now()) @map("created_at")
+ canceledAt DateTime? @map("canceled_at")
+ startAt DateTime @default(now()) @map("start_at")
+ expireAt DateTime @default(now()) @map("expire_at")
+ plan SubscriptionPlan
+
+ @@index([userId], map: "subscription_user_id_idx")
+ @@index([email], map: "subscription_email_idx")
@@map("subscription")
}
-enum SubscriptionStatus {
- ACTIVE
- CANCELED
+enum SubscriptionPlan {
+ PRO
+}
+
+model Payment {
+ id String @id @default(cuid())
+ user User @relation(fields: [userId], references: [id])
+ userId String @default("") @map("user_id")
+ // Denormalize to avoid join with the user table
+ email String @default("") @map("email")
+ createdAt DateTime @default(now()) @map("created_at")
+ paymentId String @default("") @map("payment_id")
+ customerId String @default("") @map("customer_id")
+ description String @default("")
+ amount Int @default(0)
+ currency String @default("")
+ receipt String @default("")
+
+ @@unique([paymentId])
+ @@index([userId], map: "payment_user_id_idx")
+ @@index([email], map: "payment_email_idx")
+ @@map("payment")
}
// NextAuth Prisma Schema Begin
@@ -106,9 +141,12 @@ model User {
sessions Session[]
subscriptions Subscription[]
+ payments Payment[]
// The stripe customer id corresponds to this user
stripeId String? @unique @map("stripe_id")
+ createdAt DateTime @default(now()) @map("created_at")
+ @@index([createdAt], map: "users_created_at_idx")
@@map("users")
}
diff --git a/process.d.ts b/process.d.ts
index 5431bdba..a97806b2 100644
--- a/process.d.ts
+++ b/process.d.ts
@@ -2,15 +2,23 @@ declare namespace NodeJS {
export interface ProcessEnv {
// Required. Node environment.
NODE_ENV: string;
+ // Optional. Set to "true" to use the database. Need to use string as env is always string.
+ // We can't prefix DATABASE_URL with NEXT_PUBLIC_ because it contains sensitive information that
+ // should not be exposed to the client.
+ NEXT_PUBLIC_USE_DATABASE: string;
+ // Required if NEXT_PUBLIC_USE_DATABASE is true. Postgres database connection string to store
+ // the data. e.g. postgresql://postgres:YOUR_PASSWORD@localhost:5432/sqlchat?schema=sqlchat
+ DATABASE_URL: string;
+ // Optional. Set to "true" to allow users to bring their own OpenAI API key.
+ NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY: string;
// Required. Do not share your OpenAI API key with anyone! It should remain a secret.
OPENAI_API_KEY: string;
+ // Optional.For users who belong to multiple organizations,
+ // you can pass a header to specify which organization is used for an API request.
+ // Usage from these API requests will count as usage for the specified organization.
+ OPENAI_ORGANIZATION: string;
// Optional. OpenAI API endpoint. Defaults to https://api.openai.com.
OPENAI_API_ENDPOINT: string;
- // Optional. Database connection string to store the data.
- DATABASE_URL: string;
- // Optional. API key to protect the backend API endpoint.
- // This needs to be exposed to the frontend and must be prefixed with NEXT_PUBLIC_.
- NEXT_PUBLIC_API_KEY: string;
// Optional. NextAuth.js URL. Defaults to the current domain.
NEXTAUTH_URL: string;
// Optional. NextAuth.js secret. Defaults to a randomly generated string.
@@ -25,14 +33,20 @@ declare namespace NodeJS {
GOOGLE_CLIENT_SECRET: string;
// Optional. NextAuth.js email server.
// This can't be tested locally. Must be deployed to the web to send mail.
+ // https://next-auth.js.org/providers/email
EMAIL_SERVER: string;
+ EMAIL_FROM: string;
// Optional. Stripe publishable key.
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: string;
// Optional. Stripe API key.
STRIPE_API_KEY: string;
// Optional. Stripe webhook secret.
STRIPE_WEBHOOK_SECRET: string;
- // Optional. Stripe annual license price id.
- STRIPE_ANNUAL_LICENSE_PRICE_ID: string;
+ // Optional. Stripe price id for Pro plan 1 month subscription.
+ NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_MONTH_SUBSCRIPTION: string;
+ // Optional. Stripe price id for Pro plan 3 month subscription.
+ NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_3_MONTH_SUBSCRIPTION: string;
+ // Optional. Stripe price id for Pro plan 1 year subscription.
+ NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_YEAR_SUBSCRIPTION: string;
}
}
diff --git a/public/db-clickhouse.png b/public/db-clickhouse.png
new file mode 100644
index 00000000..b734b8ca
Binary files /dev/null and b/public/db-clickhouse.png differ
diff --git a/public/db-hive.png b/public/db-hive.png
new file mode 100644
index 00000000..016d9549
Binary files /dev/null and b/public/db-hive.png differ
diff --git a/public/db-mysql.png b/public/db-mysql.png
new file mode 100644
index 00000000..efbfddb5
Binary files /dev/null and b/public/db-mysql.png differ
diff --git a/public/db-oceanbase.png b/public/db-oceanbase.png
new file mode 100644
index 00000000..be49a766
Binary files /dev/null and b/public/db-oceanbase.png differ
diff --git a/public/db-oracle.png b/public/db-oracle.png
new file mode 100644
index 00000000..2ba5fd05
Binary files /dev/null and b/public/db-oracle.png differ
diff --git a/public/db-postgres.png b/public/db-postgres.png
new file mode 100644
index 00000000..60dc7d30
Binary files /dev/null and b/public/db-postgres.png differ
diff --git a/public/db-snowflake.png b/public/db-snowflake.png
new file mode 100644
index 00000000..ea2828f5
Binary files /dev/null and b/public/db-snowflake.png differ
diff --git a/public/db-sqlserver.png b/public/db-sqlserver.png
new file mode 100644
index 00000000..44370119
Binary files /dev/null and b/public/db-sqlserver.png differ
diff --git a/public/db-tidb.png b/public/db-tidb.png
new file mode 100644
index 00000000..c85eff59
Binary files /dev/null and b/public/db-tidb.png differ
diff --git a/public/error-exceed-openai-quota.webp b/public/error-exceed-openai-quota.webp
new file mode 100644
index 00000000..0cae08ab
Binary files /dev/null and b/public/error-exceed-openai-quota.webp differ
diff --git a/public/error-network.webp b/public/error-network.webp
new file mode 100644
index 00000000..9c35ffd9
Binary files /dev/null and b/public/error-network.webp differ
diff --git a/public/privacy.md b/public/privacy.md
new file mode 100644
index 00000000..6b7ed966
--- /dev/null
+++ b/public/privacy.md
@@ -0,0 +1,46 @@
+# SQL Chat Privacy Policy
+
+*Last Updated: May 21, 2023*
+
+We respect your privacy and are committed to protecting your personal information. This Privacy Policy explains how we collect, use, and disclose your personal information when you use our application that calls LLM provider's API.
+
+## Collection of Application Data
+
+* All database connection configs are stored locally in your browser. You can also visit settings to clear the data.
+* We send the database schema to the LLM provider. No table data will be sent there.
+* We collect the conversation message to improve the product.
+
+## Collection of Personal Information
+
+We may collect certain personal information from you when you use our application, such as your name and email address. We collect this information in order to communicate with you about our services and to provide you with technical support.
+
+## Use of Personal Information
+
+We may use your personal information to:
+
+* Communicate with you about our services
+* Provide you with technical support
+* Improve our application and services
+* Comply with legal obligations
+
+## Disclosure of Personal Information
+
+We do not sell, trade, or otherwise transfer your personal information to third parties. However, we may disclose your personal information in the following circumstances:
+
+* To our service providers who assist us in providing our services to you
+* To comply with legal obligations or to protect our rights or the rights of others
+
+## Security of Personal Information
+
+We take reasonable measures to protect your personal information from unauthorized access, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is completely secure, and we cannot guarantee absolute security.
+
+
+## Changes to this Privacy Policy
+
+We may update this Privacy Policy from time to time by posting a new versionon our website. We encourage you to review this Privacy Policy periodically for any changes. Your continued use of our application and services after any modifications to this Privacy Policy will constitute your acceptance of such modifications.
+
+For more information about our privacy and data protection practices, including how to exercise your privacy rights, please visit the [Bytebase Privacy Policy](https://bytebase.com/privacy).
+
+## Contact Us
+
+Please contact us at support@bytebase.com if you have questions about this Privacy Policy.
\ No newline at end of file
diff --git a/public/screenshot1.webp b/public/screenshot1.webp
index 0cdf41e8..95354cee 100644
Binary files a/public/screenshot1.webp and b/public/screenshot1.webp differ
diff --git a/public/screenshot2.webp b/public/screenshot2.webp
index 2b4b6df4..9f3ddadb 100644
Binary files a/public/screenshot2.webp and b/public/screenshot2.webp differ
diff --git a/public/screenshot3.webp b/public/screenshot3.webp
new file mode 100644
index 00000000..f26098a5
Binary files /dev/null and b/public/screenshot3.webp differ
diff --git a/public/terms.md b/public/terms.md
new file mode 100644
index 00000000..39c93836
--- /dev/null
+++ b/public/terms.md
@@ -0,0 +1,12 @@
+# Terms of Service
+
+*Last Updated: May 21, 2023*
+
+## Refund Policy
+
+All fees and charges are earned upon receipt by us and are nonrefundable.
+
+
+## Contact Us
+
+Please contact us at support@bytebase.com if you have questions about this Terms of Service.
\ No newline at end of file
diff --git a/src/components/AccountView.tsx b/src/components/AccountView.tsx
index 51f7b6e9..e65946e4 100644
--- a/src/components/AccountView.tsx
+++ b/src/components/AccountView.tsx
@@ -1,10 +1,14 @@
import { signIn, useSession } from "next-auth/react";
import Link from "next/link";
import { useTranslation } from "react-i18next";
+import PaymentHistoryTable from "./PaymentHistoryTable";
+import { getDateString } from "@/utils";
const AccountView = () => {
const { t } = useTranslation();
- const { data: session, status } = useSession();
+ const { data: session } = useSession();
+
+ const expired = session?.user?.subscription?.expireAt && session?.user?.subscription?.expireAt < Date.now();
return (
<>
@@ -17,21 +21,54 @@ const AccountView = () => {
)}
{session?.user && (
-
- {session.user.image && (
-
- )}
-
{session.user.email ?? session.user.name}
-
- {t("common.sign-out")}
-
+
+
+
+ {session.user.image && (
+
+ )}
+
{session.user.email ?? session.user.name}
+
+ {t("common.sign-out")}
+
+
+
+ {!!expired && (
+
+ {t("setting.plan.expired")}
+
+ )}
+
+ {t(`setting.plan.${session.user.subscription.plan.toLowerCase()}`)}
+
+
+ {t("setting.plan.n-question-per-month", {
+ count: session.user.subscription.quota,
+ })}
+
+ {session.user.subscription.plan === "PRO" && (
+
+ {getDateString(session.user.subscription.startAt)}
+ {` - `}
+ {getDateString(session.user.subscription.expireAt)}
+
+ )}
+
+
+
)}
>
diff --git a/src/components/ClearConversationButton.tsx b/src/components/ClearConversationButton.tsx
index af047f74..8f941e01 100644
--- a/src/components/ClearConversationButton.tsx
+++ b/src/components/ClearConversationButton.tsx
@@ -7,10 +7,7 @@ const ClearConversationButton = () => {
const conversationStore = useConversationStore();
const messageStore = useMessageStore();
const [showConfirmModal, setShowConfirmModal] = useState(false);
- const messageList = messageStore.messageList.filter(
- (message) =>
- message.conversationId === conversationStore.currentConversationId
- );
+ const messageList = messageStore.messageList.filter((message) => message.conversationId === conversationStore.currentConversationId);
return (
<>
@@ -22,11 +19,7 @@ const ClearConversationButton = () => {
- {showConfirmModal && (
-
setShowConfirmModal(false)}
- />
- )}
+ {showConfirmModal && setShowConfirmModal(false)} />}
>
);
};
diff --git a/src/components/ClearConversationConfirmModal.tsx b/src/components/ClearConversationConfirmModal.tsx
index 57a913b7..d7be4836 100644
--- a/src/components/ClearConversationConfirmModal.tsx
+++ b/src/components/ClearConversationConfirmModal.tsx
@@ -13,9 +13,7 @@ const ClearConversationConfirmModal = (props: Props) => {
const messageStore = useMessageStore();
const handleClearMessages = () => {
- messageStore.clearMessage(
- (item) => item.conversationId !== conversationStore.currentConversationId
- );
+ messageStore.clearMessage((item) => item.conversationId !== conversationStore.currentConversationId);
close();
};
@@ -23,9 +21,7 @@ const ClearConversationConfirmModal = (props: Props) => {
-
- Are you sure to clear the messages in current conversation?
-
+
Are you sure to clear the messages in current conversation?
diff --git a/src/components/ClearDataButton.tsx b/src/components/ClearDataButton.tsx
index 524e395b..34bd56a8 100644
--- a/src/components/ClearDataButton.tsx
+++ b/src/components/ClearDataButton.tsx
@@ -4,23 +4,15 @@ import ClearDataConfirmModal from "./ClearDataConfirmModal";
const ClearDataButton = () => {
const { t } = useTranslation();
- const [showClearDataConfirmModal, setShowClearDataConfirmModal] =
- useState(false);
+ const [showClearDataConfirmModal, setShowClearDataConfirmModal] = useState(false);
return (
<>
- setShowClearDataConfirmModal(true)}
- >
+ setShowClearDataConfirmModal(true)}>
{t("common.clear")}
- {showClearDataConfirmModal && (
- setShowClearDataConfirmModal(false)}
- />
- )}
+ {showClearDataConfirmModal && setShowClearDataConfirmModal(false)} />}
>
);
};
diff --git a/src/components/ClearDataConfirmModal.tsx b/src/components/ClearDataConfirmModal.tsx
index dad5a0e9..cebe873a 100644
--- a/src/components/ClearDataConfirmModal.tsx
+++ b/src/components/ClearDataConfirmModal.tsx
@@ -23,10 +23,7 @@ const ClearDataConfirmModal = (props: Props) => {
-
- SQL Chat saves all your data in your local browser. Are you sure to
- clear all of them?
-
+
SQL Chat saves all your data in your local browser. Are you sure to clear all of them?
diff --git a/src/components/CodeBlock.tsx b/src/components/CodeBlock.tsx
index 077e0804..c74c3a7c 100644
--- a/src/components/CodeBlock.tsx
+++ b/src/components/CodeBlock.tsx
@@ -6,14 +6,17 @@ import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism";
import { useConnectionStore, useQueryStore } from "@/store";
import Icon from "./Icon";
import Tooltip from "./kit/Tooltip";
+import { Id } from "@/types";
interface Props {
language: string;
value: string;
+ messageId: Id;
+ wrapLongLines?: boolean;
}
export const CodeBlock = (props: Props) => {
- const { language, value } = props;
+ const { language, value, messageId, wrapLongLines } = props;
const { t } = useTranslation();
const connectionStore = useConnectionStore();
const queryStore = useQueryStore();
@@ -21,10 +24,7 @@ export const CodeBlock = (props: Props) => {
// Only show execute button in the following situations:
// * SQL code;
// * Connection setup;
- const showExecuteButton =
- currentConnectionCtx?.connection &&
- currentConnectionCtx?.database &&
- language.toUpperCase() === "SQL";
+ const showExecuteButton = currentConnectionCtx?.connection && currentConnectionCtx?.database && language.toUpperCase() === "SQL";
const copyToClipboard = () => {
copy(value);
@@ -40,6 +40,7 @@ export const CodeBlock = (props: Props) => {
queryStore.setContext({
connection: currentConnectionCtx.connection,
database: currentConnectionCtx.database,
+ messageId: messageId,
statement: value,
});
queryStore.toggleDrawer(true);
@@ -48,7 +49,7 @@ export const CodeBlock = (props: Props) => {
return (
-
{language}
+
{language}
{
{showExecuteButton && (
-
-
-
-
-
+
+ {t("common.run-sql")}
+
)}
diff --git a/src/components/ConnectionSidebar.tsx b/src/components/ConnectionSidebar.tsx
index 61bf1f4b..301d8a88 100644
--- a/src/components/ConnectionSidebar.tsx
+++ b/src/components/ConnectionSidebar.tsx
@@ -1,37 +1,42 @@
import { Drawer } from "@mui/material";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
-import {
- useConnectionStore,
- useConversationStore,
- useLayoutStore,
- ResponsiveWidth,
-} from "@/store";
-import { Table } from "@/types";
+import { useConnectionStore, useConversationStore, useLayoutStore, ResponsiveWidth, useSettingStore } from "@/store";
+import { Engine, Table, Schema } from "@/types";
import useLoading from "@/hooks/useLoading";
import Select from "./kit/Select";
import Icon from "./Icon";
import DarkModeSwitch from "./DarkModeSwitch";
-import ConversationList from "./Sidebar/ConversationList";
import ConnectionList from "./Sidebar/ConnectionList";
-import QuotaWidget from "./QuotaWidget";
-import { HasFeature } from "../utils";
+import QuotaView from "./QuotaView";
+import { countTextTokens, getModel, hasFeature } from "../utils";
+import SettingAvatarIcon from "./SettingAvatarIcon";
+import Checkbox from "./kit/Checkbox";
+import { head } from "lodash-es";
interface State {}
const ConnectionSidebar = () => {
const { t } = useTranslation();
+ const settingStore = useSettingStore();
const layoutStore = useLayoutStore();
const connectionStore = useConnectionStore();
const conversationStore = useConversationStore();
- const [isRequestingDatabase, setIsRequestingDatabase] =
- useState(false);
+ const [isRequestingDatabase, setIsRequestingDatabase] = useState(false);
const currentConnectionCtx = connectionStore.currentConnectionCtx;
- const databaseList = connectionStore.databaseList.filter(
- (database) => database.connectionId === currentConnectionCtx?.connection.id
- );
+ const databaseList = connectionStore.databaseList.filter((database) => database.connectionId === currentConnectionCtx?.connection.id);
const [tableList, updateTableList] = useState([]);
+ const [schemaList, updateSchemaList] = useState([]);
+ const selectedTableNameList: string[] =
+ conversationStore.getConversationById(conversationStore.currentConversationId)?.selectedTableNameList || [];
+ const selectedSchemaName: string =
+ conversationStore.getConversationById(conversationStore.currentConversationId)?.selectedSchemaName || "";
const tableSchemaLoadingState = useLoading();
+ const currentConversation = conversationStore.getConversationById(conversationStore.currentConversationId);
+ const maxToken = getModel(settingStore.setting.openAIApiConfig?.model || "").max_token;
+ const [totalToken, setTotalToken] = useState(0);
+ const hasSchemaProperty: boolean =
+ currentConnectionCtx?.connection.engineType === Engine.PostgreSQL || currentConnectionCtx?.connection.engineType === Engine.MSSQL;
useEffect(() => {
const handleWindowResize = () => {
@@ -52,58 +57,102 @@ const ConnectionSidebar = () => {
};
}, []);
+ useEffect(() => {
+ // update total token
+ const totalToken = selectedTableNameList.reduce((totalToken, tableName) => {
+ const table = tableList.find((table) => table.name === tableName);
+ // because old cache didn't have token, So the value may is undefined.
+ return totalToken + (table?.token || countTextTokens(table?.structure || ""));
+ }, 0);
+ setTotalToken(totalToken);
+ }, [selectedTableNameList, tableList]);
+
useEffect(() => {
if (currentConnectionCtx?.connection) {
setIsRequestingDatabase(true);
- connectionStore
- .getOrFetchDatabaseList(currentConnectionCtx.connection)
- .finally(() => {
- setIsRequestingDatabase(false);
- const database = databaseList.find(
- (database) =>
- database.name ===
- useConnectionStore.getState().currentConnectionCtx?.database?.name
- );
- if (database) {
- tableSchemaLoadingState.setLoading();
- connectionStore.getOrFetchDatabaseSchema(database).then(() => {
- tableSchemaLoadingState.setFinish();
- });
- }
- });
+ connectionStore.getOrFetchDatabaseList(currentConnectionCtx.connection).finally(() => {
+ setIsRequestingDatabase(false);
+ const database = databaseList.find(
+ (database) => database.name === useConnectionStore.getState().currentConnectionCtx?.database?.name
+ );
+ if (database) {
+ tableSchemaLoadingState.setLoading();
+ connectionStore.getOrFetchDatabaseSchema(database).then(() => {
+ tableSchemaLoadingState.setFinish();
+ });
+ }
+ });
} else {
setIsRequestingDatabase(false);
}
}, [currentConnectionCtx?.connection]);
useEffect(() => {
- const tableList =
+ const schemaList =
connectionStore.databaseList.find(
(database) =>
- database.connectionId === currentConnectionCtx?.connection.id &&
- database.name === currentConnectionCtx?.database?.name
- )?.tableList || [];
-
- updateTableList([
- {
- name: "",
- structure: "",
- } as Table,
- ...tableList,
- ]);
- }, [connectionStore, currentConnectionCtx]);
+ database.connectionId === currentConnectionCtx?.connection.id && database.name === currentConnectionCtx?.database?.name
+ )?.schemaList || [];
+
+ updateSchemaList(schemaList);
+ // need to create a conversation. otherwise updateSelectedSchemaName will failed.
+ createConversation();
+ }, [connectionStore, hasSchemaProperty, currentConnectionCtx]);
+
+ useEffect(() => {
+ const tableList = schemaList.find((schema) => schema.name === selectedSchemaName)?.tables || [];
+ updateTableList(tableList);
+
+ // By default, select as many tables up to the maximum token.
+ const defaultCheckedTableList = [];
+ if (selectedTableNameList.length === 0) {
+ let tokenCount = 0;
+ for (const table of tableList) {
+ tokenCount += countTextTokens(table?.structure || "");
+ if (tokenCount > maxToken) {
+ break;
+ }
+ defaultCheckedTableList.push(table.name);
+ }
+ conversationStore.updateSelectedTablesNameList(defaultCheckedTableList);
+ }
+ }, [selectedSchemaName, schemaList]);
+
+ useEffect(() => {
+ if (hasSchemaProperty && selectedSchemaName === "" && schemaList.length > 0) {
+ conversationStore.updateSelectedSchemaName(head(schemaList)?.name || "");
+ }
+ }, [schemaList, currentConversation]);
+
+ const syncDatabaseList = async () => {
+ if (!currentConnectionCtx?.connection) {
+ return;
+ }
+
+ const prevDatabase = currentConnectionCtx.database;
+ const databaseList = await connectionStore.getOrFetchDatabaseList(currentConnectionCtx.connection, true);
+
+ // Retain the existing database if it exists in the new database list.
+ const database = databaseList.find((database) => database.name === prevDatabase?.name);
+ connectionStore.setCurrentConnectionCtx({
+ connection: currentConnectionCtx.connection,
+ database: database ? database : head(databaseList),
+ });
+ if (database) {
+ tableSchemaLoadingState.setLoading();
+ connectionStore.getOrFetchDatabaseSchema(database).then(() => {
+ tableSchemaLoadingState.setFinish();
+ });
+ }
+ };
const handleDatabaseNameSelect = async (databaseName: string) => {
if (!currentConnectionCtx?.connection) {
return;
}
- const databaseList = await connectionStore.getOrFetchDatabaseList(
- currentConnectionCtx.connection
- );
- const database = databaseList.find(
- (database) => database.name === databaseName
- );
+ const databaseList = await connectionStore.getOrFetchDatabaseList(currentConnectionCtx.connection);
+ const database = databaseList.find((database) => database.name === databaseName);
connectionStore.setCurrentConnectionCtx({
connection: currentConnectionCtx.connection,
database: database,
@@ -116,9 +165,33 @@ const ConnectionSidebar = () => {
}
};
- const handleTableNameSelect = async (tableName: string) => {
- conversationStore.updateTableName(tableName);
+ // only create conversation when currentConversation is null.
+ // Note: This function is used to solve issue #95
+ // https://github.com/sqlchat/sqlchat/issues/95
+ const createConversation = () => {
+ if (!currentConversation) {
+ if (!currentConnectionCtx) {
+ conversationStore.createConversation();
+ } else {
+ conversationStore.createConversation(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name);
+ }
+ }
+ };
+
+ const handleTableCheckboxChange = async (tableName: string, value: boolean) => {
+ if (value) {
+ conversationStore.updateSelectedTablesNameList([...selectedTableNameList, tableName]);
+ } else {
+ conversationStore.updateSelectedTablesNameList(selectedTableNameList.filter((name) => name !== tableName));
+ }
+ };
+
+ const handleSchemaNameSelect = async (schemaName: string) => {
+ // need to empty selectedTableNameList when schemaName changed. because selectedTableNameList may not exist in new schema.
+ conversationStore.updateSelectedTablesNameList([]);
+ conversationStore.updateSelectedSchemaName(schemaName);
};
+
return (
<>
{
-
- {isRequestingDatabase && (
-
-
{" "}
- {t("common.loading")}
+ {isRequestingDatabase ? (
+
+ {t("common.loading")}
+ ) : (
+ currentConnectionCtx && (
+
syncDatabaseList()}
+ className="flex space-x-1 items-center justify-center mb-4 mt-4 w-full px-2 py-1 border rounded-lg dark:text-gray-300 bg-white dark:bg-zinc-700 hover:bg-gray-100 dark:hover:bg-zinc-800"
+ >
+
+ {t("connection.refresh-schema")}
+
+ )
)}
{databaseList.length > 0 && (
-
+
{
value: database.name,
};
})}
- onValueChange={(databaseName) =>
- handleDatabaseNameSelect(databaseName)
- }
+ onValueChange={(databaseName) => handleDatabaseNameSelect(databaseName)}
placeholder={t("connection.select-database") || ""}
/>
)}
- {tableSchemaLoadingState.isLoading ? (
-
- {" "}
- {t("common.loading")}
-
- ) : (
- tableList.length > 0 && (
-
-
{
- return {
- label:
- table.name === ""
- ? t("connection.all-tables")
- : table.name,
- value: table.name,
- };
- })}
- onValueChange={(tableName) =>
- handleTableNameSelect(tableName)
- }
- placeholder={t("connection.select-table") || ""}
- />
+ {hasSchemaProperty && schemaList.length > 0 && (
+ {
+ return {
+ label: schema.name,
+ value: schema.name,
+ };
+ })}
+ onValueChange={(schema) => handleSchemaNameSelect(schema)}
+ placeholder={t("connection.select-schema") || ""}
+ />
+ )}
+
+ {currentConnectionCtx && !tableSchemaLoadingState.isLoading && (
+
+
{t("connection.total-token")}
+
+ {totalToken}/{maxToken}
- )
+
)}
-
+
+ {currentConnectionCtx &&
+ (tableSchemaLoadingState.isLoading ? (
+
+ {t("common.loading")}
+
+ ) : (
+ tableList.length > 0 &&
+ tableList.map((table) => {
+ return (
+
+
+ {table.token || countTextTokens(table.structure)}
+
+
+ );
+ })
+ ))}
-
- {HasFeature("quota") && (
+
+
+ {!settingStore.setting.openAIApiConfig?.key && hasFeature("quota") && (
-
+
)}
-
-
- {t("social.join-discord-channel")}
-
void;
+ onEdit: (conversation: Conversation) => void;
+ onDelete: (conversation: Conversation) => void;
+}
+
+const ConversationTab = (props: ConversationTabProps) => {
+ const { conversation, selected, onClick, onEdit, onDelete } = props;
+ const { t } = useTranslation();
+
+ return (
+ onClick(conversation)}
+ >
+
{conversation.title}
+
+
+
+ }
+ >
+
+ onEdit(conversation)}
+ >
+
+ {t("common.edit")}
+
+ onDelete(conversation)}
+ >
+
+ {t("common.delete")}
+
+
+
+
+ );
+};
+
+const ConversationTabsView = () => {
+ const { t } = useTranslation();
+ const layoutStore = useLayoutStore();
+ const connectionStore = useConnectionStore();
+ const conversationStore = useConversationStore();
+ const [updateConversationModalContext, setUpdateConversationModalContext] = useState(undefined);
+ const currentConnectionCtx = connectionStore.currentConnectionCtx;
+ const conversationList = conversationStore.conversationList.filter(
+ (conversation) =>
+ conversation.connectionId === currentConnectionCtx?.connection.id &&
+ conversation.databaseName === currentConnectionCtx?.database?.name
+ );
+
+ const handleCreateConversation = () => {
+ if (!currentConnectionCtx) {
+ conversationStore.createConversation();
+ } else {
+ conversationStore.createConversation(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name);
+ }
+ };
+
+ const handleConversationClick = (conversation: Conversation) => {
+ conversationStore.setCurrentConversationId(conversation.id);
+ if (layoutStore.isMobileView) {
+ layoutStore.toggleSidebar(false);
+ }
+ };
+
+ const handleEditConversation = (conversation: Conversation) => {
+ setUpdateConversationModalContext(conversation);
+ };
+
+ const handleDeleteConversation = (conversation: Conversation) => {
+ conversationStore.clearConversation((item) => item.id !== conversation.id);
+ if (conversationStore.currentConversationId === conversation.id) {
+ conversationStore.setCurrentConversationId(undefined);
+ }
+ };
+
+ return (
+ <>
+
+
+ {conversationList.map((conversation) => {
+ return (
+
+ );
+ })}
+
+
0 && "ml-2"}`}>
+
+
+ {conversationList.length === 0 && t("conversation.new-chat")}
+
+
+
+
+ {updateConversationModalContext && (
+ setUpdateConversationModalContext(undefined)} conversation={updateConversationModalContext} />
+ )}
+ >
+ );
+};
+
+export default ConversationTabsView;
diff --git a/src/components/ConversationView/Header.tsx b/src/components/ConversationView/Header.tsx
index 6fa696f0..264d8109 100644
--- a/src/components/ConversationView/Header.tsx
+++ b/src/components/ConversationView/Header.tsx
@@ -1,11 +1,11 @@
-import { useEffect } from "react";
-
+import { useEffect, useState } from "react";
import { useConversationStore, useLayoutStore } from "@/store";
import useDarkMode from "@/hooks/useDarkmode";
-
+import { hasFeature } from "@/utils";
import Icon from "../Icon";
import GitHubStarBadge from "../GitHubStarBadge";
-import SettingAvatarIcon from "../SettingAvatarIcon";
+import SchemaDrawer from "../SchemaDrawer";
+import ConversationTabsView from "../ConversationTabsView";
interface Props {
className?: string;
@@ -16,53 +16,45 @@ const Header = (props: Props) => {
const layoutStore = useLayoutStore();
const conversationStore = useConversationStore();
const isDarkMode = useDarkMode();
+ const [showSchemaDrawer, setShowSchemaDrawer] = useState(false);
const currentConversationId = conversationStore.currentConversationId;
- const title =
- conversationStore.getConversationById(currentConversationId)?.title ||
- "SQL Chat";
+ const title = conversationStore.getConversationById(currentConversationId)?.title || "SQL Chat";
useEffect(() => {
document.title = `${title}`;
}, [title]);
return (
-
-
- layoutStore.toggleSidebar()}
- >
-
-
- {title}
-
-
-
- {title}
-
-
-
-
-
-
+ <>
+
+
+
+ layoutStore.toggleSidebar()}
+ >
+
+
+ {title}
+
+
+
+
+
+
+
+
+
-
+ >
);
};
diff --git a/src/components/ConversationView/MessageTextarea.tsx b/src/components/ConversationView/MessageTextarea.tsx
index d72032ad..2f703e75 100644
--- a/src/components/ConversationView/MessageTextarea.tsx
+++ b/src/components/ConversationView/MessageTextarea.tsx
@@ -2,13 +2,7 @@ import { useEffect, useRef, useState } from "react";
import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next";
import TextareaAutosize from "react-textarea-autosize";
-import {
- useConversationStore,
- useConnectionStore,
- useMessageStore,
-} from "@/store";
-import { CreatorRole } from "@/types";
-import { generateUUID } from "@/utils";
+import { useConversationStore, useConnectionStore } from "@/store";
import Icon from "../Icon";
interface Props {
@@ -21,7 +15,6 @@ const MessageTextarea = (props: Props) => {
const { t } = useTranslation();
const connectionStore = useConnectionStore();
const conversationStore = useConversationStore();
- const messageStore = useMessageStore();
const [value, setValue] = useState
("");
const [isInIME, setIsInIME] = useState(false);
const textareaRef = useRef(null);
@@ -37,18 +30,13 @@ const MessageTextarea = (props: Props) => {
};
const handleSend = async () => {
- let conversation = conversationStore.getConversationById(
- conversationStore.currentConversationId
- );
+ let conversation = conversationStore.getConversationById(conversationStore.currentConversationId);
if (!conversation) {
const currentConnectionCtx = connectionStore.currentConnectionCtx;
if (!currentConnectionCtx) {
conversation = conversationStore.createConversation();
} else {
- conversation = conversationStore.createConversation(
- currentConnectionCtx.connection.id,
- currentConnectionCtx.database?.name
- );
+ conversation = conversationStore.createConversation(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name);
}
}
if (!value) {
diff --git a/src/components/ConversationView/MessageView.tsx b/src/components/ConversationView/MessageView.tsx
index c97067b4..dfb353c7 100644
--- a/src/components/ConversationView/MessageView.tsx
+++ b/src/components/ConversationView/MessageView.tsx
@@ -1,16 +1,11 @@
import dayjs from "dayjs";
-import { ReactElement } from "react";
+import { useSession } from "next-auth/react";
+import { ReactElement, useState } from "react";
import { useTranslation } from "react-i18next";
import { toast } from "react-hot-toast";
import ReactMarkdown from "react-markdown";
import remarkGfm from "remark-gfm";
-import {
- useConversationStore,
- useConnectionStore,
- useMessageStore,
- useUserStore,
- useSettingStore,
-} from "@/store";
+import { useConversationStore, useConnectionStore, useMessageStore, useUserStore, useSettingStore } from "@/store";
import { Message } from "@/types";
import Dropdown, { DropdownItem } from "../kit/Dropdown";
import Icon from "../Icon";
@@ -24,6 +19,7 @@ interface Props {
const MessageView = (props: Props) => {
const message = props.message;
+ const { data: session } = useSession();
const { t } = useTranslation();
const settingStore = useSettingStore();
const userStore = useUserStore();
@@ -31,10 +27,7 @@ const MessageView = (props: Props) => {
const connectionStore = useConnectionStore();
const messageStore = useMessageStore();
const isCurrentUser = message.creatorId === userStore.currentUser.id;
- const connection = connectionStore.getConnectionById(
- conversationStore.getConversationById(message.conversationId)
- ?.connectionId || ""
- );
+ const connection = connectionStore.getConnectionById(conversationStore.getConversationById(message.conversationId)?.connectionId || "");
const copyMessage = () => {
navigator.clipboard.writeText(message.content);
@@ -84,24 +77,31 @@ const MessageView = (props: Props) => {
{message.content}
-
-
+
+ {session?.user ? (
+ session.user.image ? (
+
+ ) : (
+
+ {session.user.name ? session.user.name.charAt(0) : session.user.email?.charAt(0)}
+
+ )
+ ) : (
+
+ )}
>
) : (
<>
{connection ? (
-
+
) : (
-
+
)}
{message.status === "LOADING" && message.content === "" ? (
@@ -113,29 +113,21 @@ const MessageView = (props: Props) => {
+
@@ -148,10 +140,8 @@ const MessageView = (props: Props) => {
>
{message.content}
-
- {dayjs(message.createdAt)
- .locale(settingStore.setting.locale)
- .format("lll")}
+
+ {dayjs(message.createdAt).locale(settingStore.setting.locale).format("lll")}
diff --git a/src/components/ConversationView/ThreeDotsLoader.tsx b/src/components/ConversationView/ThreeDotsLoader.tsx
index 2f4fb236..a87980cd 100644
--- a/src/components/ConversationView/ThreeDotsLoader.tsx
+++ b/src/components/ConversationView/ThreeDotsLoader.tsx
@@ -1,6 +1,6 @@
-import { useSettingStore } from "@/store";
import { useEffect, useState } from "react";
import { ThreeDots } from "react-loader-spinner";
+import { useSettingStore } from "@/store";
const ThreeDotsLoader = () => {
const settingStore = useSettingStore();
@@ -10,10 +10,7 @@ const ThreeDotsLoader = () => {
const theme = settingStore.setting.theme;
let appearance = theme;
if (theme === "system") {
- if (
- window.matchMedia &&
- window.matchMedia("(prefers-color-scheme: dark)").matches
- ) {
+ if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) {
appearance = "dark";
} else {
appearance = "light";
@@ -27,14 +24,7 @@ const ThreeDotsLoader = () => {
}
}, [settingStore.setting.theme]);
- return (
-
- );
+ return
;
};
export default ThreeDotsLoader;
diff --git a/src/components/ConversationView/index.tsx b/src/components/ConversationView/index.tsx
index af6502ec..585fbb6b 100644
--- a/src/components/ConversationView/index.tsx
+++ b/src/components/ConversationView/index.tsx
@@ -1,8 +1,8 @@
import axios from "axios";
-import { first, head, last } from "lodash-es";
+import { head, last } from "lodash-es";
+import { useSession } from "next-auth/react";
import { useEffect, useRef, useState } from "react";
import { toast } from "react-hot-toast";
-import { API_KEY } from "@/env";
import {
getAssistantById,
getPromptGeneratorOfAssistant,
@@ -14,20 +14,22 @@ import {
useUserStore,
} from "@/store";
import { Conversation, CreatorRole, Message } from "@/types";
-import { countTextTokens, generateUUID } from "@/utils";
+import { countTextTokens, generateUUID, getModel, hasFeature, generateDbPromptFromContext } from "@/utils";
+import getEventEmitter from "@/utils/event-emitter";
import Header from "./Header";
import EmptyView from "../EmptyView";
import MessageView from "./MessageView";
import ClearConversationButton from "../ClearConversationButton";
import MessageTextarea from "./MessageTextarea";
import DataStorageBanner from "../DataStorageBanner";
-import QuotaOverflowBanner from "../QuotaOverflowBanner";
-
-// The maximum number of tokens that can be sent to the OpenAI API.
-// reference: https://platform.openai.com/docs/api-reference/completions/create#completions/create-max_tokens
-const MAX_TOKENS = 4000;
+import DBHubBanner from "../DBHubBanner";
+import SchemaDrawer from "../SchemaDrawer";
+import Icon from "../Icon";
+import { useTranslation } from "react-i18next";
const ConversationView = () => {
+ const { data: session } = useSession();
+ const { t } = useTranslation();
const settingStore = useSettingStore();
const layoutStore = useLayoutStore();
const connectionStore = useConnectionStore();
@@ -37,15 +39,12 @@ const ConversationView = () => {
const [isStickyAtBottom, setIsStickyAtBottom] = useState
(true);
const [showHeaderShadow, setShowHeaderShadow] = useState(false);
const conversationViewRef = useRef(null);
- const currentConversation = conversationStore.getConversationById(
- conversationStore.currentConversationId
- );
+ const currentConversation = conversationStore.getConversationById(conversationStore.currentConversationId);
const messageList = currentConversation
- ? messageStore.messageList.filter(
- (message: Message) => message.conversationId === currentConversation.id
- )
+ ? messageStore.messageList.filter((message: Message) => message.conversationId === currentConversation.id)
: [];
const lastMessage = last(messageList);
+ const [showSchemaDrawer, setShowSchemaDrawer] = useState(false);
useEffect(() => {
messageStore.messageList.map((message: Message) => {
@@ -69,21 +68,13 @@ const ConversationView = () => {
}
setShowHeaderShadow((conversationViewRef.current?.scrollTop || 0) > 0);
setIsStickyAtBottom(
- conversationViewRef.current.scrollTop +
- conversationViewRef.current.clientHeight >=
- conversationViewRef.current.scrollHeight
+ conversationViewRef.current.scrollTop + conversationViewRef.current.clientHeight >= conversationViewRef.current.scrollHeight
);
};
- conversationViewRef.current?.addEventListener(
- "scroll",
- handleConversationViewScroll
- );
+ conversationViewRef.current?.addEventListener("scroll", handleConversationViewScroll);
return () => {
- conversationViewRef.current?.removeEventListener(
- "scroll",
- handleConversationViewScroll
- );
+ conversationViewRef.current?.removeEventListener("scroll", handleConversationViewScroll);
};
}, []);
@@ -91,8 +82,7 @@ const ConversationView = () => {
if (!conversationViewRef.current) {
return;
}
- conversationViewRef.current.scrollTop =
- conversationViewRef.current.scrollHeight;
+ conversationViewRef.current.scrollTop = conversationViewRef.current.scrollHeight;
}, [currentConversation, lastMessage?.id]);
useEffect(() => {
@@ -101,17 +91,14 @@ const ConversationView = () => {
}
if (lastMessage?.status === "LOADING" && isStickyAtBottom) {
- conversationViewRef.current.scrollTop =
- conversationViewRef.current.scrollHeight;
+ conversationViewRef.current.scrollTop = conversationViewRef.current.scrollHeight;
}
}, [lastMessage?.status, lastMessage?.content, isStickyAtBottom]);
useEffect(() => {
if (
- currentConversation?.connectionId ===
- connectionStore.currentConnectionCtx?.connection.id &&
- currentConversation?.databaseName ===
- connectionStore.currentConnectionCtx?.database?.name
+ currentConversation?.connectionId === connectionStore.currentConnectionCtx?.connection.id &&
+ currentConversation?.databaseName === connectionStore.currentConnectionCtx?.database?.name
) {
return;
}
@@ -119,18 +106,14 @@ const ConversationView = () => {
// Auto select the first conversation when the current connection changes.
const conversationList = conversationStore.conversationList.filter(
(conversation: Conversation) =>
- conversation.connectionId ===
- connectionStore.currentConnectionCtx?.connection.id &&
- conversation.databaseName ===
- connectionStore.currentConnectionCtx?.database?.name
+ conversation.connectionId === connectionStore.currentConnectionCtx?.connection.id &&
+ conversation.databaseName === connectionStore.currentConnectionCtx?.database?.name
);
conversationStore.setCurrentConversationId(head(conversationList)?.id);
}, [currentConversation, connectionStore.currentConnectionCtx]);
const sendMessageToCurrentConversation = async (userPrompt: string) => {
- const currentConversation = conversationStore.getConversationById(
- conversationStore.getState().currentConversationId
- );
+ const currentConversation = conversationStore.getConversationById(conversationStore.getState().currentConversationId);
if (!currentConversation) {
return;
}
@@ -150,28 +133,11 @@ const ConversationView = () => {
};
messageStore.addMessage(userMessage);
- // Add PENDING assistant message to the store.
- const assistantMessage: Message = {
- id: generateUUID(),
- conversationId: currentConversation.id,
- creatorId: currentConversation.assistantId,
- creatorRole: CreatorRole.Assistant,
- createdAt: Date.now(),
- content: "",
- status: "LOADING",
- };
- messageStore.addMessage(assistantMessage);
-
// Construct the system prompt
- const messageList = messageStore
- .getState()
- .messageList.filter(
- (message: Message) => message.conversationId === currentConversation.id
- );
- const promptGenerator = getPromptGeneratorOfAssistant(
- getAssistantById(currentConversation.assistantId)!
- );
+ const messageList = messageStore.getState().messageList.filter((message: Message) => message.conversationId === currentConversation.id);
+ const promptGenerator = getPromptGeneratorOfAssistant(getAssistantById(currentConversation.assistantId)!);
let dbPrompt = promptGenerator();
+ const maxToken = getModel(settingStore.setting.openAIApiConfig?.model || "").max_token;
// Squeeze as much prompt as possible under the token limit, the prompt is in the order of:
// 1. Assistant specific prompt with database schema if applicable.
// 2. A list of previous exchanges.
@@ -185,32 +151,20 @@ const ConversationView = () => {
// Augument with database schema if available
if (connectionStore.currentConnectionCtx?.database) {
- let schema = "";
+ const schemaList = await connectionStore.getOrFetchDatabaseSchema(connectionStore.currentConnectionCtx?.database);
try {
- const tables = await connectionStore.getOrFetchDatabaseSchema(
- connectionStore.currentConnectionCtx?.database
+ dbPrompt = generateDbPromptFromContext(
+ promptGenerator,
+ connectionStore.currentConnectionCtx.connection.engineType,
+ schemaList,
+ currentConversation.selectedSchemaName || "",
+ currentConversation.selectedTableNameList || [],
+ maxToken,
+ userPrompt
);
- // Empty table name(such as "") denote all table. "" and `undefined` both are false in `if`
- if (currentConversation.tableName) {
- const table = tables.find((table) => {
- return table.name === currentConversation.tableName;
- });
- if (table) {
- tokens += countTextTokens(schema + table.structure);
- schema += table.structure;
- }
- } else {
- for (const table of tables) {
- if (tokens < MAX_TOKENS / 2) {
- tokens += countTextTokens(schema + table.structure);
- schema += table.structure;
- }
- }
- }
} catch (error: any) {
toast.error(error.message);
}
- dbPrompt = promptGenerator(schema);
}
// Sliding window to add messages with DONE status all the way back up until we reach the token
@@ -220,7 +174,7 @@ const ConversationView = () => {
for (let i = messageList.length - 1; i >= 0; i--) {
const message = messageList[i];
if (message.status === "DONE") {
- if (tokens < MAX_TOKENS) {
+ if (tokens < maxToken) {
tokens += countTextTokens(message.content);
formatedMessageList.unshift({
role: message.creatorRole,
@@ -243,34 +197,59 @@ const ConversationView = () => {
});
const requestHeaders: any = {};
- if (API_KEY) {
- requestHeaders["Authorization"] = `Bearer ${API_KEY}`;
+ if (session?.user.id) {
+ requestHeaders["Authorization"] = `Bearer ${session?.user.id}`;
+ }
+ if (settingStore.setting.openAIApiConfig?.key) {
+ requestHeaders["x-openai-key"] = settingStore.setting.openAIApiConfig?.key;
+ }
+ if (settingStore.setting.openAIApiConfig?.endpoint) {
+ requestHeaders["x-openai-endpoint"] = settingStore.setting.openAIApiConfig?.endpoint;
+ }
+ if (settingStore.setting.openAIApiConfig?.model) {
+ requestHeaders["x-openai-model"] = settingStore.setting.openAIApiConfig?.model;
}
const rawRes = await fetch("/api/chat", {
method: "POST",
body: JSON.stringify({
messages: formatedMessageList,
- openAIApiConfig: settingStore.setting.openAIApiConfig,
}),
headers: requestHeaders,
});
if (!rawRes.ok) {
console.error(rawRes);
- let errorMessage =
- "Failed to request message, please check your network.";
+ let errorMessage = "Failed to request message, please check your network.";
try {
- errorMessage = await rawRes.statusText;
+ const res = await rawRes.json();
+ errorMessage = res.error.message;
} catch (error) {
// do nth
}
- messageStore.updateMessage(assistantMessage.id, {
+ messageStore.addMessage({
+ id: generateUUID(),
+ conversationId: currentConversation.id,
+ creatorId: currentConversation.assistantId,
+ creatorRole: CreatorRole.Assistant,
+ createdAt: Date.now(),
content: errorMessage,
status: "FAILED",
});
return;
}
+ // Add PENDING assistant message to the store.
+ const assistantMessage: Message = {
+ id: generateUUID(),
+ conversationId: currentConversation.id,
+ creatorId: currentConversation.assistantId,
+ creatorRole: CreatorRole.Assistant,
+ createdAt: Date.now(),
+ content: "",
+ status: "LOADING",
+ };
+ messageStore.addMessage(assistantMessage);
+
const data = rawRes.body;
if (!data) {
toast.error("No data return");
@@ -297,30 +276,41 @@ const ConversationView = () => {
status: "DONE",
});
- // Collect system prompt
- // We only collect the db prompt for the system prompt. We do not collect the intermediate
- // exchange to save space since those can be derived from the previous record.
- usageMessageList.push({
- id: generateUUID(),
- createdAt: Date.now(),
- creatorRole: CreatorRole.System,
- content: dbPrompt,
- } as Message);
+ // Emit usage update event so quota widget can update.
+ getEventEmitter().emit("usage.update");
- // Collect user message
- usageMessageList.push(userMessage);
+ if (hasFeature("collect")) {
+ // Collect system prompt
+ // We only collect the db prompt for the system prompt. We do not collect the intermediate
+ // exchange to save space since those can be derived from the previous record.
+ usageMessageList.push({
+ id: generateUUID(),
+ createdAt: Date.now(),
+ creatorRole: CreatorRole.System,
+ content: dbPrompt,
+ } as Message);
- // Collect assistant response
- usageMessageList.push(assistantMessage);
+ // Collect user message
+ usageMessageList.push(userMessage);
- axios
- .post("/api/usage", {
- conversation: currentConversation,
- messages: usageMessageList,
- })
- .catch(() => {
- // do nth
- });
+ // Collect assistant response
+ usageMessageList.push(assistantMessage);
+
+ axios
+ .post(
+ "/api/collect",
+ {
+ conversation: currentConversation,
+ messages: usageMessageList,
+ },
+ {
+ headers: requestHeaders,
+ }
+ )
+ .catch(() => {
+ // do nth
+ });
+ }
};
return (
@@ -331,28 +321,29 @@ const ConversationView = () => {
} relative w-full h-full max-h-full flex flex-col justify-start items-start overflow-y-auto bg-white dark:bg-zinc-800`}
>
-
+
{messageList.length === 0 ? (
-
+
) : (
- messageList.map((message: Message) => (
-
- ))
+ messageList.map((message: Message) => )
)}
-
+
+
setShowSchemaDrawer(true)}>
+ {
+
+
+ {t("prompt.self")}
+
+ }
+
+ {showSchemaDrawer &&
setShowSchemaDrawer(false)} />}
);
diff --git a/src/components/CreateConnectionModal.tsx b/src/components/CreateConnectionModal.tsx
index 03608d66..e0844ab2 100644
--- a/src/components/CreateConnectionModal.tsx
+++ b/src/components/CreateConnectionModal.tsx
@@ -1,30 +1,32 @@
import { cloneDeep, head } from "lodash-es";
import { ChangeEvent, useEffect, useState } from "react";
import { toast } from "react-hot-toast";
+import { useTranslation } from "react-i18next";
import TextareaAutosize from "react-textarea-autosize";
import { useConnectionStore } from "@/store";
import { Connection, Engine, ResponseObject, SSLOptions } from "@/types";
-import Select from "./kit/Select";
+import Radio from "./kit/Radio";
import TextField from "./kit/TextField";
import Modal from "./kit/Modal";
import Icon from "./Icon";
+import EngineIcon from "./EngineIcon";
import DataStorageBanner from "./DataStorageBanner";
import ActionConfirmModal from "./ActionConfirmModal";
-import { useTranslation } from "react-i18next";
+import RequiredStar from "./RequiredStar";
interface Props {
connection?: Connection;
close: () => void;
}
-type SSLType = "none" | "ca-only" | "full";
+type SSLType = "preferred" | "ca-only" | "full";
type SSLFieldType = "ca" | "cert" | "key";
const SSLTypeOptions = [
{
- label: "None",
- value: "none",
+ label: "Preferred",
+ value: "preferred",
},
{
label: "CA Only",
@@ -36,12 +38,50 @@ const SSLTypeOptions = [
},
];
+const engines = [
+ {
+ type: Engine.MySQL,
+ name: "MySQL",
+ defaultPort: "3306",
+ },
+ {
+ type: Engine.PostgreSQL,
+ name: "PostgreSQL",
+ defaultPort: "5432",
+ },
+ {
+ type: Engine.MSSQL,
+ name: "SQL Server",
+ defaultPort: "1433",
+ },
+ {
+ type: Engine.TiDB,
+ name: "TiDB Serverless",
+ defaultPort: "4000",
+ },
+ {
+ type: Engine.OceanBase,
+ name: "OceanBase",
+ defaultPort: "2881",
+ },
+ // {
+ // type: Engine.Snowflake,
+ // name: "Snowflake",
+ // defaultPort: "443",
+ // },
+ // {
+ // type: Engine.Hive,
+ // name: "Hive",
+ // defaultPort: "4000",
+ // },
+];
+
const defaultConnection: Connection = {
id: "",
title: "",
engineType: Engine.MySQL,
host: "",
- port: "",
+ port: "3306",
username: "",
password: "",
};
@@ -51,14 +91,13 @@ const CreateConnectionModal = (props: Props) => {
const { t } = useTranslation();
const connectionStore = useConnectionStore();
const [connection, setConnection] = useState
(defaultConnection);
- const [showDeleteConnectionModal, setShowDeleteConnectionModal] =
- useState(false);
- const [sslType, setSSLType] = useState("none");
+ const [showDeleteConnectionModal, setShowDeleteConnectionModal] = useState(false);
+ const [sslType, setSSLType] = useState("preferred");
const [selectedSSLField, setSelectedSSLField] = useState("ca");
const [isRequesting, setIsRequesting] = useState(false);
const showDatabaseField = connection.engineType === Engine.PostgreSQL;
const isEditing = editConnection !== undefined;
- const allowSave = connection.host !== "" && connection.username !== "";
+ const allowSave = connection.title !== "" && connection.host !== "" && connection.username !== "";
useEffect(() => {
const connection = isEditing ? editConnection : defaultConnection;
@@ -106,11 +145,7 @@ const CreateConnectionModal = (props: Props) => {
}
const file = files[0];
- if (
- file.type.startsWith("audio/") ||
- file.type.startsWith("video/") ||
- file.type.startsWith("image/")
- ) {
+ if (file.type.startsWith("audio/") || file.type.startsWith("video/") || file.type.startsWith("image/")) {
toast.error(`Invalid file type:${file.type}`);
return;
}
@@ -139,7 +174,7 @@ const CreateConnectionModal = (props: Props) => {
});
};
- const handleCreateConnection = async () => {
+ const handleUpsertConnection = async () => {
if (isRequesting) {
return;
}
@@ -182,10 +217,7 @@ const CreateConnectionModal = (props: Props) => {
}
// Set the created connection as the current connection.
- const databaseList = await connectionStore.getOrFetchDatabaseList(
- connection,
- true
- );
+ const databaseList = await connectionStore.getOrFetchDatabaseList(connection, true);
connectionStore.setCurrentConnectionCtx({
connection: connection,
database: head(databaseList),
@@ -211,67 +243,51 @@ const CreateConnectionModal = (props: Props) => {
return (
<>
-
+
-
+
{t("connection.database-type")}
+
-
- setPartialConnection({ engineType: value as Engine })
- }
- />
+
+ {engines.map((engine) => (
+
setPartialConnection({ engineType: engine.type, port: engine.defaultPort })}
+ >
+
+
+
+ {engine.name}
+
+
+ ))}
+
{t("connection.title")}
+
- setPartialConnection({ title: value })}
- />
+ setPartialConnection({ title: value })} />
{t("connection.host")}
+
- setPartialConnection({ host: value })}
- />
+ setPartialConnection({ host: value })} />
-
- {t("connection.port")}
-
- setPartialConnection({ port: value })}
- />
+ {t("connection.port")}
+ setPartialConnection({ port: value })} />
{showDatabaseField && (
-
- {t("connection.database-name")}
-
+
{t("connection.database-name")}
{
{t("connection.username")}
+
{
/>
-
- {t("connection.password")}
-
+ {t("connection.password")}
{
onChange={(value) => setPartialConnection({ password: value })}
/>
-
-
- SSL
-
-
- {SSLTypeOptions.map((option) => (
-
- setSSLType(e.target.value as SSLType)}
- />
- {option.label}
-
- ))}
+ {connection.engineType === Engine.TiDB ? (
+
+ {t("connection.tidb-serverless-ssl-hint")}
- {sslType !== "none" && (
- <>
-
- setSelectedSSLField("ca")}
- >
- CA Certificate
-
- {sslType === "full" && (
- <>
- setSelectedSSLField("key")}
- >
- Client Key
-
- setSelectedSSLField("cert")}
- >
- Client Certificate
-
- >
- )}
-
-
-
-
-
Input or
-
- upload file
+ ) : (
+
+
SSL
+
+ {SSLTypeOptions.map((option) => (
+
+ setSSLType(value as SSLType)}
+ />
+ {option.label}
+
+ ))}
+
+ {sslType !== "preferred" && (
+ <>
+
+ setSelectedSSLField("ca")}
+ >
+ CA Certificate
+
+ {sslType === "full" && (
+ <>
+ setSelectedSSLField("key")}
+ >
+ Client Key
+
+ setSelectedSSLField("cert")}
+ >
+ Client Certificate
+
+ >
+ )}
+
+
+
+
+ Input or
+
+ upload file
+
+
+
+
+ >
+ )}
+ {connection.engineType === Engine.MSSQL && (
+
+
Encrypt
+
+
setPartialConnection({ encrypt: e.target.checked })}
/>
+ Encrypt connection
- >
- )}
- {connection.engineType === Engine.MSSQL && (
-
-
- Encrypt
-
-
-
-
- setPartialConnection({ encrypt: e.target.checked })
- }
- />
- Encrypt connection
-
-
-
- )}
-
+ )}
+
+ )}
+
{isEditing && (
- setShowDeleteConnectionModal(true)}
- >
- Delete
+ setShowDeleteConnectionModal(true)}>
+ {t("common.delete")}
)}
@@ -423,14 +421,8 @@ const CreateConnectionModal = (props: Props) => {
{t("common.close")}
-
- {isRequesting && (
-
- )}
+
+ {isRequesting && }
{t("common.save")}
diff --git a/src/components/DBHubBanner.tsx b/src/components/DBHubBanner.tsx
new file mode 100644
index 00000000..209e9816
--- /dev/null
+++ b/src/components/DBHubBanner.tsx
@@ -0,0 +1,41 @@
+import { useTranslation } from "react-i18next";
+import { useLocalStorage } from "react-use";
+import Icon from "./Icon";
+
+interface Props {
+ className?: string;
+ alwaysShow?: boolean;
+}
+
+const DBHubBanner = (props: Props) => {
+ const { className, alwaysShow } = props;
+ const { t } = useTranslation();
+ const [hideBanner, setHideBanner] = useLocalStorage("hide-github-banner", false);
+ const show = alwaysShow || !hideBanner;
+
+ return (
+
+ );
+};
+
+export default DBHubBanner;
diff --git a/src/components/DataStorageBanner.tsx b/src/components/DataStorageBanner.tsx
index af8e3775..16288310 100644
--- a/src/components/DataStorageBanner.tsx
+++ b/src/components/DataStorageBanner.tsx
@@ -10,10 +10,7 @@ interface Props {
const DataStorageBanner = (props: Props) => {
const { className, alwaysShow } = props;
const { t } = useTranslation();
- const [hideBanner, setHideBanner] = useLocalStorage(
- "hide-local-storage-banner",
- false
- );
+ const [hideBanner, setHideBanner] = useLocalStorage("hide-local-storage-banner", false);
const show = alwaysShow || !hideBanner;
return (
@@ -27,10 +24,7 @@ const DataStorageBanner = (props: Props) => {
{t("banner.data-storage")}
{!alwaysShow && (
-
setHideBanner(true)}
- >
+ setHideBanner(true)}>
)}
diff --git a/src/components/DebugView.tsx b/src/components/DebugView.tsx
new file mode 100644
index 00000000..7af93c2d
--- /dev/null
+++ b/src/components/DebugView.tsx
@@ -0,0 +1,17 @@
+import { useSession } from "next-auth/react";
+
+const PricingView = () => {
+ const { data: session } = useSession();
+
+ return (
+
+
Debug View
+
Session Info
+
+ {JSON.stringify(session, null, "\t")}
+
+
+ );
+};
+
+export default PricingView;
diff --git a/src/components/EmptyView.tsx b/src/components/EmptyView.tsx
index e6ec95f4..7a50154a 100644
--- a/src/components/EmptyView.tsx
+++ b/src/components/EmptyView.tsx
@@ -1,18 +1,9 @@
-import {
- useConversationStore,
- useConnectionStore,
- useMessageStore,
-} from "@/store";
-import { CreatorRole } from "@/types";
-import { generateUUID } from "@/utils";
+import { useConversationStore, useConnectionStore, useMessageStore } from "@/store";
import useDarkMode from "@/hooks/useDarkmode";
import Icon from "./Icon";
// examples are used to show some examples to the user.
-const examples = [
- "Give me an example schema about employee",
- "How to create a view in MySQL?",
-];
+const examples = ["Give me an example schema about employee", "How to create a view in MySQL?"];
interface Props {
className?: string;
@@ -27,38 +18,22 @@ const EmptyView = (props: Props) => {
const isDarkMode = useDarkMode();
const handleExampleClick = async (content: string) => {
- let conversation = conversationStore.getConversationById(
- conversationStore.currentConversationId
- );
+ let conversation = conversationStore.getConversationById(conversationStore.currentConversationId);
if (!conversation) {
const currentConnectionCtx = connectionStore.currentConnectionCtx;
if (!currentConnectionCtx) {
conversation = conversationStore.createConversation();
} else {
- conversation = conversationStore.createConversation(
- currentConnectionCtx.connection.id,
- currentConnectionCtx.database?.name
- );
+ conversation = conversationStore.createConversation(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name);
}
}
await sendMessage(content);
};
return (
-
+
-
+
diff --git a/src/components/EngineIcon.tsx b/src/components/EngineIcon.tsx
index 5c031d31..e1587f42 100644
--- a/src/components/EngineIcon.tsx
+++ b/src/components/EngineIcon.tsx
@@ -10,11 +10,15 @@ const EngineIcon = (props: Props) => {
const { className, engine } = props;
if (engine === Engine.MySQL) {
- return
;
+ return
;
} else if (engine === Engine.PostgreSQL) {
- return
;
+ return
;
} else if (engine === Engine.MSSQL) {
- return
;
+ return
;
+ } else if (engine === Engine.TiDB) {
+ return
;
+ } else if (engine === Engine.OceanBase) {
+ return
;
} else {
return
;
}
diff --git a/src/components/ExecutionView/DataTableView.tsx b/src/components/ExecutionView/DataTableView.tsx
index 754cd653..4e5f6c14 100644
--- a/src/components/ExecutionView/DataTableView.tsx
+++ b/src/components/ExecutionView/DataTableView.tsx
@@ -22,9 +22,7 @@ const DataTableView = (props: Props) => {
return rawResults.length === 0 ? (
-
- {t("execution.message.no-data")}
-
+ {t("execution.message.no-data")}
) : (
{
const { t } = useTranslation();
return (
-
+
{t("banner.non-select-sql-warning")}
diff --git a/src/components/ExecutionView/NotificationView.tsx b/src/components/ExecutionView/NotificationView.tsx
index c2e58dbd..b1c28539 100644
--- a/src/components/ExecutionView/NotificationView.tsx
+++ b/src/components/ExecutionView/NotificationView.tsx
@@ -6,13 +6,7 @@ interface Props {
const NotificationView = (props: Props) => {
const { message, style } = props;
const additionalStyle = style === "error" ? "text-red-500" : "text-gray-500";
- return (
-
- {message}
-
- );
+ return {message}
;
};
export default NotificationView;
diff --git a/src/components/GitHubStarBadge.tsx b/src/components/GitHubStarBadge.tsx
index 11f57d4c..f641938b 100644
--- a/src/components/GitHubStarBadge.tsx
+++ b/src/components/GitHubStarBadge.tsx
@@ -15,15 +15,12 @@ const GitHubStarBadge = (props: Props) => {
const getRepoStarCount = async () => {
let starCount = 0;
try {
- const { data } = await axios.get(
- `https://api.github.com/repos/sqlchat/sqlchat`,
- {
- headers: {
- Accept: "application/vnd.github.v3.star+json",
- Authorization: "",
- },
- }
- );
+ const { data } = await axios.get(`https://api.github.com/repos/sqlchat/sqlchat`, {
+ headers: {
+ Accept: "application/vnd.github.v3.star+json",
+ Authorization: "",
+ },
+ });
starCount = data.stargazers_count as number;
} catch (error) {
// do nth
@@ -50,11 +47,7 @@ const GitHubStarBadge = (props: Props) => {
Star
- {isRequesting ? (
-
- ) : (
- stars
- )}
+ {isRequesting ? : stars}
);
diff --git a/src/components/LocaleSelector.tsx b/src/components/LocaleSelector.tsx
index 1441ced5..05c627d5 100644
--- a/src/components/LocaleSelector.tsx
+++ b/src/components/LocaleSelector.tsx
@@ -16,26 +16,10 @@ const localeItemList: LocaleItem[] = [
value: "zh",
label: "简体中文",
},
- {
- value: "zhHant",
- label: "繁體中文",
- },
{
value: "es",
label: "Español",
},
- {
- value: "jp",
- label: "日本語",
- },
- {
- value: "de",
- label: "Deutsch",
- },
- {
- value: "th",
- label: "ยาสุฟุมิ",
- },
];
const LocaleSelector = () => {
@@ -46,14 +30,7 @@ const LocaleSelector = () => {
settingStore.setLocale(locale);
};
- return (
-
- );
+ return
;
};
export default LocaleSelector;
diff --git a/src/components/MarkdownRenderer.tsx b/src/components/MarkdownRenderer.tsx
new file mode 100644
index 00000000..7e2445d3
--- /dev/null
+++ b/src/components/MarkdownRenderer.tsx
@@ -0,0 +1,33 @@
+import React, { useState, useEffect } from "react";
+import ReactMarkdown from "react-markdown";
+
+interface MarkdownRendererProps {
+ url: string;
+}
+
+function MarkdownRenderer(props: MarkdownRendererProps) {
+ const [markdown, setMarkdown] = useState
("");
+
+ useEffect(() => {
+ const fetchData = async () => {
+ const response = await fetch(props.url);
+ const data = await response.text();
+ setMarkdown(data);
+ };
+ fetchData();
+ }, [props.url]);
+
+ return (
+ {children}
,
+ li: ({ children }) => {children} ,
+ }}
+ >
+ {markdown}
+
+ );
+}
+
+export default MarkdownRenderer;
diff --git a/src/components/OpenAIApiConfigView.tsx b/src/components/OpenAIApiConfigView.tsx
index c01c46ae..c86e56dc 100644
--- a/src/components/OpenAIApiConfigView.tsx
+++ b/src/components/OpenAIApiConfigView.tsx
@@ -3,14 +3,64 @@ import { useTranslation } from "react-i18next";
import { useDebounce } from "react-use";
import { useSettingStore } from "@/store";
import { OpenAIApiConfig } from "@/types";
+import { allowSelfOpenAIKey, hasFeature } from "@/utils";
+import Radio from "./kit/Radio";
import TextField from "./kit/TextField";
+import Tooltip from "./kit/Tooltip";
const OpenAIApiConfigView = () => {
const { t } = useTranslation();
const settingStore = useSettingStore();
- const [openAIApiConfig, setOpenAIApiConfig] = useState(
- settingStore.setting.openAIApiConfig
- );
+ const [openAIApiConfig, setOpenAIApiConfig] = useState(settingStore.setting.openAIApiConfig);
+ const [maskKey, setMaskKey] = useState(true);
+
+ const models = [
+ {
+ id: "gpt-3.5-turbo",
+ title: `GPT-3.5 Turbo`,
+ cost: 1,
+ disabled: false,
+ tooltip: "",
+ },
+ {
+ id: "gpt-4-turbo",
+ title: `GPT-4 Turbo`,
+ cost: 20,
+ disabled: false,
+ tooltip: "",
+ },
+ {
+ id: "gpt-4",
+ title: `GPT-4`,
+ cost: 60,
+ disabled: false,
+ tooltip: "",
+ },
+ {
+ id: "gpt-4o",
+ title: `GPT-4o`,
+ cost: 10,
+ disabled: false,
+ tooltip: "",
+ },
+ {
+ id: "deepseek-chat",
+ title: `Deepseek Chat`,
+ cost: 1,
+ disabled: false,
+ tooltip: "",
+ },
+ ];
+
+ const maskedKey = (str: string) => {
+ if (str.length < 7) {
+ return str;
+ }
+ const firstThree = str.slice(0, 3);
+ const lastFour = str.slice(-4);
+ const middle = ".".repeat(str.length - 7);
+ return `${firstThree}${middle}${lastFour}`;
+ };
useDebounce(
() => {
@@ -25,27 +75,78 @@ const OpenAIApiConfigView = () => {
...openAIApiConfig,
...config,
});
+ setMaskKey(false);
+ };
+
+ const modelRadio = (model: any) => {
+ return (
+
+ handleSetOpenAIApiConfig({ model: value })}
+ />
+
+ {model.title} {hasFeature("quota") ? `(${t("setting.openai-api-configuration.quota-per-ask", { count: model.cost })})` : ""}
+
+
+ );
};
return (
<>
-
- OpenAI API Key
- handleSetOpenAIApiConfig({ key: value })}
- />
-
-
-
API Endpoint
-
handleSetOpenAIApiConfig({ endpoint: value })}
- />
+
+
{t("setting.openai-api-configuration.model")}
+ {allowSelfOpenAIKey() &&
{t("setting.openai-api-configuration.model-description")}
}
+
+
+ {models.map((model) =>
+ model.disabled ? (
+
+ {modelRadio(model)}
+
+ ) : (
+ modelRadio(model)
+ )
+ )}
+
+
+ {allowSelfOpenAIKey() && (
+ <>
+
+
OpenAI API Key
+
{t("setting.openai-api-configuration.key-description")}
+
handleSetOpenAIApiConfig({ key: value })}
+ />
+
+
+
OpenAI API Endpoint
+
+
handleSetOpenAIApiConfig({ endpoint: value })}
+ />
+
+ >
+ )}
>
);
diff --git a/src/components/PaymentHistoryTable.tsx b/src/components/PaymentHistoryTable.tsx
new file mode 100644
index 00000000..59dd1e61
--- /dev/null
+++ b/src/components/PaymentHistoryTable.tsx
@@ -0,0 +1,82 @@
+import axios from "axios";
+import { t } from "i18next";
+import { useSession } from "next-auth/react";
+import { useEffect, useState } from "react";
+import { Payment } from "@/types";
+import { getCurrencySymbol, getDateString } from "@/utils";
+
+const PaymentHistoryTable = () => {
+ const [list, setList] = useState
([]);
+ const { data: session } = useSession();
+
+ useEffect(() => {
+ const refreshPaymentList = async (userId: string) => {
+ let list: Payment[] = [];
+ try {
+ const { data } = await axios.get("/api/payment", {
+ headers: { Authorization: `Bearer ${userId}` },
+ });
+ list = data;
+ } catch (error) {
+ // do nth
+ }
+ setList(list);
+ };
+
+ if (session?.user.id) {
+ refreshPaymentList(session.user.id);
+ }
+ }, [session]);
+
+ if (list.length === 0) {
+ return <>>;
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ {t("common.date")}
+
+
+ {t("common.description")}
+
+
+ {t("common.amount")}
+
+
+
+
+
+ {list.map((payment) => (
+
+
+ {getDateString(payment.createdAt)}
+
+ {payment.description}
+
+ {getCurrencySymbol(payment.currency.toLocaleUpperCase())}
+ {payment.amount / 100}
+
+
+
+ {t("setting.subscription.view-receipt")}
+
+
+
+ ))}
+
+
+
+
+
+
+ );
+};
+
+export default PaymentHistoryTable;
diff --git a/src/components/PricingView.tsx b/src/components/PricingView.tsx
index 2e5f41b7..a983b97d 100644
--- a/src/components/PricingView.tsx
+++ b/src/components/PricingView.tsx
@@ -4,16 +4,11 @@ import { useTranslation } from "react-i18next";
import getStripe from "../utils/get-stripejs";
import { fetchPostJSON } from "../utils/api-helpers";
-const includedFeatures = [
- "Private forum access",
- "Member resources",
- "Entry to annual conference",
- "Official member t-shirt",
-];
-
-const checkout = async () => {
+const checkout = async (priceId: string) => {
// Create a Checkout Session.
- const response = await fetchPostJSON("/api/checkout_sessions", {});
+ const response = await fetchPostJSON("/api/checkout_sessions", {
+ price: priceId,
+ });
if (response.statusCode === 500) {
console.error(response.message);
@@ -38,21 +33,59 @@ const PricingView = () => {
const { t } = useTranslation();
const { data: session, status } = useSession();
+ const tiers = [
+ {
+ name: t("setting.plan.1-month"),
+ priceId: process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_MONTH_SUBSCRIPTION,
+ priceMonthly: "$10",
+ buyButton: t("setting.plan.purhcase-1-month"),
+ },
+ {
+ name: t("setting.plan.n-months", {
+ count: 3,
+ }),
+ priceId: process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_3_MONTH_SUBSCRIPTION,
+ priceMonthly: "$15",
+ buyButton: t("setting.plan.purhcase-n-months", {
+ count: 3,
+ }),
+ },
+ {
+ name: t("setting.plan.n-months", {
+ count: 12,
+ }),
+ priceId: process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_YEAR_SUBSCRIPTION,
+ priceMonthly: "$30",
+ buyButton: t("setting.plan.purhcase-n-months", {
+ count: 12,
+ }),
+ },
+ ];
+
return (
-
-
-
- {t("setting.plan.pro-question-per-month")}
-
-
-
(session?.user?.email ? checkout() : signIn())}
- >
- {session?.user?.email
- ? t("setting.plan.early-bird-checkout")
- : t("payment.login-to-buy")}
-
+
+
+
+ {t("setting.plan.n-question-per-month", {
+ count: 1000,
+ })}
+
+
+
+
+ {tiers.map((tier) => (
+
+
+ {tier.name} - {tier.priceMonthly}
+
+ (session?.user?.email ? checkout(tier.priceId) : signIn())}
+ className="mt-6 block rounded-md bg-indigo-600 px-4 py-2.5 text-center text-xl font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
+ >
+ {session?.user?.email ? tier.buyButton : t("payment.sign-in-to-buy")}
+
+
+ ))}
diff --git a/src/components/ProductHuntBanner.tsx b/src/components/ProductHuntBanner.tsx
index d090d4e3..2985e3e8 100644
--- a/src/components/ProductHuntBanner.tsx
+++ b/src/components/ProductHuntBanner.tsx
@@ -9,10 +9,7 @@ interface Props {
const ProductHuntBanner = (props: Props) => {
const { className } = props;
const { t } = useTranslation();
- const [hideBanner, setHideBanner] = useLocalStorage(
- "hide-product-hunt-banner",
- false
- );
+ const [hideBanner, setHideBanner] = useLocalStorage("hide-product-hunt-banner", false);
const show = !hideBanner;
return (
@@ -28,10 +25,7 @@ const ProductHuntBanner = (props: Props) => {
>
{t("banner.product-hunt")}
-
setHideBanner(true)}
- >
+ setHideBanner(true)}>
diff --git a/src/components/QueryDrawer.tsx b/src/components/QueryDrawer.tsx
index 177dc553..81c774b1 100644
--- a/src/components/QueryDrawer.tsx
+++ b/src/components/QueryDrawer.tsx
@@ -3,7 +3,7 @@ import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next";
import TextareaAutosize from "react-textarea-autosize";
-import { useQueryStore } from "@/store";
+import { useQueryStore, useMessageStore } from "@/store";
import { ExecutionResult, ResponseObject } from "@/types";
import { checkStatementIsSelect, getMessageFromExecutionResult } from "@/utils";
import Tooltip from "./kit/Tooltip";
@@ -16,17 +16,14 @@ import ExecutionWarningBanner from "./ExecutionView/ExecutionWarningBanner";
const QueryDrawer = () => {
const { t } = useTranslation();
const queryStore = useQueryStore();
- const [executionResult, setExecutionResult] = useState<
- ExecutionResult | undefined
- >(undefined);
+ const messageStore = useMessageStore();
+ const [executionResult, setExecutionResult] = useState
(undefined);
+ const [originalStatement, setOriginalStatement] = useState("");
const [statement, setStatement] = useState("");
const [isLoading, setIsLoading] = useState(false);
const context = queryStore.context;
- const executionMessage = executionResult
- ? getMessageFromExecutionResult(executionResult)
- : "";
- const showExecutionWarningBanner =
- statement.trim() && !checkStatementIsSelect(statement);
+ const executionMessage = executionResult ? getMessageFromExecutionResult(executionResult) : "";
+ const showExecutionWarningBanner = statement.trim() && !checkStatementIsSelect(statement);
useEffect(() => {
if (!queryStore.showDrawer) {
@@ -35,12 +32,24 @@ const QueryDrawer = () => {
const statement = context?.statement || "";
setStatement(statement);
+ // Save original statement when open QueryDrawer.
+ if (!originalStatement) {
+ setOriginalStatement(statement);
+ }
+
if (statement !== "" && checkStatementIsSelect(statement)) {
executeStatement(statement);
}
setExecutionResult(undefined);
}, [context, queryStore.showDrawer]);
+ // Reset original statement to "" when close QueryDrawer.
+ useEffect(() => {
+ if (!queryStore.showDrawer) {
+ setOriginalStatement("");
+ }
+ }, [queryStore.showDrawer]);
+
const executeStatement = async (statement: string) => {
if (!statement) {
toast.error("Please enter a statement.");
@@ -86,82 +95,63 @@ const QueryDrawer = () => {
}
};
- const close = () => queryStore.toggleDrawer(false);
+ const close = () => {
+ if (originalStatement !== statement && context?.messageId) {
+ messageStore.updateStatement(context?.messageId, originalStatement, statement);
+ }
+ queryStore.toggleDrawer(false);
+ };
return (
-
-
-
+
+
+
{t("execution.title")}
{!context ? (
-
- {t("execution.message.no-connection")}
-
+ {t("execution.message.no-connection")}
) : (
<>
{t("connection.self")}:
-
+
{context.database?.name}
- {showExecutionWarningBanner && (
-
- )}
+ {showExecutionWarningBanner &&
}
setStatement(e.target.value)}
/>
-
- executeStatement(statement)}
- >
-
-
-
+ executeStatement(statement)}
+ >
+ {t("common.run-sql")}
+
{isLoading ? (
-
- {t("execution.message.executing")}
-
+ {t("execution.message.executing")}
) : (
<>
{executionResult ? (
executionMessage ? (
-
+
) : (
-
+
)
) : (
<>>
diff --git a/src/components/QuotaOverflowBanner.tsx b/src/components/QuotaOverflowBanner.tsx
index 33154de1..791b9039 100644
--- a/src/components/QuotaOverflowBanner.tsx
+++ b/src/components/QuotaOverflowBanner.tsx
@@ -1,5 +1,6 @@
import { useTranslation } from "react-i18next";
import { useLocalStorage } from "react-use";
+import { allowSelfOpenAIKey } from "@/utils";
import Link from "next/link";
import Icon from "./Icon";
@@ -10,10 +11,7 @@ interface Props {
const QuotaOverflowBanner = (props: Props) => {
const { className } = props;
const { t } = useTranslation();
- const [hideBanner, setHideBanner] = useLocalStorage(
- "hide-quota-overflow-banner",
- false
- );
+ const [hideBanner, setHideBanner] = useLocalStorage("hide-quota-overflow-banner", false);
const show = !hideBanner;
return (
@@ -25,14 +23,13 @@ const QuotaOverflowBanner = (props: Props) => {
>
{t("banner.quota-overflow")}{" "}
-
- {t("banner.use-my-key")}
-
+ {allowSelfOpenAIKey() && (
+
+ {t("banner.use-my-key")}
+
+ )}
-
setHideBanner(true)}
- >
+ setHideBanner(true)}>
diff --git a/src/components/QuotaView.tsx b/src/components/QuotaView.tsx
new file mode 100644
index 00000000..e292312b
--- /dev/null
+++ b/src/components/QuotaView.tsx
@@ -0,0 +1,91 @@
+import { signIn, useSession } from "next-auth/react";
+import axios from "axios";
+import { useEffect, useState } from "react";
+import Link from "next/link";
+import { useTranslation } from "react-i18next";
+import { Quota } from "@/types";
+import getEventEmitter from "@/utils/event-emitter";
+import { allowSelfOpenAIKey } from "@/utils";
+
+interface Props {
+ className?: string;
+}
+
+const QuotaView = (props: Props) => {
+ const [quota, setQuota] = useState
({ current: 0, limit: 0 });
+ const { t } = useTranslation();
+ const { data: session } = useSession();
+
+ const showSupplyOwnKey = !session || quota.current >= quota.limit;
+ const expired = session?.user?.subscription?.expireAt && session?.user?.subscription?.expireAt < Date.now();
+ const showActionButton = !session || session.user.subscription.plan === "FREE" || expired;
+
+ const refreshQuota = async (userId: string) => {
+ let quota: Quota = { current: 0, limit: 0 };
+ try {
+ const { data } = await axios.get("/api/usage", {
+ headers: { Authorization: `Bearer ${userId}` },
+ });
+ quota = data;
+ } catch (error) {
+ // do nth
+ }
+ setQuota(quota);
+ };
+
+ getEventEmitter().on("usage.update", () => {
+ if (session?.user.id) {
+ refreshQuota(session.user.id);
+ }
+ });
+
+ useEffect(() => {
+ if (session?.user.id) {
+ refreshQuota(session.user.id);
+ }
+ }, [session]);
+
+ return (
+
+
+
+ {session ? t(`setting.plan.${session.user.subscription.plan.toLowerCase()}`) : t("setting.plan.guest")}
+
+ {!!expired && (
+
+ {t("setting.plan.expired")}
+
+ )}
+
+
+
{t("common.quota")}
+
= quota.limit ? "text-red-600" : "text-black dark:text-gray-300"}>
+ {quota.current}/{quota.limit}
+
+
+ {!!showActionButton &&
+ (session ? (
+
+ {expired ? t("setting.plan.renew") : t("setting.plan.upgrade")}
+
+ ) : (
+
signIn()}
+ >
+ {t("setting.plan.signup-for-more")}
+
+ ))}
+ {allowSelfOpenAIKey() && !!showSupplyOwnKey && (
+
+ {t("banner.use-my-key")}
+
+ )}
+
+ );
+};
+
+export default QuotaView;
diff --git a/src/components/QuotaWidget.tsx b/src/components/QuotaWidget.tsx
deleted file mode 100644
index 168b1593..00000000
--- a/src/components/QuotaWidget.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { signIn, useSession } from "next-auth/react";
-import axios from "axios";
-import { useEffect, useState } from "react";
-import Link from "next/link";
-import { useTranslation } from "react-i18next";
-import { Quota } from "@/types";
-
-interface Props {
- className?: string;
-}
-
-const QuotaWidget = (props: Props) => {
- const [quota, setQuota] = useState({ current: 0, limit: 0 });
- const { t } = useTranslation();
- const { data: session } = useSession();
-
- useEffect(() => {
- const refreshQuota = async () => {
- let quota: Quota = { current: 0, limit: 0 };
- try {
- const { data } = await axios.get("/api/quota", {});
- quota = data;
- } catch (error) {
- // do nth
- }
- setQuota(quota);
- };
-
- refreshQuota();
- }, []);
-
- return (
-
-
-
- {t("setting.plan.free")}
-
-
-
-
{t("common.quota")}
-
- {quota.current}/{quota.limit}
-
-
- {session ? (
-
- {t("setting.plan.upgrade")}
-
- ) : (
-
signIn()}
- >
- {t("setting.plan.signup-for-more")}
-
- )}
-
- );
-};
-
-export default QuotaWidget;
diff --git a/src/components/RequiredStar.tsx b/src/components/RequiredStar.tsx
new file mode 100644
index 00000000..aa5caeb9
--- /dev/null
+++ b/src/components/RequiredStar.tsx
@@ -0,0 +1,5 @@
+const RequiredStar = () => {
+ return * ;
+};
+
+export default RequiredStar;
diff --git a/src/components/SchemaDrawer.tsx b/src/components/SchemaDrawer.tsx
new file mode 100644
index 00000000..95b38217
--- /dev/null
+++ b/src/components/SchemaDrawer.tsx
@@ -0,0 +1,70 @@
+import { encode } from "@nem035/gpt-3-encoder";
+import { Drawer } from "@mui/material";
+import { useEffect, useState } from "react";
+import Icon from "./Icon";
+import { getAssistantById, getPromptGeneratorOfAssistant, useConnectionStore, useConversationStore, useSettingStore } from "@/store";
+import { getModel, generateDbPromptFromContext } from "@/utils";
+import { CodeBlock } from "./CodeBlock";
+import { useTranslation } from "react-i18next";
+
+interface Props {
+ close: () => void;
+}
+
+const SchemaDrawer = (props: Props) => {
+ const { t } = useTranslation();
+ const conversationStore = useConversationStore();
+ const connectionStore = useConnectionStore();
+ const settingStore = useSettingStore();
+ const currentConversation = conversationStore.getConversationById(conversationStore.currentConversationId);
+ const maxToken = getModel(settingStore.setting.openAIApiConfig?.model || "").max_token;
+ const [prompt, setPrompt] = useState("");
+
+ const getPrompt = async () => {
+ if (!currentConversation) return;
+ const promptGenerator = getPromptGeneratorOfAssistant(getAssistantById(currentConversation.assistantId)!);
+ let dbPrompt = promptGenerator();
+ if (connectionStore.currentConnectionCtx?.database) {
+ const schemaList = await connectionStore.getOrFetchDatabaseSchema(connectionStore.currentConnectionCtx?.database);
+ dbPrompt = generateDbPromptFromContext(
+ promptGenerator,
+ connectionStore.currentConnectionCtx.connection.engineType,
+ schemaList,
+ currentConversation.selectedSchemaName || "",
+ currentConversation.selectedTableNameList || [],
+ maxToken
+ );
+ }
+ setPrompt(dbPrompt);
+ };
+
+ useEffect(() => {
+ // TODO: initial state with current conversation.
+ }, []);
+
+ useEffect(() => {
+ getPrompt();
+ }, []);
+
+ const close = () => props.close();
+ return (
+
+
+
+
+
+
+
{t("prompt.current-conversation")}
+
+ {t("connection.total-token")} {encode(prompt).length}/{maxToken}
+
+
+
+
+
+
+
+ );
+};
+
+export default SchemaDrawer;
diff --git a/src/components/SettingAvatarIcon.tsx b/src/components/SettingAvatarIcon.tsx
index 39454168..33b77d26 100644
--- a/src/components/SettingAvatarIcon.tsx
+++ b/src/components/SettingAvatarIcon.tsx
@@ -1,9 +1,9 @@
import { useSession } from "next-auth/react";
import { useTranslation } from "react-i18next";
import Link from "next/link";
+import { hasFeature } from "../utils";
import Tooltip from "./kit/Tooltip";
import Icon from "./Icon";
-import { HasFeature } from "../utils";
interface Props {}
@@ -14,7 +14,7 @@ const SettingAvatarIcon = (props: Props) => {
return (
- {(!HasFeature("account") || !session) && (
+ {(!hasFeature("account") || !session) && (
{
)}
- {HasFeature("account") && session?.user && (
+ {hasFeature("account") && session?.user && (
{session.user.image ? (
{
/>
) : (
- {session.user.name?.charAt(0)}
+ {session.user.name ? session.user.name.charAt(0) : session.user.email?.charAt(0)}
)}
diff --git a/src/components/SettingView.tsx b/src/components/SettingGeneralView.tsx
similarity index 73%
rename from src/components/SettingView.tsx
rename to src/components/SettingGeneralView.tsx
index 04e483ad..25906f5a 100644
--- a/src/components/SettingView.tsx
+++ b/src/components/SettingGeneralView.tsx
@@ -1,20 +1,21 @@
import React from "react";
import { useTranslation } from "react-i18next";
+import { hasFeature } from "../utils";
import Icon from "./Icon";
import AccountView from "./AccountView";
+import DebugView from "./DebugView";
import PricingView from "./PricingView";
import WeChatQRCodeView from "./WeChatQRCodeView";
import ClearDataButton from "./ClearDataButton";
import LocaleSelector from "./LocaleSelector";
import ThemeSelector from "./ThemeSelector";
import OpenAIApiConfigView from "./OpenAIApiConfigView";
-import { HasFeature } from "../utils";
-const SettingView = () => {
+const SettingGeneralView = () => {
const { t } = useTranslation();
return (
-
+
- {HasFeature("account") && (
+ {hasFeature("debug") && (
)}
- {HasFeature("payment") && (
+ {hasFeature("payment") && (
)}
+ {hasFeature("account") && (
+
+ )}
+
@@ -58,8 +65,18 @@ const SettingView = () => {
+
+
);
};
-export default SettingView;
+export default SettingGeneralView;
diff --git a/src/components/Sidebar/ConnectionList.tsx b/src/components/Sidebar/ConnectionList.tsx
index 9dc2e375..da0e912e 100644
--- a/src/components/Sidebar/ConnectionList.tsx
+++ b/src/components/Sidebar/ConnectionList.tsx
@@ -20,8 +20,7 @@ const ConnectionList = () => {
showCreateConnectionModal: false,
showUpdateConversationModal: false,
});
- const [editConnectionModalContext, setEditConnectionModalContext] =
- useState
();
+ const [editConnectionModalContext, setEditConnectionModalContext] = useState();
const connectionList = connectionStore.connectionList;
const currentConnectionCtx = connectionStore.currentConnectionCtx;
@@ -34,9 +33,7 @@ const ConnectionList = () => {
};
const handleConnectionSelect = async (connection: Connection) => {
- const databaseList = await connectionStore.getOrFetchDatabaseList(
- connection
- );
+ const databaseList = await connectionStore.getOrFetchDatabaseList(connection);
connectionStore.setCurrentConnectionCtx({
connection,
database: head(databaseList),
@@ -54,10 +51,7 @@ const ConnectionList = () => {
return (
<>
connectionStore.setCurrentConnectionCtx(undefined)}
>
@@ -65,9 +59,8 @@ const ConnectionList = () => {
{connectionList.map((connection) => (
handleConnectionSelect(connection)}
>
@@ -80,10 +73,7 @@ const ConnectionList = () => {
>
-
+
))}
@@ -97,10 +87,7 @@ const ConnectionList = () => {
{state.showCreateConnectionModal && (
- toggleCreateConnectionModal(false)}
- />
+ toggleCreateConnectionModal(false)} />
)}
>
);
diff --git a/src/components/Sidebar/ConversationList.tsx b/src/components/Sidebar/ConversationList.tsx
index dc536496..eb99b386 100644
--- a/src/components/Sidebar/ConversationList.tsx
+++ b/src/components/Sidebar/ConversationList.tsx
@@ -1,10 +1,6 @@
import { useState } from "react";
import { useTranslation } from "react-i18next";
-import {
- useConversationStore,
- useConnectionStore,
- useLayoutStore,
-} from "@/store";
+import { useConversationStore, useConnectionStore, useLayoutStore } from "@/store";
import { Conversation } from "@/types";
import Dropdown, { DropdownItem } from "../kit/Dropdown";
import Icon from "../Icon";
@@ -22,8 +18,7 @@ const ConversationList = () => {
const [state, setState] = useState({
showUpdateConversationModal: false,
});
- const [updateConversationModalContext, setUpdateConversationModalContext] =
- useState();
+ const [updateConversationModalContext, setUpdateConversationModalContext] = useState();
const currentConnectionCtx = connectionStore.currentConnectionCtx;
const conversationList = conversationStore.conversationList.filter(
(conversation) =>
@@ -42,10 +37,7 @@ const ConversationList = () => {
if (!currentConnectionCtx) {
conversationStore.createConversation();
} else {
- conversationStore.createConversation(
- currentConnectionCtx.connection.id,
- currentConnectionCtx.database?.name
- );
+ conversationStore.createConversation(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name);
}
};
@@ -77,8 +69,7 @@ const ConversationList = () => {
handleConversationSelect(conversation)}
>
@@ -87,9 +78,7 @@ const ConversationList = () => {
) : (
)}
-
- {conversation.title || "SQL Chat"}
-
+
{conversation.title || "SQL Chat"}
@@ -125,10 +114,7 @@ const ConversationList = () => {
{updateConversationModalContext && state.showUpdateConversationModal && (
- toggleUpdateConversationModal(false)}
- conversation={updateConversationModalContext}
- />
+ toggleUpdateConversationModal(false)} conversation={updateConversationModalContext} />
)}
>
);
diff --git a/src/components/StripeCheckPaymentBanner.tsx b/src/components/StripeCheckPaymentBanner.tsx
index 8d68facc..b6c04ec0 100644
--- a/src/components/StripeCheckPaymentBanner.tsx
+++ b/src/components/StripeCheckPaymentBanner.tsx
@@ -1,9 +1,8 @@
+import useSWR from "swr";
import { useTranslation } from "react-i18next";
import { useRouter } from "next/router";
import { useState } from "react";
import { fetchGetJSON } from "../utils/api-helpers";
-import useSWR from "swr";
-import Link from "next/link";
import Icon from "./Icon";
interface Props {
@@ -20,10 +19,7 @@ const StripeCheckPaymentBanner = (props: Props) => {
// Fetch CheckoutSession from static page via
// https://nextjs.org/docs/basic-features/data-fetching#static-generation
- const { data, error } = useSWR(
- router.query.session_id ? `/api/checkout_sessions/${sessionId}` : null,
- fetchGetJSON
- );
+ const { data } = useSWR(router.query.session_id ? `/api/checkout_sessions/${sessionId}` : null, fetchGetJSON);
return (
<>
@@ -33,13 +29,9 @@ const StripeCheckPaymentBanner = (props: Props) => {
} relative w-full flex flex-row justify-start sm:justify-center items-center py-1 bg-gray-100 dark:bg-zinc-700`}
>
- {t("payment.self")}{" "}
- {data?.payment_intent?.status ?? t("common.loading")}
+ {t("payment.self")} {data?.payment_intent?.status ?? t("common.loading")}
- setHideBanner(true)}
- >
+ setHideBanner(true)}>
diff --git a/src/components/ThemeSelector.tsx b/src/components/ThemeSelector.tsx
index 36bcb757..86e0782d 100644
--- a/src/components/ThemeSelector.tsx
+++ b/src/components/ThemeSelector.tsx
@@ -32,14 +32,7 @@ const ThemeSelector = () => {
settingStore.setTheme(theme);
};
- return (
-
- );
+ return ;
};
export default ThemeSelector;
diff --git a/src/components/ThemeSwitch.tsx b/src/components/ThemeSwitch.tsx
index 9098ea25..e7555081 100644
--- a/src/components/ThemeSwitch.tsx
+++ b/src/components/ThemeSwitch.tsx
@@ -14,10 +14,7 @@ const ThemeSwitch = () => {
};
return (
-
+
);
diff --git a/src/components/UpdateConversationModal.tsx b/src/components/UpdateConversationModal.tsx
index c883f39c..d6feedb7 100644
--- a/src/components/UpdateConversationModal.tsx
+++ b/src/components/UpdateConversationModal.tsx
@@ -27,9 +27,7 @@ const UpdateConversationModal = (props: Props) => {
label: assistant.name,
};
});
- const currentAssistant = assistantList.find(
- (assistant) => assistant.id === assistantId
- );
+ const currentAssistant = assistantList.find((assistant) => assistant.id === assistantId);
const handleSaveEdit = () => {
const formatedTitle = title.trim();
@@ -48,30 +46,17 @@ const UpdateConversationModal = (props: Props) => {
return (
-
- {t("conversation.title")}
-
- setTitle(value)}
- />
+ {t("conversation.title")}
+ setTitle(value)} />
diff --git a/src/components/kit/Checkbox.tsx b/src/components/kit/Checkbox.tsx
new file mode 100644
index 00000000..f64abe63
--- /dev/null
+++ b/src/components/kit/Checkbox.tsx
@@ -0,0 +1,34 @@
+import * as CheckboxUI from "@radix-ui/react-checkbox";
+import { CheckIcon, DividerHorizontalIcon } from "@radix-ui/react-icons";
+import { ReactNode } from "react";
+
+interface CheckboxProps {
+ value: boolean;
+ label: string;
+ onValueChange: (tableName: string, value: boolean) => void;
+}
+const Checkbox = (props: CheckboxProps & { children?: ReactNode }) => {
+ const { value, label, onValueChange, children } = props;
+ return (
+
+ );
+};
+
+export default Checkbox;
diff --git a/src/components/kit/Modal.tsx b/src/components/kit/Modal.tsx
index 5fccfd34..b328a54f 100644
--- a/src/components/kit/Modal.tsx
+++ b/src/components/kit/Modal.tsx
@@ -19,9 +19,7 @@ const Modal = (props: Props) => {
className || ""
} flex flex-col bg-white dark:bg-zinc-800 rounded-xl p-4 fixed top-[50%] left-[50%] h-auto max-h-[85vh] w-[90vw] max-w-[90vw] sm:max-w-lg translate-x-[-50%] translate-y-[-50%] z-100 outline-none`}
>
-
- {title}
-
+
{title}
{
>
-
- {children}
-
+
{children}
);
diff --git a/src/components/kit/Popover.tsx b/src/components/kit/Popover.tsx
index f67d5f08..0873cf87 100644
--- a/src/components/kit/Popover.tsx
+++ b/src/components/kit/Popover.tsx
@@ -16,9 +16,7 @@ const Popover = (props: Props) => {
{children}
diff --git a/src/components/kit/Radio.tsx b/src/components/kit/Radio.tsx
new file mode 100644
index 00000000..694c887e
--- /dev/null
+++ b/src/components/kit/Radio.tsx
@@ -0,0 +1,39 @@
+import { HTMLInputTypeAttribute } from "react";
+
+interface Props {
+ value: string;
+ onChange?: (value: string) => void;
+ type?: HTMLInputTypeAttribute;
+ className?: string;
+ disabled?: boolean;
+ checked?: boolean;
+}
+
+const getDefaultProps = () => ({
+ value: "",
+ onChange: () => {},
+ type: "radio",
+ className: "",
+ disabled: false,
+ checked: false,
+});
+
+const Radio = (props: Props) => {
+ const { value, disabled, className, type, checked, onChange } = {
+ ...getDefaultProps(),
+ ...props,
+ };
+
+ return (
+ onChange(e.target.value)}
+ />
+ );
+};
+
+export default Radio;
diff --git a/src/components/kit/Select.tsx b/src/components/kit/Select.tsx
index e5276b92..a309d4cb 100644
--- a/src/components/kit/Select.tsx
+++ b/src/components/kit/Select.tsx
@@ -39,32 +39,21 @@ const Select = (props: Props) => {
>
7
- ? "h-80 overflow-hidden"
- : "max-h-80 overflow-auto"
+ itemList.length > 7 ? "h-80 overflow-hidden" : "max-h-80 overflow-auto"
} border dark:border-zinc-800 rounded-lg drop-shadow-lg`}
type="auto"
>
-
+
- {placeholder && (
-
- {placeholder}
-
- )}
+ {placeholder && {placeholder} }
{itemList.map((item) => (
-
- {item.label}
-
+ {item.label}
diff --git a/src/components/kit/TextField.tsx b/src/components/kit/TextField.tsx
index 604cdfe5..bcb1020d 100644
--- a/src/components/kit/TextField.tsx
+++ b/src/components/kit/TextField.tsx
@@ -26,9 +26,7 @@ const TextField = (props: Props) => {
return (
Promise;
- execute: (
- databaseName: string,
- statement: string
- ) => Promise;
+ execute: (databaseName: string, statement: string) => Promise;
getDatabases: () => Promise;
- getTables: (databaseName: string) => Promise;
- getTableStructure: (
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
- ) => Promise;
- getTableStructureBatch: (
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
- ) => Promise;
+ getTableSchema: (databaseName: string) => Promise;
}
export const newConnector = (connection: Connection): Connector => {
@@ -31,6 +18,8 @@ export const newConnector = (connection: Connection): Connector => {
return postgres(connection);
case Engine.MSSQL:
return mssql(connection);
+ case Engine.OceanBase:
+ return mysql(connection);
default:
throw new Error("Unsupported engine type.");
}
diff --git a/src/lib/connectors/mssql/index.ts b/src/lib/connectors/mssql/index.ts
index 877014d2..929aa04e 100644
--- a/src/lib/connectors/mssql/index.ts
+++ b/src/lib/connectors/mssql/index.ts
@@ -1,12 +1,10 @@
import { ConnectionPool } from "mssql";
-import { Connection, ExecutionResult } from "@/types";
+import { Connection, ExecutionResult, Schema, Table } from "@/types";
import { Connector } from "..";
const systemDatabases = ["master", "tempdb", "model", "msdb"];
-const getMSSQLConnection = async (
- connection: Connection
-): Promise => {
+const getMSSQLConnection = async (connection: Connection): Promise => {
const connectionOptions: any = {
server: connection.host,
port: parseInt(connection.port),
@@ -34,11 +32,7 @@ const testConnection = async (connection: Connection): Promise => {
return true;
};
-const execute = async (
- connection: Connection,
- databaseName: string,
- statement: string
-): Promise => {
+const execute = async (connection: Connection, databaseName: string, statement: string): Promise => {
const pool = await getMSSQLConnection(connection);
const request = pool.request();
const result = await request.query(`USE ${databaseName}; ${statement}`);
@@ -54,11 +48,7 @@ const execute = async (
const getDatabases = async (connection: Connection): Promise => {
const pool = await getMSSQLConnection(connection);
const request = pool.request();
- const result = await request.query(
- `SELECT name FROM sys.databases WHERE name NOT IN ('${systemDatabases.join(
- "','"
- )}');`
- );
+ const result = await request.query(`SELECT name FROM sys.databases WHERE name NOT IN ('${systemDatabases.join("','")}');`);
await pool.close();
const databaseList = [];
for (const row of result.recordset) {
@@ -69,111 +59,52 @@ const getDatabases = async (connection: Connection): Promise => {
return databaseList;
};
-const getTables = async (
- connection: Connection,
- databaseName: string
-): Promise => {
+const getTableSchema = async (connection: Connection, databaseName: string): Promise => {
const pool = await getMSSQLConnection(connection);
const request = pool.request();
+ const schemaList: Schema[] = [];
const result = await request.query(
- `SELECT TABLE_NAME as table_name FROM ${databaseName}.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';`
+ `SELECT TABLE_NAME as table_name, TABLE_SCHEMA as table_schema FROM ${databaseName}.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';`
);
- await pool.close();
- const tableList = [];
for (const row of result.recordset) {
if (row["table_name"]) {
- tableList.push(row["table_name"]);
+ const schema = schemaList.find((schema) => schema.name === row["table_schema"]);
+ if (schema) {
+ schema.tables.push({ name: row["table_name"] as string, structure: "" } as Table);
+ } else {
+ schemaList.push({
+ name: row["table_schema"],
+ tables: [{ name: row["table_name"], structure: "" } as Table],
+ });
+ }
}
}
- return tableList;
-};
-const getTableStructure = async (
- connection: Connection,
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- const pool = await getMSSQLConnection(connection);
- const request = pool.request();
- const { recordset } = await request.query(
- `SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE FROM ${databaseName}.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo' AND TABLE_NAME='${tableName}';`
- );
-
- const columnList = [];
- // Transform to standard schema string.
- for (const row of recordset) {
- columnList.push(
- `${row["COLUMN_NAME"]} ${row["DATA_TYPE"].toUpperCase()} ${
- String(row["IS_NULLABLE"]).toUpperCase() === "NO" ? "NOT NULL" : ""
- }`
- );
- }
- structureFetched(
- tableName,
- `CREATE TABLE [${tableName}] (
- ${columnList.join(",\n")}
- );`
- );
-};
-
-const getTableStructureBatch = async (
- connection: Connection,
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- const pool = await getMSSQLConnection(connection);
- const request = pool.request();
-
- await Promise.all(
- tableNameList.map(async (tableName) => {
+ for (const schema of schemaList) {
+ for (const table of schema.tables) {
const { recordset } = await request.query(
- `SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE FROM ${databaseName}.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo' AND TABLE_NAME='${tableName}';`
+ `SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE FROM ${databaseName}.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${schema.name}' AND TABLE_NAME='${table.name}';`
);
const columnList = [];
// Transform to standard schema string.
for (const row of recordset) {
columnList.push(
- `${row["COLUMN_NAME"]} ${row["DATA_TYPE"].toUpperCase()} ${
- String(row["IS_NULLABLE"]).toUpperCase() === "NO" ? "NOT NULL" : ""
- }`
+ `${row["COLUMN_NAME"]} ${row["DATA_TYPE"].toUpperCase()} ${String(row["IS_NULLABLE"]).toUpperCase() === "NO" ? "NOT NULL" : ""}`
);
}
- structureFetched(
- tableName,
- `CREATE TABLE [${tableName}] (
- ${columnList.join(",\n")}
- );`
- );
- })
- );
+ table.structure = `CREATE TABLE [${table.name}] (\n${columnList.join(",\n")}\n);`;
+ }
+ }
+ await pool.close();
+ return schemaList;
};
const newConnector = (connection: Connection): Connector => {
return {
testConnection: () => testConnection(connection),
- execute: (databaseName: string, statement: string) =>
- execute(connection, databaseName, statement),
+ execute: (databaseName: string, statement: string) => execute(connection, databaseName, statement),
getDatabases: () => getDatabases(connection),
- getTables: (databaseName: string) => getTables(connection, databaseName),
- getTableStructure: (
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructure(connection, databaseName, tableName, structureFetched),
- getTableStructureBatch: (
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructureBatch(
- connection,
- databaseName,
- tableNameList,
- structureFetched
- ),
+ getTableSchema: (databaseName: string) => getTableSchema(connection, databaseName),
};
};
diff --git a/src/lib/connectors/mysql/index.ts b/src/lib/connectors/mysql/index.ts
index 81cf9a3b..76bde3d7 100644
--- a/src/lib/connectors/mysql/index.ts
+++ b/src/lib/connectors/mysql/index.ts
@@ -1,18 +1,11 @@
import { ConnectionOptions } from "mysql2";
import mysql, { RowDataPacket } from "mysql2/promise";
-import { Connection, ExecutionResult } from "@/types";
+import { Connection, ExecutionResult, Table, Schema } from "@/types";
import { Connector } from "..";
-const systemDatabases = [
- "information_schema",
- "mysql",
- "performance_schema",
- "sys",
-];
+const systemDatabases = ["information_schema", "mysql", "performance_schema", "sys"];
-const getMySQLConnection = async (
- connection: Connection
-): Promise => {
+const getMySQLConnection = async (connection: Connection): Promise => {
const connectionOptions: ConnectionOptions = {
host: connection.host,
port: parseInt(connection.port),
@@ -26,8 +19,28 @@ const getMySQLConnection = async (
cert: connection.ssl?.cert,
key: connection.ssl?.key,
};
+ } else {
+ // rejectUnauthorized=false to infer sslmode=prefer since hosted MySQL venders have SSL enabled.
+ connectionOptions.ssl = {
+ rejectUnauthorized: false,
+ };
+ }
+
+ let conn;
+ if (connection.ssl) {
+ conn = await mysql.createConnection(connectionOptions);
+ } else {
+ try {
+ conn = await mysql.createConnection(connectionOptions);
+ } catch (error) {
+ if (error instanceof Error && error.message.includes("Server does not support secure")) {
+ connectionOptions.ssl = undefined;
+ conn = await mysql.createConnection(connectionOptions);
+ } else {
+ throw error;
+ }
+ }
}
- const conn = await mysql.createConnection(connectionOptions);
return conn;
};
@@ -37,11 +50,7 @@ const testConnection = async (connection: Connection): Promise => {
return true;
};
-const execute = async (
- connection: Connection,
- databaseName: string,
- statement: string
-): Promise => {
+const execute = async (connection: Connection, databaseName: string, statement: string): Promise => {
connection.database = databaseName;
const conn = await getMySQLConnection(connection);
const [rows] = await conn.execute(statement);
@@ -75,89 +84,39 @@ const getDatabases = async (connection: Connection): Promise => {
return databaseList;
};
-const getTables = async (
- connection: Connection,
- databaseName: string
-): Promise => {
+const getTableSchema = async (connection: Connection, databaseName: string): Promise => {
const conn = await getMySQLConnection(connection);
+ // get All tableList from database
const [rows] = await conn.query(
- `SELECT TABLE_NAME as table_name FROM information_schema.tables WHERE TABLE_SCHEMA=? AND TABLE_TYPE='BASE TABLE';`,
+ // SYSTEM VERSIONED is a special table for MariaDB https://mariadb.com/kb/en/system-versioned-tables/
+ `SELECT TABLE_NAME as table_name FROM information_schema.tables WHERE TABLE_SCHEMA=? AND (TABLE_TYPE='BASE TABLE' || TABLE_TYPE='SYSTEM VERSIONED');`,
[databaseName]
);
- conn.destroy();
const tableList = [];
for (const row of rows) {
if (row["table_name"]) {
tableList.push(row["table_name"]);
}
}
- return tableList;
-};
-
-const getTableStructure = async (
- connection: Connection,
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- const conn = await getMySQLConnection(connection);
- const [rows] = await conn.query(
- `SHOW CREATE TABLE \`${databaseName}\`.\`${tableName}\`;`
- );
- conn.destroy();
- if (rows.length !== 1) {
- throw new Error("Unexpected number of rows.");
- }
- structureFetched(tableName, rows[0]["Create Table"] || "");
-};
+ const SchemaList: Schema[] = [{ name: "", tables: [] as Table[] }];
-const getTableStructureBatch = async (
- connection: Connection,
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- const conn = await getMySQLConnection(connection);
+ for (const tableName of tableList) {
+ const [rows] = await conn.query(`SHOW CREATE TABLE \`${databaseName}\`.\`${tableName}\`;`);
+ if (rows.length !== 1) {
+ throw new Error("Unexpected number of rows.");
+ }
- await Promise.all(
- tableNameList.map(async (tableName) => {
- const [rows] = await conn.query(
- `SHOW CREATE TABLE \`${databaseName}\`.\`${tableName}\`;`
- );
- if (rows.length !== 1) {
- throw new Error("Unexpected number of rows.");
- }
- structureFetched(tableName, rows[0]["Create Table"] || "");
- })
- ).finally(() => {
- conn.destroy();
- });
+ SchemaList[0].tables.push({ name: tableName, structure: rows[0]["Create Table"] || "" });
+ }
+ return SchemaList;
};
const newConnector = (connection: Connection): Connector => {
return {
testConnection: () => testConnection(connection),
- execute: (databaseName: string, statement: string) =>
- execute(connection, databaseName, statement),
+ execute: (databaseName: string, statement: string) => execute(connection, databaseName, statement),
getDatabases: () => getDatabases(connection),
- getTables: (databaseName: string) => getTables(connection, databaseName),
- getTableStructure: (
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructure(connection, databaseName, tableName, structureFetched),
- getTableStructureBatch: (
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructureBatch(
- connection,
- databaseName,
- tableNameList,
- structureFetched
- ),
+ getTableSchema: (databaseName: string) => getTableSchema(connection, databaseName),
};
};
diff --git a/src/lib/connectors/postgres/index.ts b/src/lib/connectors/postgres/index.ts
index 31ab8f4d..6be83bf1 100644
--- a/src/lib/connectors/postgres/index.ts
+++ b/src/lib/connectors/postgres/index.ts
@@ -1,14 +1,20 @@
import { Client, ClientConfig } from "pg";
-import { Connection, ExecutionResult } from "@/types";
+import { Connection, ExecutionResult, Table, Schema } from "@/types";
import { Connector } from "..";
-const newPostgresClient = (connection: Connection) => {
+const systemSchemas =
+ "'information_schema', 'pg_catalog', 'pg_toast', '_timescaledb_cache', '_timescaledb_catalog', '_timescaledb_internal', '_timescaledb_config', 'timescaledb_information', 'timescaledb_experimental'";
+
+const systemTables = "'_prisma_migrations'";
+
+const newPostgresClient = async (connection: Connection) => {
const clientConfig: ClientConfig = {
host: connection.host,
port: Number(connection.port),
user: connection.username,
password: connection.password,
database: connection.database,
+ application_name: "sqlchat",
};
if (connection.ssl) {
clientConfig.ssl = {
@@ -16,25 +22,43 @@ const newPostgresClient = (connection: Connection) => {
cert: connection.ssl?.cert,
key: connection.ssl?.key,
};
+ } else {
+ clientConfig.ssl = {
+ rejectUnauthorized: false,
+ };
+ }
+
+ let client = new Client(clientConfig);
+
+ if (connection.ssl) {
+ await client.connect();
+ } else {
+ try {
+ await client.connect();
+ } catch (error) {
+ // Because node-postgres didn't implement `sslmode: preferred`. So first try to connect via SSL, otherwise connect via non-SSL.
+ // Connecting postgres via non-ssl requires `clientConfig.ssl` is undefined. ref: https://github.com/sqlchat/sqlchat/issues/108
+ if (error instanceof Error && error.message.includes("The server does not support SSL connections")) {
+ clientConfig.ssl = undefined;
+ client = new Client(clientConfig);
+ await client.connect();
+ } else {
+ throw error;
+ }
+ }
}
- return new Client(clientConfig);
+ return client;
};
const testConnection = async (connection: Connection): Promise => {
- const client = newPostgresClient(connection);
- await client.connect();
+ const client = await newPostgresClient(connection);
await client.end();
return true;
};
-const execute = async (
- connection: Connection,
- databaseName: string,
- statement: string
-): Promise => {
+const execute = async (connection: Connection, databaseName: string, statement: string): Promise => {
connection.database = databaseName;
- const client = newPostgresClient(connection);
- await client.connect();
+ const client = await newPostgresClient(connection);
const { rows, rowCount } = await client.query(statement);
await client.end();
@@ -50,8 +74,7 @@ const execute = async (
};
const getDatabases = async (connection: Connection): Promise => {
- const client = newPostgresClient(connection);
- await client.connect();
+ const client = await newPostgresClient(connection);
if (connection.database) {
await client.end();
return [connection.database];
@@ -69,118 +92,58 @@ const getDatabases = async (connection: Connection): Promise => {
return databaseList;
};
-const getTables = async (
- connection: Connection,
- databaseName: string
-): Promise => {
+const getTableSchema = async (connection: Connection, databaseName: string): Promise => {
connection.database = databaseName;
- const client = newPostgresClient(connection);
- await client.connect();
+ const client = await newPostgresClient(connection);
const { rows } = await client.query(
- `SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE' AND table_catalog=$1;`,
+ `SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN (${systemSchemas}) AND table_name NOT IN (${systemTables}) AND (table_type='BASE TABLE' or table_type='VIEW') AND table_catalog=$1;`,
[databaseName]
);
- await client.end();
- const tableList = [];
+
+ const schemaList: Schema[] = [];
for (const row of rows) {
if (row["table_name"]) {
- tableList.push(row["table_name"]);
+ const schema = schemaList.find((schema) => schema.name === row["table_schema"]);
+ if (schema) {
+ schema.tables.push({ name: row["table_name"] as string, structure: "" } as Table);
+ } else {
+ schemaList.push({
+ name: row["table_schema"],
+ tables: [{ name: row["table_name"], structure: "" } as Table],
+ });
+ }
}
}
- return tableList;
-};
-const getTableStructure = async (
- connection: Connection,
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- connection.database = databaseName;
- const client = newPostgresClient(connection);
- await client.connect();
- const { rows } = await client.query(
- `SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema='public' AND table_name=$1;`,
- [tableName]
- );
- await client.end();
- const columnList = [];
- // TODO(steven): transform it to standard schema string.
- for (const row of rows) {
- columnList.push(
- `${row["column_name"]} ${row["data_type"].toUpperCase()} ${
- String(row["is_nullable"]).toUpperCase() === "NO" ? "NOT NULL" : ""
- }`
- );
- }
- structureFetched(
- tableName,
- `CREATE TABLE \`${tableName}\` (
- ${columnList.join(",\n")}
- );`
- );
-};
-
-const getTableStructureBatch = async (
- connection: Connection,
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
-): Promise => {
- connection.database = databaseName;
- const client = newPostgresClient(connection);
- await client.connect();
- await Promise.all(
- tableNameList.map(async (tableName) => {
- const { rows } = await client.query(
- `SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema='public' AND table_name=$1;`,
- [tableName]
+ for (const schema of schemaList) {
+ for (const table of schema.tables) {
+ const { rows: result } = await client.query(
+ `SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema NOT IN (${systemSchemas}) AND table_name=$1 AND table_schema=$2;`,
+ [table.name, schema.name]
);
const columnList = [];
// TODO(steven): transform it to standard schema string.
- for (const row of rows) {
+ for (const row of result) {
columnList.push(
- `${row["column_name"]} ${row["data_type"].toUpperCase()} ${
- String(row["is_nullable"]).toUpperCase() === "NO" ? "NOT NULL" : ""
- }`
+ `${row["column_name"]} ${row["data_type"].toUpperCase()} ${String(row["is_nullable"]).toUpperCase() === "NO" ? "NOT NULL" : ""}`
);
}
- structureFetched(
- tableName,
- `CREATE TABLE \`${tableName}\` (
- ${columnList.join(",\n")}
- );`
- );
- })
- ).finally(async () => {
- await client.end();
- });
+
+ let fullTableName = schema.name == "public" ? `"${table.name}"` : `"${schema.name}"."${table.name}"`;
+ table.structure = `CREATE TABLE ${fullTableName} (\n${columnList.join(",\n")}\n);`;
+ }
+ }
+
+ await client.end();
+ return schemaList;
};
const newConnector = (connection: Connection): Connector => {
return {
testConnection: () => testConnection(connection),
- execute: (databaseName: string, statement: string) =>
- execute(connection, databaseName, statement),
+ execute: (databaseName: string, statement: string) => execute(connection, databaseName, statement),
getDatabases: () => getDatabases(connection),
- getTables: (databaseName: string) => getTables(connection, databaseName),
- getTableStructure: (
- databaseName: string,
- tableName: string,
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructure(connection, databaseName, tableName, structureFetched),
- getTableStructureBatch: (
- databaseName: string,
- tableNameList: string[],
- structureFetched: (tableName: string, structure: string) => void
- ) =>
- getTableStructureBatch(
- connection,
- databaseName,
- tableNameList,
- structureFetched
- ),
+ getTableSchema: (databaseName: string) => getTableSchema(connection, databaseName),
};
};
diff --git a/src/locales/de.json b/src/locales/de.json
deleted file mode 100644
index 1387649e..00000000
--- a/src/locales/de.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "common": {
- "clear": "Löschen",
- "close": "Schließen",
- "confirm": "Bestätigen",
- "save": "Speichern",
- "edit": "Bearbeiten",
- "loading": "Laden",
- "setting": "Einstellung",
- "copy": "Kopieren",
- "delete": "Löschen",
- "execute": "Ausführen",
- "sign-in": "Anmelden",
- "sign-out": "Austragen",
- "back": "Zurückkehren",
- "quota": "Quote"
- },
- "conversation": {
- "new-chat": "Neuer Chat",
- "conversation-title": "Titel des Gesprächs",
- "update": "Gespräch aktualisieren",
- "title": "Titel"
- },
- "connection": {
- "self": "Verbindung",
- "new": "Verbindung erstellen",
- "edit": "Verbindung bearbeiten",
- "select-database": "Wählen Sie Ihre Datenbank aus",
- "database-type": "Datenbanktyp",
- "title": "Titel",
- "host": "Host",
- "port": "Port",
- "database-name": "Datenbankname",
- "username": "Benutzername",
- "password": "Passwort"
- },
- "assistant": {
- "self": "Bot",
- "create-your-bot": "Sie finden den benötigten Bot nicht? Erstellen Sie einen"
- },
- "execution": {
- "title": "SQL ausführen",
- "message": {
- "executing": "Abfrage wird ausgeführt...",
- "no-connection": "Keine Verbindung ausgewählt",
- "no-data": "Keine Daten zurückgegeben"
- }
- },
- "editor": {
- "placeholder": "Geben Sie hier Ihre Frage ein..."
- },
- "setting": {
- "self": "Einstellung",
- "general": "Allgemein",
- "plan": {
- "free": "Frei",
- "pro": "Profi",
- "signup-for-more": "Melden Sie sich für mehr an",
- "upgrade": "Aktualisierung"
- },
- "billing": {
- "self": "Abrechnung"
- },
- "account": {
- "self": "Konto"
- },
- "basic": {
- "self": "Grundlegend",
- "language": "Sprache"
- },
- "theme": {
- "self": "Thema",
- "system": "System folgen",
- "light": "Hell",
- "dark": "Dunkel"
- },
- "openai-api-configuration": {
- "self": "OpenAI API-Konfiguration"
- },
- "data": {
- "self": "Daten",
- "clear-all-data": "Alle Daten löschen"
- }
- },
- "social": {
- "join-discord-channel": "Discord-Kanal beitreten",
- "join-wechat-group": "WeChat-Gruppe beitreten"
- },
- "banner": {
- "data-storage": "Verbindungseinstellungen werden in Ihrem lokalen Browser gespeichert",
- "non-select-sql-warning": "Die aktuelle Anweisung kann eine nicht-SELECT SQL-Anweisung sein, die zu einer Änderung des Datenbankschemas oder der Daten führen wird. Stellen Sie sicher, dass Sie wissen, was Sie tun.",
- "product-hunt": "🚀🚀🚀 Wir haben gerade auf Product Hunt gestartet, bitte geben Sie uns eine Stimme! 🚀🚀🚀"
- },
- "payment": {
- "self": "Zahlung"
- }
-}
diff --git a/src/locales/en.json b/src/locales/en.json
index b51aa073..10530504 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -9,11 +9,14 @@
"setting": "Setting",
"copy": "Copy",
"delete": "Delete",
- "execute": "Execute",
+ "run-sql": "Run SQL",
"sign-in": "Sign in",
"sign-out": "Sign out",
"back": "Back",
- "quota": "Quota"
+ "quota": "Monthly Quota",
+ "date": "Date",
+ "description": "Description",
+ "amount": "Amount"
},
"conversation": {
"new-chat": "New Chat",
@@ -25,16 +28,26 @@
"self": "Connection",
"new": "Create Connection",
"edit": "Edit Connection",
+ "refresh-schema": "Refresh Schema",
"select-database": "Select your database",
"select-table": "Select your table",
- "all-tables":"All Tables",
+ "select-schema": "Select your Schema",
+ "all-tables": "All Tables",
+ "total-token": "Tokens",
"database-type": "Database type",
"title": "Title",
"host": "Host",
"port": "Port",
"database-name": "Database name",
"username": "Username",
- "password": "Password"
+ "password": "Password",
+ "empty-select": "clear selection",
+ "select-all": "select all",
+ "tidb-serverless-ssl-hint": "SSL is enabled by default"
+ },
+ "prompt": {
+ "self": "Prompt",
+ "current-conversation": "Current conversation prompt"
},
"assistant": {
"self": "Bot",
@@ -55,15 +68,23 @@
"self": "Setting",
"general": "General",
"plan": {
+ "guest": "Guest",
"free": "Free",
"pro": "Pro",
+ "pro-early-bird": "🐤 Early Bird - Pro 50% OFF",
"signup-for-more": "Sign up for more",
"upgrade": "Upgrade",
- "pro-question-per-month": "1000 questions / month",
- "early-bird-checkout": "Early bird discount, 50% off for 1 year"
+ "renew": "Renew",
+ "expired": "Expired",
+ "n-question-per-month": "{{count}} quota / month",
+ "1-month": "1 month",
+ "n-months": "{{count}} months",
+ "purhcase-1-month": "Purchase 1 month",
+ "purhcase-n-months": "Purchase {{count}} months"
},
- "billing": {
- "self": "Billing"
+ "subscription": {
+ "self": "Subscription",
+ "view-receipt": "View receipt"
},
"account": {
"self": "Account"
@@ -79,7 +100,13 @@
"dark": "Dark"
},
"openai-api-configuration": {
- "self": "OpenAI API configuration"
+ "self": "OpenAI API configuration",
+ "model": "Model",
+ "model-description": "Quota won't be consumed if you provide your own key below.",
+ "quota-per-ask": "{{count}} quota per ask",
+ "key-description": "Bring your own key to waive quota requirement.",
+ "find-my-key": "Find my key",
+ "endpoint-description": "Optional endpoint pointing to your own compatible server or gateway."
},
"data": {
"self": "Data",
@@ -99,6 +126,6 @@
},
"payment": {
"self": "Payment",
- "login-to-buy": "Login to buy"
+ "sign-in-to-buy": "Sign in to buy"
}
}
diff --git a/src/locales/es.json b/src/locales/es.json
index f59fe1b9..baead01d 100644
--- a/src/locales/es.json
+++ b/src/locales/es.json
@@ -9,15 +9,18 @@
"setting": "Configuración",
"copy": "Copiar",
"delete": "Borrar",
+ "run-sql": "Ejecutar SQL",
"sign-in": "Iniciar sesión",
"sign-out": "Desconectar",
- "back": "Devolver",
- "quota": "Cuota",
- "execute": "Ejecutar"
+ "back": "Volver",
+ "quota": "Cuota Mensual",
+ "date": "Fecha",
+ "description": "Descripción",
+ "amount": "Cantidad"
},
"conversation": {
"new-chat": "Nuevo Chat",
- "conversation-title": "Titulo de conversación",
+ "conversation-title": "Título de la conversación",
"update": "Actualizar conversación",
"title": "Titulo"
},
@@ -25,6 +28,7 @@
"self": "Conexión",
"new": "Crear Conexión",
"edit": "Editar Conexión",
+ "refresh-schema": "Actualizar Esquema",
"select-database": "Selecciona tu base de datos",
"database-type": "Tipo de Base de Datos",
"title": "Nombre",
@@ -32,7 +36,18 @@
"port": "Puerto",
"database-name": "Nombre de Base de Datos",
"username": "Usuario",
- "password": "Contraseña"
+ "password": "Contraseña",
+ "empty-select": "limpiar selección",
+ "select-all": "seleccionar todo",
+ "total-token": "Tokens",
+ "tidb-serverless-ssl-hint": "SSL está habilitado de forma predeterminada",
+ "select-table": "Selecciona tu tabla",
+ "select-schema": "Selecciona tu Esquema",
+ "all-tables": "Todas las Tablas"
+ },
+ "prompt": {
+ "view": "Prompt",
+ "current-conversation": "Mensaje de conversación actual"
},
"assistant": {
"self": "Bot",
@@ -53,13 +68,23 @@
"self": "Configuración",
"general": "General",
"plan": {
+ "guest": "Invitado",
"free": "Gratis",
"pro": "Pro",
+ "pro-early-bird": "🐤 Early Bird - Pro 50% de descuento",
"signup-for-more": "Regístrese para obtener más",
- "upgrade": "Mejora"
+ "upgrade": "Mejora",
+ "renew": "Renovar",
+ "expired": "Expirado",
+ "n-question-per-month": "{{count}} Cuota / mes",
+ "1-month": "1 mes",
+ "n-months": "{{count}} meses",
+ "purhcase-1-month": "Comprar 1 mes",
+ "purhcase-n-months": "Comprar {{count}} meses"
},
- "billing": {
- "self": "Facturación"
+ "subscription": {
+ "self": "Suscripción",
+ "view-receipt": "Ver recibo"
},
"account": {
"self": "Cuenta"
@@ -75,7 +100,12 @@
"dark": "Oscuro"
},
"openai-api-configuration": {
- "self": "Configuración del API de OpenAI"
+ "self": "Configuración del API de OpenAI",
+ "model": "Modelo",
+ "model-description": "La cuota no se consumirá si proporciona su propia clave a continuación.",
+ "key-description": "Indique su propia clave para retirarse del límite por cuota.",
+ "find-my-key": "Encuentra mi llave",
+ "endpoint-description": "Endpoint opcional que apunta a su propio servidor o gateway compatible."
},
"data": {
"self": "Datos",
@@ -87,13 +117,14 @@
"join-wechat-group": "Unirse al grupo de WeChat"
},
"banner": {
- "data-storage": "Las configuraciones de conexión y las consultas se almacenan en tu navegador.",
+ "data-storage": "Las configuraciones de conexión y las consultas se almacenan en tu navegador",
"non-select-sql-warning": "La declaración actual puede no ser SELECT SQL, lo que dará como resultado un esquema de base de datos o un cambio de datos. Asegúrate de saber lo que estás haciendo.",
- "product-hunt": "🚀🚀🚀 Acabamos de lanzar en Product Hunt, ¡por favor, vota por nosotros! 🚀🚀🚀"
+ "product-hunt": "🚀🚀🚀 Acabamos de lanzar en Product Hunt, ¡por favor, vota por nosotros! 🚀🚀🚀",
+ "quota-overflow": "Cuota excedida. Proporcione su propia clave API de OpenAI.",
+ "use-my-key": "Usar mi propia clave"
},
"payment": {
"self": "Pago",
- "quota-overflow": "Cuota excedida. Proporcione su propia clave API de OpenAI.",
- "use-my-key": "Usar mi propia clave"
+ "sign-in-to-buy": "Inicia sesión para comprar"
}
}
diff --git a/src/locales/i18n.ts b/src/locales/i18n.ts
index 5bc9febb..3c4fd4bf 100644
--- a/src/locales/i18n.ts
+++ b/src/locales/i18n.ts
@@ -2,11 +2,7 @@ import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import enLocale from "./en.json";
import zhLocale from "./zh.json";
-import zhHant from "./zh-Hant.json";
import esLocale from "./es.json";
-import jpLocale from "./jp.json";
-import deLocale from "./de.json";
-import thLocale from "./th.json";
i18n.use(initReactI18next).init({
resources: {
@@ -16,21 +12,9 @@ i18n.use(initReactI18next).init({
zh: {
translation: zhLocale,
},
- zhHant: {
- translation: zhHant,
- },
es: {
translation: esLocale,
},
- jp: {
- translation: jpLocale,
- },
- de: {
- translation: deLocale,
- },
- th: {
- translation: thLocale,
- },
},
fallbackLng: "en",
});
diff --git a/src/locales/jp.json b/src/locales/jp.json
deleted file mode 100644
index 2ec08d83..00000000
--- a/src/locales/jp.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "common": {
- "clear": "クリア",
- "close": "閉じる",
- "confirm": "確認",
- "save": "保存",
- "edit": "編集",
- "loading": "読み込み中",
- "setting": "設定",
- "copy": "コピー",
- "delete": "削除",
- "execute": "実行",
- "sign-in": "ログイン",
- "sign-out": "サインアウト",
- "back": "戻る",
- "quota": "クォータ"
- },
- "conversation": {
- "new-chat": "新しいチャット",
- "conversation-title": "会話タイトル",
- "update": "会話を更新",
- "title": "タイトル"
- },
- "connection": {
- "self": "接続",
- "new": "接続を作成",
- "edit": "接続を編集",
- "select-database": "データベースを選択",
- "database-type": "データベースタイプ",
- "title": "タイトル",
- "host": "ホスト",
- "port": "ポート",
- "database-name": "データベース名",
- "username": "ユーザー名",
- "password": "パスワード"
- },
- "assistant": {
- "self": "ボット",
- "create-your-bot": "必要なボットが見つからない場合は、作成してください"
- },
- "execution": {
- "title": "SQLを実行",
- "message": {
- "executing": "クエリを実行中...",
- "no-connection": "接続が選択されていません",
- "no-data": "データが返されませんでした"
- }
- },
- "editor": {
- "placeholder": "ここに質問を入力してください..."
- },
- "setting": {
- "self": "設定",
- "general": "全般的",
- "plan": {
- "free": "無料版",
- "pro": "プロ",
- "signup-for-more": "サインアップしてもっと",
- "upgrade": "アップグレード"
- },
- "billing": {
- "self": "請求する"
- },
- "account": {
- "self": "アカウント"
- },
- "basic": {
- "self": "基本",
- "language": "言語"
- },
- "theme": {
- "self": "テーマ",
- "system": "システムに従う",
- "light": "ライト",
- "dark": "ダーク"
- },
- "openai-api-configuration": {
- "self": "OpenAI APIの設定"
- },
- "data": {
- "self": "データ",
- "clear-all-data": "すべてのデータをクリア"
- }
- },
- "social": {
- "join-discord-channel": "Discordチャンネルに参加",
- "join-wechat-group": "WeChatグループに参加"
- },
- "banner": {
- "data-storage": "接続設定はローカルブラウザに保存されます",
- "non-select-sql-warning": "現在のステートメントは非SELECT SQLである可能性があり、データベースのスキーマまたはデータの変更につながる可能性があります。自分が何をしているか確認してください。",
- "product-hunt": "🚀🚀🚀 Product Huntでローンチしました。投票してください! 🚀🚀🚀"
- },
- "payment": {
- "self": "支払い"
- }
-}
diff --git a/src/locales/th.json b/src/locales/th.json
deleted file mode 100644
index 9dd9abab..00000000
--- a/src/locales/th.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "common": {
- "clear": "ล้าง",
- "close": "ปิด",
- "confirm": "ยืนยัน",
- "save": "บันทึก",
- "edit": "แก้ไข",
- "loading": "กำลังโหลด",
- "setting": "ตั้งค่า",
- "copy": "คัดลอก",
- "delete": "ลบ",
- "execute": "ดำเนินการ",
- "sign-in": "เข้าสู่ระบบ",
- "sign-out": "ออกจากระบบ",
- "back": "กลับ",
- "quota": "โควต้า"
- },
- "conversation": {
- "new-chat": "แชทใหม่",
- "conversation-title": "หัวข้อการสนทนา",
- "update": "อัปเดตการสนทนา",
- "title": "หัวข้อ"
- },
- "connection": {
- "self": "การเชื่อมต่อ",
- "new": "สร้างการเชื่อมต่อ",
- "edit": "แก้ไขการเชื่อมต่อ",
- "select-database": "เลือกฐานข้อมูลของคุณ",
- "database-type": "ประเภทฐานข้อมูล",
- "title": "หัวข้อ",
- "host": "โฮสต์",
- "port": "พอร์ต",
- "database-name": "ชื่อฐานข้อมูล",
- "username": "ชื่อผู้ใช้",
- "password": "รหัสผ่าน"
- },
- "assistant": {
- "self": "บอท",
- "create-your-bot": "ไม่พบบอทที่คุณต้องการ? สร้างใหม่"
- },
- "execution": {
- "title": "ดำเนินการ SQL",
- "message": {
- "executing": "กำลังดำเนินการคำสั่ง...",
- "no-connection": "ไม่ได้เลือกการเชื่อมต่อ",
- "no-data": "ไม่มีข้อมูลที่ส่งกลับ"
- }
- },
- "editor": {
- "placeholder": "กรอกคำถามของคุณที่นี่..."
- },
- "setting": {
- "self": "ตั้งค่า",
- "general": "ทั่วไป",
- "plan": {
- "free": "รุ่นฟรี",
- "pro": "รุ่นมืออาชีพ",
- "signup-for-more": "ลงทะเบียนเพื่อรับข้อมูลเพิ่มเติม",
- "upgrade": "อัปเกรด"
- },
- "billing": {
- "self": "การเรียกเก็บเงิน"
- },
- "account": {
- "self": "บัญชี"
- },
- "basic": {
- "self": "พื้นฐาน",
- "language": "ภาษา"
- },
- "theme": {
- "self": "ธีม",
- "system": "ตามระบบ",
- "light": "สว่าง",
- "dark": "เข้ม"
- },
- "openai-api-configuration": {
- "self": "การกำหนดค่า OpenAI API"
- },
- "data": {
- "self": "ข้อมูล",
- "clear-all-data": "ลบข้อมูลทั้งหมด"
- }
- },
- "social": {
- "join-discord-channel": "เข้าร่วมช่อง Discord",
- "join-wechat-group": "เข้าร่วมกลุ่ม WeChat"
- },
- "banner": {
- "data-storage": "การตั้งค่าการเชื่อมต่อจะถูกเก็บไว้ในเบราว์เซอร์ของคุณ",
- "non-select-sql-warning": "คำสั่งปัจจุบันอาจเป็นคำสั่ง SQL ที่ไม่ใช่ SELECT ซึ่งจะทำให้เกิดการเปลี่ยนแปลงโครงสร้างฐานข้อมูลหรือข้อมูล โปรดตรวจสอบว่าคุณรู้ว่าตัวเองกำลังทำอะไร",
- "product-hunt": "🚀🚀🚀 เราเพิ่งเปิดตัวบน Product Hunt โปรดโหวตเรา! 🚀🚀🚀"
- },
- "payment": {
- "self": "การชำระเงิน"
- }
-}
diff --git a/src/locales/zh-Hant.json b/src/locales/zh-Hant.json
deleted file mode 100644
index 925d35fc..00000000
--- a/src/locales/zh-Hant.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "common": {
- "clear": "清除",
- "close": "關閉",
- "confirm": "確認",
- "save": "儲存",
- "edit": "編輯",
- "loading": "載入中",
- "setting": "設定",
- "copy": "複製",
- "delete": "刪除",
- "execute": "執行",
- "sign-in": "登錄",
- "sign-out": "登出",
- "back": "返回",
- "quota": "額度"
- },
- "conversation": {
- "new-chat": "新聊天",
- "conversation-title": "對話標題",
- "update": "更新對話",
- "title": "標題"
- },
- "connection": {
- "self": "連線",
- "new": "建立連線",
- "edit": "編輯連線",
- "select-database": "選擇您的資料庫",
- "select-table": "選擇您的資料",
- "all-tables":"全部表",
- "database-type": "資料庫類型",
- "title": "標題",
- "host": "主機",
- "port": "埠號",
- "database-name": "資料庫名稱",
- "username": "使用者名稱",
- "password": "密碼"
- },
- "assistant": {
- "self": "機器人",
- "create-your-bot": "找不到您需要的機器人?建立一個"
- },
- "execution": {
- "title": "執行 SQL",
- "message": {
- "executing": "正在執行查詢...",
- "no-connection": "未選擇連線",
- "no-data": "未返回任何資料"
- }
- },
- "editor": {
- "placeholder": "在此輸入您的問題..."
- },
- "setting": {
- "self": "設定",
- "general": "通用",
- "plan": {
- "free": "免費版",
- "pro": "專業版",
- "signup-for-more": "注册提升额度",
- "upgrade": "升級",
- "pro-question-per-month": "1000 次提問 / 月",
- "early-bird-checkout": "早鳥優惠,5 折購買 1 年"
- },
- "billing": {
- "self": "计费"
- },
- "account": {
- "self": "賬戶"
- },
- "basic": {
- "self": "基本",
- "language": "語言"
- },
- "theme": {
- "self": "主題",
- "system": "跟隨系統",
- "light": "亮色",
- "dark": "暗色"
- },
- "openai-api-configuration": {
- "self": "OpenAI API 設定"
- },
- "data": {
- "self": "資料",
- "clear-all-data": "清除所有資料"
- }
- },
- "social": {
- "join-discord-channel": "加入 Discord 頻道",
- "join-wechat-group": "加入微信群組"
- },
- "banner": {
- "data-storage": "連線設定儲存在您的本地瀏覽器中",
- "non-select-sql-warning": "當前語句可能是非 SELECT SQL 語句,這將導致資料庫結構或資料的更改。請確保您知道自己在做什麼。",
- "product-hunt": "🚀🚀🚀 我們剛在 Product Hunt 上推出,請給我們一個投票!🚀🚀🚀",
- "quota-overflow": "我們的 OpenAI 額度已用完,請提供您自己的 OpenAI API key。",
- "use-my-key": "提供我自己的 key"
- },
- "payment": {
- "self": "支付",
- "login-to-buy": "登陸後購買"
- }
-}
diff --git a/src/locales/zh.json b/src/locales/zh.json
index 85220764..4a1c844e 100644
--- a/src/locales/zh.json
+++ b/src/locales/zh.json
@@ -9,11 +9,14 @@
"setting": "设置",
"copy": "复制",
"delete": "删除",
- "execute": "执行",
+ "run-sql": "运行 SQL",
"sign-in": "登录",
"sign-out": "登出",
"back": "返回",
- "quota": "额度"
+ "quota": "每月额度",
+ "date": "日期",
+ "description": "描述",
+ "amount": "金额"
},
"conversation": {
"new-chat": "新建会话",
@@ -25,16 +28,26 @@
"self": "连接",
"new": "创建连接",
"edit": "编辑连接",
+ "refresh-schema": "刷新 Schema",
"select-database": "选择数据库",
"select-table": "选择数据表",
- "all-tables":"全部表",
+ "select-schema": "选择 Schema",
+ "all-tables": "全部表",
+ "select-all": "选择全部",
+ "total-token": "Token",
+ "empty-select": "清空选择",
"database-type": "数据库类型",
"title": "标题",
"host": "主机",
"port": "端口",
"database-name": "数据库",
"username": "用户名",
- "password": "密码"
+ "password": "密码",
+ "tidb-serverless-ssl-hint": "SSL 默认已开启"
+ },
+ "prompt": {
+ "view": "提示词",
+ "current-conversation": "当前会话的提示词"
},
"assistant": {
"self": "机器人",
@@ -55,15 +68,23 @@
"self": "设置",
"general": "通用",
"plan": {
+ "guest": "访客",
"free": "免费版",
"pro": "专业版",
- "signup-for-more": "注册提升额度",
+ "pro-early-bird": "🐤 早鸟优惠 - 专业版 5 折",
+ "signup-for-more": "注册获得额度",
"upgrade": "升级",
- "pro-question-per-month": "1000 次提问 / 月",
- "early-bird-checkout": "早鸟优惠,5 折购买 1 年"
+ "renew": "续费",
+ "expired": "已过期",
+ "n-question-per-month": "{{count}} 点额度 / 月",
+ "1-month": "1 个月",
+ "n-months": "{{count}} 个月",
+ "purhcase-1-month": "购买 1 个月",
+ "purhcase-n-months": "购买 {{count}} 个月"
},
- "billing": {
- "self": "计费"
+ "subscription": {
+ "self": "订阅",
+ "view-receipt": "查看收据"
},
"account": {
"self": "账户"
@@ -79,7 +100,13 @@
"dark": "深色"
},
"openai-api-configuration": {
- "self": "OpenAI API 配置"
+ "self": "OpenAI API 配置",
+ "model": "模型",
+ "model-description": "如果您提供自己的 key,额度是不会消耗的。",
+ "quota-per-ask": "每一个提问消耗 {{count}} 点额度",
+ "find-my-key": "找到我的 Key",
+ "key-description": "一旦您提供了自己的 key,额度就不受限制了。",
+ "endpoint-description": "可选的 endpoint 指向接口兼容的服务器或者网关。"
},
"data": {
"self": "数据",
@@ -99,6 +126,6 @@
},
"payment": {
"self": "支付",
- "login-to-buy": "登陆后购买"
+ "sign-in-to-buy": "登录后购买"
}
}
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index 9f3f58b1..3dfb690f 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -7,6 +7,7 @@ import React, { useEffect } from "react";
import { Toaster } from "react-hot-toast";
import { useTranslation } from "react-i18next";
import { useSettingStore } from "@/store";
+import { hasDatabase } from "@/utils";
dayjs.extend(localizedFormat);
import "dayjs/locale/zh";
@@ -19,13 +20,14 @@ import "@/styles/mui.css";
import type { Session } from "next-auth";
-function MyApp({
- Component,
- pageProps: { session, ...pageProps },
-}: AppProps<{ session: Session }>) {
+function MyApp({ Component, pageProps: { session, ...pageProps } }: AppProps<{ session: Session }>) {
const { i18n } = useTranslation();
const settingStore = useSettingStore();
+ // Check whether those NEXT_PUBLIC_ envs are properly exposed in frontend.
+ // See https://github.com/vercel/next.js/discussions/17641
+ console.log("Has database:", hasDatabase());
+
useEffect(() => {
const darkMediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
const handleColorSchemeChange = (e: MediaQueryListEvent) => {
@@ -58,10 +60,7 @@ function MyApp({
const theme = settingStore.setting.theme;
let currentAppearance = theme;
if (theme === "system") {
- if (
- window.matchMedia &&
- window.matchMedia("(prefers-color-scheme: dark)").matches
- ) {
+ if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) {
currentAppearance = "dark";
} else {
currentAppearance = "light";
diff --git a/src/pages/api/auth/[...nextauth].ts b/src/pages/api/auth/[...nextauth].ts
index aecf440f..c41e4d23 100644
--- a/src/pages/api/auth/[...nextauth].ts
+++ b/src/pages/api/auth/[...nextauth].ts
@@ -4,29 +4,52 @@ import GoogleProvider from "next-auth/providers/google";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import EmailProvider from "next-auth/providers/email";
import { PrismaClient } from "@prisma/client";
+import { getSubscriptionByEmail } from "../utils/subscription";
+import { hasFeature } from "@/utils";
const prisma = new PrismaClient();
// For more information on each option (and a full list of options) go to
// https://next-auth.js.org/configuration/options
export const authOptions: NextAuthOptions = {
- adapter: PrismaAdapter(prisma),
+ adapter: hasFeature("account") ? PrismaAdapter(prisma) : undefined,
// https://next-auth.js.org/configuration/providers/oauth
- providers: [
- EmailProvider({
- server: process.env.EMAIL_SERVER,
- from: "noreply@sqlchat.ai",
- // maxAge: 24 * 60 * 60, // How long email links are valid for (default 24h)
- }),
- GoogleProvider({
- clientId: process.env.GOOGLE_CLIENT_ID,
- clientSecret: process.env.GOOGLE_CLIENT_SECRET,
- }),
- GithubProvider({
- clientId: process.env.GITHUB_ID,
- clientSecret: process.env.GITHUB_SECRET,
- }),
- ],
+ providers: hasFeature("account")
+ ? [
+ EmailProvider({
+ server: process.env.EMAIL_SERVER,
+ from: process.env.EMAIL_FROM || "noreply@sqlchat.ai",
+ // maxAge: 24 * 60 * 60, // How long email links are valid for (default 24h)
+ }),
+ GoogleProvider({
+ clientId: process.env.GOOGLE_CLIENT_ID,
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
+ }),
+ GithubProvider({
+ clientId: process.env.GITHUB_ID,
+ clientSecret: process.env.GITHUB_SECRET,
+ }),
+ ]
+ : [],
+ cookies: {
+ sessionToken: {
+ name: `next-auth.session-token`,
+ options: {
+ httpOnly: true,
+ sameSite: "lax",
+ path: "/",
+ secure: true,
+ },
+ },
+ },
+ callbacks: {
+ async session({ session, user }) {
+ session.user.id = user.id;
+ session.user.subscription = await getSubscriptionByEmail(user.email);
+ session.user.stripeId = user.stripeId;
+ return session;
+ },
+ },
theme: {
brandColor: "#4F46E5",
logo: "/chat-logo.webp",
diff --git a/src/pages/api/auth/end-user.ts b/src/pages/api/auth/end-user.ts
index 4262b310..3b8ece94 100644
--- a/src/pages/api/auth/end-user.ts
+++ b/src/pages/api/auth/end-user.ts
@@ -1,16 +1,35 @@
+import { PrismaClient } from "@prisma/client";
import { NextApiRequest, NextApiResponse } from "next";
import { getServerSession } from "next-auth/next";
-import { authOptions } from "./[...nextauth]";
import requestIp from "request-ip";
+import { authOptions } from "./[...nextauth]";
+
+const prisma = new PrismaClient();
// Returns the login user email or the client IP address
-export const getEndUser = async (
- req: NextApiRequest,
- res: NextApiResponse
-): Promise => {
- const session = await getServerSession(req, res, authOptions);
- if (session?.user?.email) {
- return session.user.email;
+export const getEndUser = async (req: NextApiRequest, res: NextApiResponse): Promise => {
+ // Get from server session if available
+ const serverSession = await getServerSession(req, res, authOptions);
+ if (serverSession?.user?.email) {
+ return serverSession.user.email;
}
+
+ // Get from session token if available
+ const token = req.headers.authorization?.substring(7);
+ if (token) {
+ const sessionInDb = await prisma.session.findUnique({
+ where: { sessionToken: token },
+ });
+ if (sessionInDb?.userId) {
+ const user = await prisma.user.findUnique({
+ where: { id: sessionInDb.userId },
+ });
+ if (user?.email) {
+ return user.email;
+ }
+ }
+ }
+
+ // Get from client IP address
return requestIp.getClientIp(req) || "";
};
diff --git a/src/pages/api/auth/quota.ts b/src/pages/api/auth/quota.ts
deleted file mode 100644
index 2e856eb8..00000000
--- a/src/pages/api/auth/quota.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { PrismaClient } from "@prisma/client";
-import { NextApiRequest, NextApiResponse } from "next";
-import { getServerSession } from "next-auth/next";
-import { authOptions } from "./[...nextauth]";
-import { getEndUser } from "./end-user";
-import { Quota, GUEST_QUOTA, FREE_QUOTA } from "@/types";
-
-const prisma = new PrismaClient();
-
-export const checkQuota = async (
- req: NextApiRequest,
- res: NextApiResponse
-): Promise => {
- const quota = await getQuota(req, res);
- return quota.current <= quota.limit;
-};
-
-export const getQuota = async (
- req: NextApiRequest,
- res: NextApiResponse
-): Promise => {
- const endUser = await getEndUser(req, res);
- const session = await getServerSession(req, res, authOptions);
- return {
- current: await prisma.message.count({
- where: {
- endUser: endUser,
- role: "user",
- },
- }),
- limit: session ? FREE_QUOTA : GUEST_QUOTA,
- };
-};
diff --git a/src/pages/api/chat.ts b/src/pages/api/chat.ts
index 233ca1f6..4919e952 100644
--- a/src/pages/api/chat.ts
+++ b/src/pages/api/chat.ts
@@ -1,12 +1,8 @@
-import {
- createParser,
- ParsedEvent,
- ReconnectInterval,
-} from "eventsource-parser";
+import { createParser, ParsedEvent, ReconnectInterval } from "eventsource-parser";
import { NextRequest } from "next/server";
-import { API_KEY } from "@/env";
-import { openAIApiEndpoint, openAIApiKey, gpt35 } from "@/utils";
+import { openAIApiEndpoint, openAIApiKey, openAIOrganization, hasFeature, getModel } from "@/utils";
+// Needs Edge for streaming response.
export const config = {
runtime: "edge",
};
@@ -18,51 +14,115 @@ const getApiEndpoint = (apiEndpoint: string) => {
};
const handler = async (req: NextRequest) => {
- if (API_KEY) {
- const auth = req.headers.get("Authorization");
- if (!auth || auth !== `Bearer ${API_KEY}`) {
- return new Response("Unauthorized", {
+ const reqBody = await req.json();
+ const apiKey = req.headers.get("x-openai-key") || openAIApiKey;
+
+ if (!apiKey) {
+ return new Response(
+ JSON.stringify({
+ error: {
+ message: "OpenAI API Key is missing. You can supply your own key via [Setting](/setting).",
+ },
+ }),
+ {
+ headers: {
+ "Content-Type": "application/json",
+ },
status: 401,
+ }
+ );
+ }
+
+ const useServerKey = !req.headers.get("x-openai-key");
+ const sessionToken = req.cookies.get("next-auth.session-token")?.value;
+ const currentUrl = new URL(req.url);
+ const usageUrl = new URL(currentUrl.protocol + "//" + currentUrl.host + "/api/usage");
+ const requestHeaders: any = {
+ Authorization: `Bearer ${sessionToken}`,
+ };
+ if (req.headers.get("x-openai-model")) {
+ // Pass model to usage API to calculate usage
+ requestHeaders["x-openai-model"] = req.headers.get("x-openai-model");
+ }
+
+ if (useServerKey) {
+ if (hasFeature("account") && !sessionToken) {
+ return new Response(
+ JSON.stringify({
+ error: {
+ message: "Please sign up to get free quota.",
+ },
+ }),
+ {
+ headers: {
+ "Content-Type": "application/json",
+ },
+ status: 401,
+ }
+ );
+ }
+
+ if (hasFeature("quota")) {
+ const usageRes = await fetch(usageUrl, {
+ method: "GET",
+ headers: requestHeaders,
});
+ if (!usageRes.ok) {
+ return new Response(usageRes.body, {
+ status: 500,
+ statusText: usageRes.statusText,
+ });
+ }
+
+ const usage = await usageRes.json();
+ if (usage.current >= usage.limit) {
+ return new Response(
+ JSON.stringify({
+ error: {
+ message: `You have reached your monthly quota: ${usage.current}/${usage.limit}.`,
+ },
+ }),
+ {
+ headers: {
+ "Content-Type": "application/json",
+ },
+ status: 401,
+ }
+ );
+ }
}
}
- const reqBody = await req.json();
- const openAIApiConfig = reqBody.openAIApiConfig;
- const apiKey = openAIApiConfig?.key || openAIApiKey;
+ let headers: { [key: string]: string } = {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${apiKey}`,
+ };
- if (!apiKey) {
- return new Response("Unauthorized", {
- status: 401,
- statusText:
- "OpenAI API Key is missing. You can supply your own key via Settings.",
- });
+ if (openAIOrganization) {
+ headers["OpenAI-Organization"] = openAIOrganization;
}
- const apiEndpoint = getApiEndpoint(
- openAIApiConfig?.endpoint || openAIApiEndpoint
- );
- const res = await fetch(apiEndpoint, {
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${apiKey}`,
- },
+ const apiEndpoint = getApiEndpoint(req.headers.get("x-openai-endpoint") || openAIApiEndpoint);
+ const model = getModel(req.headers.get("x-openai-model") || "");
+ const remoteRes = await fetch(apiEndpoint, {
+ headers: headers,
method: "POST",
body: JSON.stringify({
- model: gpt35.name,
+ model: model.name,
messages: reqBody.messages,
- temperature: gpt35.temperature,
- frequency_penalty: gpt35.frequency_penalty,
- presence_penalty: gpt35.presence_penalty,
+ temperature: model.temperature,
+ frequency_penalty: model.frequency_penalty,
+ presence_penalty: model.presence_penalty,
stream: true,
- // Send end-user ID to help OpenAI monitor and detect abuse.
+ // Send end-user IP to help OpenAI monitor and detect abuse.
+ // It's intentionally not using email to avoid leaking user's email to OpenAI.
user: req.ip,
}),
});
- if (!res.ok) {
- return new Response(res.body, {
- status: res.status,
- statusText: res.statusText,
+ if (!remoteRes.ok) {
+ return new Response(remoteRes.body, {
+ status: remoteRes.status,
+ statusText: remoteRes.statusText,
});
}
@@ -88,11 +148,20 @@ const handler = async (req: NextRequest) => {
}
};
const parser = createParser(streamParser);
- for await (const chunk of res.body as any) {
+ for await (const chunk of remoteRes.body as any) {
parser.feed(decoder.decode(chunk));
}
},
});
+
+ if (useServerKey && hasFeature("quota")) {
+ // Increment usage count
+ await fetch(usageUrl, {
+ method: "POST",
+ headers: requestHeaders,
+ });
+ }
+
return new Response(stream);
};
diff --git a/src/pages/api/checkout_sessions/[id].ts b/src/pages/api/checkout_sessions/[id].ts
index 7dc1b320..5d2fc218 100644
--- a/src/pages/api/checkout_sessions/[id].ts
+++ b/src/pages/api/checkout_sessions/[id].ts
@@ -6,24 +6,19 @@ const stripe = new Stripe(process.env.STRIPE_API_KEY, {
apiVersion: "2022-11-15",
});
-export default async function handler(
- req: NextApiRequest,
- res: NextApiResponse
-) {
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const id: string = req.query.id as string;
try {
if (!id.startsWith("cs_")) {
throw Error("Incorrect CheckoutSession ID.");
}
- const checkout_session: Stripe.Checkout.Session =
- await stripe.checkout.sessions.retrieve(id, {
- expand: ["payment_intent"],
- });
+ const checkout_session: Stripe.Checkout.Session = await stripe.checkout.sessions.retrieve(id, {
+ expand: ["payment_intent"],
+ });
res.status(200).json(checkout_session);
} catch (err) {
- const errorMessage =
- err instanceof Error ? err.message : "Internal server error";
+ const errorMessage = err instanceof Error ? err.message : "Internal server error";
res.status(500).json({ statusCode: 500, message: errorMessage });
}
}
diff --git a/src/pages/api/checkout_sessions/index.ts b/src/pages/api/checkout_sessions/index.ts
index 164d5c7a..6b0fa752 100644
--- a/src/pages/api/checkout_sessions/index.ts
+++ b/src/pages/api/checkout_sessions/index.ts
@@ -11,10 +11,7 @@ const stripe = new Stripe(process.env.STRIPE_API_KEY, {
const prisma = new PrismaClient();
-export default async function handler(
- req: NextApiRequest,
- res: NextApiResponse
-) {
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const session = await getServerSession(req, res, authOptions);
if (!session?.user?.email) {
@@ -23,7 +20,6 @@ export default async function handler(
}
if (req.method === "POST") {
- const session = await getServerSession(req, res, authOptions);
const email = session?.user?.email!;
const user = await prisma.user.findUniqueOrThrow({
where: { email: email },
@@ -33,18 +29,10 @@ export default async function handler(
const params: Stripe.Checkout.SessionCreateParams = {
submit_type: "pay",
mode: "payment",
- payment_method_types: [
- "affirm",
- "alipay",
- "card",
- "cashapp",
- "klarna",
- "link",
- "wechat_pay",
- ],
+ payment_method_types: ["affirm", "alipay", "card", "cashapp", "klarna", "link", "wechat_pay"],
line_items: [
{
- price: process.env.STRIPE_ANNUAL_LICENSE_PRICE_ID,
+ price: req.body.price,
quantity: 1,
},
],
@@ -58,6 +46,8 @@ export default async function handler(
// setup_future_usage: "off_session",
metadata: {
email: session?.user?.email!,
+ plan: "PRO",
+ price: req.body.price,
},
},
// Link customer if present otherwise pass email and let Stripe create a new customer.
@@ -68,13 +58,11 @@ export default async function handler(
success_url: `${req.headers.origin}/setting?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${req.headers.origin}/setting`,
};
- const checkoutSession: Stripe.Checkout.Session =
- await stripe.checkout.sessions.create(params);
+ const checkoutSession: Stripe.Checkout.Session = await stripe.checkout.sessions.create(params);
res.status(200).json(checkoutSession);
} catch (err) {
- const errorMessage =
- err instanceof Error ? err.message : "Internal server error";
+ const errorMessage = err instanceof Error ? err.message : "Internal server error";
res.status(500).json({ statusCode: 500, message: errorMessage });
}
} else {
diff --git a/src/pages/api/collect.ts b/src/pages/api/collect.ts
new file mode 100644
index 00000000..a1e68f5a
--- /dev/null
+++ b/src/pages/api/collect.ts
@@ -0,0 +1,59 @@
+import { PrismaClient } from "@prisma/client";
+import { NextApiRequest, NextApiResponse } from "next";
+import { Conversation, Message } from "@/types";
+import { getModel } from "@/utils";
+import { getEndUser } from "./auth/end-user";
+
+const prisma = new PrismaClient();
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ if (req.method !== "POST") {
+ return res.status(405).json([]);
+ }
+ const conversation = req.body.conversation as Conversation;
+ const messages = req.body.messages as Message[];
+ try {
+ const chat = await prisma.chat.findUnique({
+ where: {
+ id: conversation.id,
+ },
+ });
+ const endUser = await getEndUser(req, res);
+ if (chat) {
+ await prisma.message.createMany({
+ data: messages.map((message) => ({
+ chatId: chat.id,
+ createdAt: new Date(message.createdAt),
+ endUser: endUser,
+ role: message.creatorRole,
+ content: message.content,
+ upvote: false,
+ downvote: false,
+ })),
+ });
+ } else {
+ await prisma.chat.create({
+ data: {
+ id: conversation.id,
+ createdAt: new Date(conversation.createdAt),
+ model: getModel((req.headers["x-openai-model"] as string) || ""),
+ ctx: {},
+ messages: {
+ create: messages.map((message) => ({
+ createdAt: new Date(message.createdAt),
+ endUser: endUser,
+ role: message.creatorRole,
+ content: message.content,
+ upvote: false,
+ downvote: false,
+ })),
+ },
+ },
+ });
+ }
+ } catch (err) {
+ console.error(err);
+ }
+
+ res.status(200).json(true);
+}
diff --git a/src/pages/api/connection/db.ts b/src/pages/api/connection/db.ts
index 84c5ee44..b4f57064 100644
--- a/src/pages/api/connection/db.ts
+++ b/src/pages/api/connection/db.ts
@@ -1,6 +1,8 @@
import { NextApiRequest, NextApiResponse } from "next";
import { newConnector } from "@/lib/connectors";
import { Connection } from "@/types";
+import { changeTiDBConnectionToMySQL } from "@/utils";
+import { Engine } from "@/types/connection";
// POST /api/connection/db
// req body: { connection: Connection }
@@ -10,7 +12,11 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
return res.status(405).json([]);
}
- const connection = req.body.connection as Connection;
+ let connection = req.body.connection as Connection;
+ if (connection.engineType === Engine.TiDB) {
+ connection = changeTiDBConnectionToMySQL(connection);
+ }
+
try {
const connector = newConnector(connection);
const databaseNameList = await connector.getDatabases();
diff --git a/src/pages/api/connection/db_schema.ts b/src/pages/api/connection/db_schema.ts
index 1c2388df..d5ff9863 100644
--- a/src/pages/api/connection/db_schema.ts
+++ b/src/pages/api/connection/db_schema.ts
@@ -1,6 +1,8 @@
import { NextApiRequest, NextApiResponse } from "next";
import { newConnector } from "@/lib/connectors";
-import { Connection, Table } from "@/types";
+import { Connection, Schema } from "@/types";
+import { changeTiDBConnectionToMySQL } from "@/utils";
+import { Engine } from "@/types/connection";
// POST /api/connection/db_schema
// req body: { connection: Connection, db: string }
@@ -10,26 +12,19 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
return res.status(405).json([]);
}
- const connection = req.body.connection as Connection;
+ let connection = req.body.connection as Connection;
+ if (connection.engineType === Engine.TiDB) {
+ connection = changeTiDBConnectionToMySQL(connection);
+ }
+
const db = req.body.db as string;
+
try {
const connector = newConnector(connection);
- const tableStructures: Table[] = [];
- const rawTableNameList = await connector.getTables(db);
- const structureFetched = (tableName: string, structure: string) => {
- tableStructures.push({
- name: tableName,
- structure,
- });
- };
- await connector.getTableStructureBatch(
- db,
- rawTableNameList,
- structureFetched
- );
+ const schemaList: Schema[] = await connector.getTableSchema(db);
res.status(200).json({
- data: tableStructures,
+ data: schemaList,
});
} catch (error: any) {
res.status(400).json({
diff --git a/src/pages/api/connection/execute.ts b/src/pages/api/connection/execute.ts
index 6ff613fe..900f1837 100644
--- a/src/pages/api/connection/execute.ts
+++ b/src/pages/api/connection/execute.ts
@@ -1,6 +1,8 @@
import { NextApiRequest, NextApiResponse } from "next";
import { newConnector } from "@/lib/connectors";
import { Connection } from "@/types";
+import { changeTiDBConnectionToMySQL } from "@/utils";
+import { Engine } from "@/types/connection";
// POST /api/connection/execute
// req body: { connection: Connection, db: string, statement: string }
@@ -9,7 +11,10 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
return res.status(405).json(false);
}
- const connection = req.body.connection as Connection;
+ let connection = req.body.connection as Connection;
+ if (connection.engineType === Engine.TiDB) {
+ connection = changeTiDBConnectionToMySQL(connection);
+ }
const db = req.body.db as string;
const statement = req.body.statement as string;
diff --git a/src/pages/api/connection/test.ts b/src/pages/api/connection/test.ts
index d9ec669c..5a54803f 100644
--- a/src/pages/api/connection/test.ts
+++ b/src/pages/api/connection/test.ts
@@ -1,6 +1,8 @@
import { NextApiRequest, NextApiResponse } from "next";
import { newConnector } from "@/lib/connectors";
import { Connection } from "@/types";
+import { changeTiDBConnectionToMySQL } from "@/utils";
+import { Engine } from "@/types/connection";
// POST /api/connection/test
// req body: { connection: Connection }
@@ -10,7 +12,10 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
return res.status(405).json(false);
}
- const connection = req.body.connection as Connection;
+ let connection = req.body.connection as Connection;
+ if (connection.engineType === Engine.TiDB) {
+ connection = changeTiDBConnectionToMySQL(connection);
+ }
try {
const connector = newConnector(connection);
await connector.testConnection();
diff --git a/src/pages/api/payment.ts b/src/pages/api/payment.ts
new file mode 100644
index 00000000..fcfe19af
--- /dev/null
+++ b/src/pages/api/payment.ts
@@ -0,0 +1,16 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import { getEndUser } from "./auth/end-user";
+import { getPaymentListByEmail } from "./utils/payment";
+
+const handler = async (req: NextApiRequest, res: NextApiResponse) => {
+ if (req.method !== "GET") {
+ return res.status(405).json([]);
+ }
+
+ const endUser = await getEndUser(req, res);
+ const paymentList = await getPaymentListByEmail(endUser);
+
+ res.status(200).json(paymentList);
+};
+
+export default handler;
diff --git a/src/pages/api/quota.ts b/src/pages/api/quota.ts
deleted file mode 100644
index d26d5b81..00000000
--- a/src/pages/api/quota.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { NextApiRequest, NextApiResponse } from "next";
-import { getQuota } from "./auth/quota";
-
-const handler = async (req: NextApiRequest, res: NextApiResponse) => {
- if (req.method !== "GET") {
- return res.status(405).json([]);
- }
- res.status(200).json(await getQuota(req, res));
-};
-
-export default handler;
diff --git a/src/pages/api/usage.ts b/src/pages/api/usage.ts
index c40bcbe5..87c6690f 100644
--- a/src/pages/api/usage.ts
+++ b/src/pages/api/usage.ts
@@ -1,62 +1,40 @@
-import { PrismaClient } from "@prisma/client";
import { NextApiRequest, NextApiResponse } from "next";
-import { Conversation, Message } from "@/types";
-import { gpt35 } from "@/utils";
+import { getServerSession } from "next-auth/next";
+import { authOptions } from "./auth/[...nextauth]";
+import { getSubscriptionByEmail } from "./utils/subscription";
+import { getModel } from "@/utils";
+import { addUsage, getCurrentMonthUsage } from "./utils/usage";
import { getEndUser } from "./auth/end-user";
+import { Quota } from "@/types";
-const prisma = new PrismaClient();
-
-export default async function handler(
- req: NextApiRequest,
- res: NextApiResponse
-) {
- if (req.method !== "POST") {
+const handler = async (req: NextApiRequest, res: NextApiResponse) => {
+ if (req.method !== "GET" && req.method !== "POST") {
return res.status(405).json([]);
}
- const conversation = req.body.conversation as Conversation;
- const messages = req.body.messages as Message[];
- try {
- const chat = await prisma.chat.findUnique({
- where: {
- id: conversation.id,
- },
- });
- const endUser = await getEndUser(req, res);
- if (chat) {
- await prisma.message.createMany({
- data: messages.map((message) => ({
- chatId: chat.id,
- createdAt: new Date(message.createdAt),
- endUser: endUser,
- role: message.creatorRole,
- content: message.content,
- upvote: false,
- downvote: false,
- })),
- });
- } else {
- await prisma.chat.create({
- data: {
- id: conversation.id,
- createdAt: new Date(conversation.createdAt),
- model: gpt35,
- ctx: {},
- messages: {
- create: messages.map((message) => ({
- createdAt: new Date(message.createdAt),
- endUser: endUser,
- role: message.creatorRole,
- content: message.content,
- upvote: false,
- downvote: false,
- })),
- },
- },
- });
- }
- } catch (err) {
- console.error(err);
+
+ const endUser = await getEndUser(req, res);
+
+ // Get from server session if available
+ const serverSession = await getServerSession(req, res, authOptions);
+ let subscripion = serverSession?.user?.subscription;
+ if (!subscripion) {
+ subscripion = await getSubscriptionByEmail(endUser);
}
- res.status(200).json(true);
-}
+ let usage = 0;
+ if (req.method === "GET") {
+ usage = await getCurrentMonthUsage(endUser);
+ } else if (req.method === "POST") {
+ const model = getModel((req.headers["x-openai-model"] as string) || "");
+ usage = await addUsage(endUser, model.cost_per_call);
+ }
+
+ const quota: Quota = {
+ current: usage,
+ limit: subscripion.quota,
+ };
+
+ res.status(200).json(quota);
+};
+
+export default handler;
diff --git a/src/pages/api/utils/payment.ts b/src/pages/api/utils/payment.ts
new file mode 100644
index 00000000..179fe009
--- /dev/null
+++ b/src/pages/api/utils/payment.ts
@@ -0,0 +1,25 @@
+import { Payment } from "@/types";
+import { PrismaClient } from "@prisma/client";
+
+const prisma = new PrismaClient();
+
+export const getPaymentListByEmail = async (email: string): Promise => {
+ const payments = await prisma.payment.findMany({
+ where: { email: email },
+ orderBy: { createdAt: "desc" },
+ });
+
+ const result: Payment[] = [];
+ for (const payment of payments) {
+ result.push({
+ id: payment.id,
+ email: payment.email,
+ createdAt: payment.createdAt.getTime(),
+ amount: payment.amount,
+ currency: payment.currency,
+ receipt: payment.receipt,
+ description: payment.description,
+ });
+ }
+ return result;
+};
diff --git a/src/pages/api/utils/subscription.ts b/src/pages/api/utils/subscription.ts
new file mode 100644
index 00000000..54282fd2
--- /dev/null
+++ b/src/pages/api/utils/subscription.ts
@@ -0,0 +1,47 @@
+import { PlanConfig, PlanType, Subscription } from "@/types";
+import { PrismaClient } from "@prisma/client";
+
+const prisma = new PrismaClient();
+
+export const getSubscriptionByEmail = async (email: string): Promise => {
+ const subscriptions = await prisma.subscription.findMany({
+ where: { email: email },
+ orderBy: { expireAt: "desc" },
+ });
+
+ // Return the latest active subscription if exists.
+ for (const subscription of subscriptions) {
+ const result: Subscription = {
+ id: subscription.id,
+ plan: subscription.plan as PlanType,
+ quota: PlanConfig[subscription.plan].quota,
+ startAt: subscription.startAt.getTime(),
+ expireAt: subscription.expireAt.getTime(),
+ canceledAt: subscription.canceledAt?.getTime(),
+ };
+ if (!result.canceledAt && result.expireAt > Date.now()) {
+ return result;
+ }
+ }
+
+ // Return the latest subscripion if exists.
+ for (const subscription of subscriptions) {
+ return {
+ id: subscription.id,
+ plan: subscription.plan as PlanType,
+ quota: PlanConfig["FREE"].quota,
+ startAt: subscription.startAt.getTime(),
+ expireAt: subscription.expireAt.getTime(),
+ canceledAt: subscription.canceledAt?.getTime(),
+ };
+ }
+
+ // Return a FREE subscription.
+ return {
+ id: "",
+ plan: "FREE",
+ quota: PlanConfig["FREE"].quota,
+ startAt: 0,
+ expireAt: 0,
+ };
+};
diff --git a/src/pages/api/utils/usage.ts b/src/pages/api/utils/usage.ts
new file mode 100644
index 00000000..c8fa0e1d
--- /dev/null
+++ b/src/pages/api/utils/usage.ts
@@ -0,0 +1,59 @@
+import { PrismaClient } from "@prisma/client";
+
+const prisma = new PrismaClient();
+
+export const getCurrentMonthUsage = async (endUser: string): Promise => {
+ const now = new Date();
+ const start = new Date(now.getFullYear(), now.getMonth(), 1);
+ const end = new Date(now.getFullYear(), now.getMonth() + 1, 1);
+ const aggregations = await prisma.usage.aggregate({
+ _sum: {
+ count: true,
+ },
+ where: {
+ endUser: endUser,
+ createdAt: {
+ gte: start,
+ lt: end,
+ },
+ },
+ });
+
+ return aggregations._sum.count || 0;
+};
+
+// We coerce individual usage to the begining of the day to reduce the usage records.
+export const addUsage = async (endUser: string, addition: number): Promise => {
+ const now = new Date();
+ const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
+ const usage = await prisma.usage.findFirst({
+ where: {
+ endUser: endUser,
+ createdAt: today,
+ },
+ });
+
+ let newUsage = 0;
+ if (usage) {
+ newUsage = usage.count + addition;
+ await prisma.usage.update({
+ where: {
+ id: usage.id,
+ },
+ data: {
+ count: newUsage,
+ },
+ });
+ } else {
+ newUsage = addition;
+ await prisma.usage.create({
+ data: {
+ endUser: endUser,
+ createdAt: today,
+ count: newUsage,
+ },
+ });
+ }
+
+ return newUsage;
+};
diff --git a/src/pages/api/webhook/index.ts b/src/pages/api/webhook/index.ts
index 27e88500..dbaf7aa2 100644
--- a/src/pages/api/webhook/index.ts
+++ b/src/pages/api/webhook/index.ts
@@ -1,9 +1,11 @@
+import { PrismaClient, Prisma, SubscriptionPlan } from "@prisma/client";
import { buffer } from "micro";
import Cors from "micro-cors";
import { NextApiRequest, NextApiResponse } from "next";
-import { PrismaClient, Prisma } from "@prisma/client";
-
import Stripe from "stripe";
+import { getSubscriptionByEmail } from "../utils/subscription";
+import { getPlanFromPriceId } from "@/utils";
+
const stripe = new Stripe(process.env.STRIPE_API_KEY, {
// https://github.com/stripe/stripe-node#configuration
apiVersion: "2022-11-15",
@@ -31,11 +33,7 @@ const webhookHandler = async (req: NextApiRequest, res: NextApiResponse) => {
let event: Stripe.Event;
try {
- event = stripe.webhooks.constructEvent(
- buf.toString(),
- sig,
- webhookSecret
- );
+ event = stripe.webhooks.constructEvent(buf.toString(), sig, webhookSecret);
} catch (err) {
const errorMessage = err instanceof Error ? err.message : "Unknown error";
// On error, log and return the error message.
@@ -48,6 +46,17 @@ const webhookHandler = async (req: NextApiRequest, res: NextApiResponse) => {
// Cast event data to Stripe object.
if (event.type === "payment_intent.succeeded") {
const paymentIntent = event.data.object as Stripe.PaymentIntent;
+ const charge = await stripe.charges.retrieve(paymentIntent.latest_charge as string);
+
+ let plan;
+ try {
+ plan = getPlanFromPriceId(paymentIntent.metadata.price);
+ } catch (err) {
+ console.log(err);
+ res.status(400).send(`Invalid price id: ${paymentIntent.metadata.price}`);
+ return;
+ }
+
const customerId = paymentIntent.customer as string;
if (customerId) {
// Save the stripe customer id so that we can relate this customer to future payments.
@@ -65,22 +74,48 @@ const webhookHandler = async (req: NextApiRequest, res: NextApiResponse) => {
where: { email: paymentIntent.metadata.email },
});
- const today = new Date(new Date().setHours(0, 0, 0, 0));
- const subscription: Prisma.SubscriptionUncheckedCreateInput = {
+ const payment: Prisma.PaymentUncheckedCreateInput = {
userId: user.id,
+ email: paymentIntent.metadata.email,
createdAt: new Date(paymentIntent.created * 1000),
- status: "ACTIVE",
- startAt: today,
- expireAt: new Date(today.setFullYear(today.getFullYear() + 1)),
paymentId: paymentIntent.id,
customerId: customerId || "",
+ description: plan.description,
+ amount: paymentIntent.amount,
+ currency: paymentIntent.currency,
+ receipt: charge.receipt_url as string,
};
- await prisma.subscription.create({ data: subscription });
+ await prisma.payment.create({ data: payment });
+
+ const currentSubscription = await getSubscriptionByEmail(paymentIntent.metadata.email);
+ // Create a new subscription if there is no active paid subscription.
+ if (currentSubscription.plan === "FREE" || currentSubscription.canceledAt || currentSubscription.expireAt < new Date().getTime()) {
+ const today = new Date(new Date().setHours(0, 0, 0, 0));
+ // Subtract 1 second from the year from now to make it 23:59:59
+ const yearFromNow = new Date(new Date(new Date().setHours(0, 0, 0, 0)).setMonth(today.getMonth() + plan.month) - 1000);
+ const subscription: Prisma.SubscriptionUncheckedCreateInput = {
+ userId: user.id,
+ email: paymentIntent.metadata.email,
+ createdAt: new Date(paymentIntent.created * 1000),
+ startAt: today,
+ expireAt: yearFromNow,
+ plan: paymentIntent.metadata.plan as SubscriptionPlan,
+ };
+ await prisma.subscription.create({ data: subscription });
+ } else {
+ // Extend the current subscription if there is an active paid subscription.
+ const expireAt = new Date(Math.max(currentSubscription.expireAt, new Date().getTime()));
+ expireAt.setMonth(expireAt.getMonth() + plan.month);
+ await prisma.subscription.update({
+ where: { id: currentSubscription.id },
+ data: {
+ expireAt,
+ },
+ });
+ }
} else if (event.type === "payment_intent.payment_failed") {
const paymentIntent = event.data.object as Stripe.PaymentIntent;
- console.log(
- `❌ Payment failed: ${paymentIntent.last_payment_error?.message}`
- );
+ console.log(`❌ Payment failed: ${paymentIntent.last_payment_error?.message}`);
}
// Return a response to acknowledge receipt of the event.
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 4cd999cd..9b5f777d 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -6,18 +6,12 @@ import React from "react";
// Use dynamic import to avoid page hydrated.
// reference: https://github.com/pmndrs/zustand/issues/1145#issuecomment-1316431268
-const ConnectionSidebar = dynamic(
- () => import("@/components/ConnectionSidebar"),
- {
- ssr: false,
- }
-);
-const ConversationView = dynamic(
- () => import("@/components/ConversationView"),
- {
- ssr: false,
- }
-);
+const ConnectionSidebar = dynamic(() => import("@/components/ConnectionSidebar"), {
+ ssr: false,
+});
+const ConversationView = dynamic(() => import("@/components/ConversationView"), {
+ ssr: false,
+});
const QueryDrawer = dynamic(() => import("@/components/QueryDrawer"), {
ssr: false,
});
@@ -26,31 +20,14 @@ const IndexPage: NextPage = () => {
return (
-
- SQL Chat - Chat-based SQL Client and Editor for the next decade
-
-
+ SQL Chat - Chat-based SQL Client and Editor for the next decade
+
-
-
+
+
-
+
SQL Chat
@@ -61,11 +38,7 @@ const IndexPage: NextPage = () => {
-
+
);
};
diff --git a/src/pages/privacy/index.tsx b/src/pages/privacy/index.tsx
new file mode 100644
index 00000000..67a8921b
--- /dev/null
+++ b/src/pages/privacy/index.tsx
@@ -0,0 +1,17 @@
+import { NextPage } from "next";
+import Head from "next/head";
+import MarkdownRenderer from "@/components/MarkdownRenderer";
+
+const PrivacyPage: NextPage = () => {
+ return (
+ <>
+
+ Privacy
+
+
+
+ >
+ );
+};
+
+export default PrivacyPage;
diff --git a/src/pages/setting/index.tsx b/src/pages/setting/index.tsx
index 0b60da4c..e824b46a 100644
--- a/src/pages/setting/index.tsx
+++ b/src/pages/setting/index.tsx
@@ -1,17 +1,12 @@
import { NextPage } from "next";
+import Head from "next/head";
import { useRouter } from "next/router";
import { Fragment, useState } from "react";
import { useTranslation } from "react-i18next";
import Link from "next/link";
import { Dialog, Transition } from "@headlessui/react";
-import {
- ArrowUturnLeftIcon,
- Bars3Icon,
- Cog6ToothIcon,
- XMarkIcon,
- CreditCardIcon,
-} from "@heroicons/react/24/outline";
-import SettingView from "../../components/SettingView";
+import { ArrowUturnLeftIcon, Bars3Icon, Cog6ToothIcon, XMarkIcon, CreditCardIcon } from "@heroicons/react/24/outline";
+import SettingGeneralView from "../../components/SettingGeneralView";
import StripeCheckPaymentBanner from "../../components/StripeCheckPaymentBanner";
function classNames(...classes: string[]) {
@@ -19,9 +14,9 @@ function classNames(...classes: string[]) {
}
const SettingPage: NextPage = () => {
- const [sidebarOpen, setSidebarOpen] = useState(false);
- const router = useRouter();
const { t } = useTranslation();
+ const router = useRouter();
+ const [sidebarOpen, setSidebarOpen] = useState(false);
const navigation = [
{
@@ -40,22 +35,13 @@ const SettingPage: NextPage = () => {
return (
<>
- {/*
- This example requires updating your template:
-
- ```
-
-
- ```
- */}
+
+ {t("setting.self")}
+
-
+
-
+
{
leaveTo="opacity-0"
>
- setSidebarOpen(false)}
- >
+ setSidebarOpen(false)}>
Close sidebar
-
+
{/* Sidebar component, swap this element with another sidebar if you like */}
-
+
@@ -116,17 +95,13 @@ const SettingPage: NextPage = () => {
{
{/* Static sidebar for desktop */}
{/* Sidebar component, swap this element with another sidebar if you like */}
-
+
@@ -163,17 +138,15 @@ const SettingPage: NextPage = () => {
href={item.href}
className={classNames(
item.current
- ? "bg-gray-50 text-indigo-600"
- : "text-gray-700 hover:text-indigo-600 hover:bg-gray-50",
- "group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold"
+ ? "bg-gray-50 !text-indigo-600 dark:bg-zinc-800"
+ : "text-gray-700 hover:text-indigo-600 hover:bg-gray-50 dark:hover:bg-zinc-800",
+ "group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold dark:text-gray-400"
)}
>
@@ -188,25 +161,17 @@ const SettingPage: NextPage = () => {
-
-
setSidebarOpen(true)}
- >
+
+ setSidebarOpen(true)}>
Open sidebar
- {router.query.session_id && (
-
- )}
-
-
+ {router.query.session_id &&
}
+
+
diff --git a/src/pages/terms/index.tsx b/src/pages/terms/index.tsx
new file mode 100644
index 00000000..c3171d0a
--- /dev/null
+++ b/src/pages/terms/index.tsx
@@ -0,0 +1,17 @@
+import { NextPage } from "next";
+import Head from "next/head";
+import MarkdownRenderer from "@/components/MarkdownRenderer";
+
+const PrivacyPage: NextPage = () => {
+ return (
+ <>
+
+ Terms
+
+
+
+ >
+ );
+};
+
+export default PrivacyPage;
diff --git a/src/store/assistant.ts b/src/store/assistant.ts
index fbde92a4..50580aed 100644
--- a/src/store/assistant.ts
+++ b/src/store/assistant.ts
@@ -2,16 +2,13 @@ import { first } from "lodash-es";
import { Assistant, Id } from "@/types";
import * as customAssistantList from "../../assistants";
-export const GeneralBotId = "general-bot";
export const SQLChatBotId = "sql-chat-bot";
-export const assistantList: Assistant[] = Object.keys(customAssistantList).map(
- (name) => {
- return {
- ...((customAssistantList as any)[name].default as Assistant),
- };
- }
-);
+export const assistantList: Assistant[] = Object.keys(customAssistantList).map((name) => {
+ return {
+ ...((customAssistantList as any)[name].default as Assistant),
+ };
+});
export const getAssistantById = (id: Id) => {
const assistant = assistantList.find((assistant) => assistant.id === id);
diff --git a/src/store/connection.ts b/src/store/connection.ts
index f90bc413..0c22ad51 100644
--- a/src/store/connection.ts
+++ b/src/store/connection.ts
@@ -2,8 +2,8 @@ import axios from "axios";
import { uniqBy } from "lodash-es";
import { create } from "zustand";
import { persist } from "zustand/middleware";
-import { Connection, Database, Engine, ResponseObject, Table } from "@/types";
-import { generateUUID } from "@/utils";
+import { Connection, Database, Engine, ResponseObject, Schema } from "@/types";
+import { countTextTokens, generateUUID } from "@/utils";
interface ConnectionContext {
connection: Connection;
@@ -14,10 +14,10 @@ const samplePGConnection: Connection = {
id: "sample-pg",
title: "Sample PostgreSQL",
engineType: Engine.PostgreSQL,
- host: "db.swxkyqvcefxcjecynews.supabase.co",
+ host: "ep-throbbing-thunder-042250-pooler.us-west-2.aws.neon.tech",
port: "5432",
- username: "readonly_user",
- password: "sqlchat",
+ username: "sqlchat_readonly",
+ password: "U5rI8tJMiKWp",
database: "sample-employee",
};
@@ -26,22 +26,11 @@ interface ConnectionState {
databaseList: Database[];
currentConnectionCtx?: ConnectionContext;
createConnection: (connection: Connection) => Connection;
- setCurrentConnectionCtx: (
- connectionCtx: ConnectionContext | undefined
- ) => void;
- getOrFetchDatabaseList: (
- connection: Connection,
- skipCache?: boolean
- ) => Promise;
- getOrFetchDatabaseSchema: (
- database: Database,
- skipCache?: boolean
- ) => Promise;
+ setCurrentConnectionCtx: (connectionCtx: ConnectionContext | undefined) => void;
+ getOrFetchDatabaseList: (connection: Connection, skipCache?: boolean) => Promise;
+ getOrFetchDatabaseSchema: (database: Database, skipCache?: boolean) => Promise;
getConnectionById: (connectionId: string) => Connection | undefined;
- updateConnection: (
- connectionId: string,
- connection: Partial
- ) => void;
+ updateConnection: (connectionId: string, connection: Partial) => void;
clearConnection: (filter: (connection: Connection) => boolean) => void;
}
@@ -66,33 +55,25 @@ export const useConnectionStore = create()(
...state,
currentConnectionCtx: connectionCtx,
})),
- getOrFetchDatabaseList: async (
- connection: Connection,
- skipCache = false
- ) => {
+ getOrFetchDatabaseList: async (connection: Connection, skipCache = false) => {
const state = get();
if (!skipCache) {
- if (
- state.databaseList.some(
- (database) => database.connectionId === connection.id
- )
- ) {
- return state.databaseList.filter(
- (database) => database.connectionId === connection.id
- );
+ if (state.databaseList.some((database) => database.connectionId === connection.id)) {
+ return state.databaseList.filter((database) => database.connectionId === connection.id);
}
}
const { data } = await axios.post("/api/connection/db", {
connection,
});
+
const fetchedDatabaseList = data.map(
(dbName) =>
({
connectionId: connection.id,
name: dbName,
- tableList: [],
+ schemaList: [],
} as Database)
);
const databaseList = uniqBy(
@@ -103,76 +84,54 @@ export const useConnectionStore = create()(
...state,
databaseList,
}));
- return databaseList.filter(
- (database) => database.connectionId === connection.id
- );
+ return databaseList.filter((database) => database.connectionId === connection.id);
},
- getOrFetchDatabaseSchema: async (
- database: Database,
- skipCache = false
- ) => {
+ getOrFetchDatabaseSchema: async (database: Database, skipCache = false) => {
const state = get();
if (!skipCache) {
- const db = state.databaseList.find(
- (db) =>
- db.connectionId === database.connectionId &&
- db.name === database.name
- );
- if (
- db !== undefined &&
- Array.isArray(db.tableList) &&
- db.tableList.length !== 0
- ) {
- return db.tableList;
+ const db = state.databaseList.find((db) => db.connectionId === database.connectionId && db.name === database.name);
+ if (db !== undefined && Array.isArray(db.schemaList) && db.schemaList.length !== 0) {
+ return db.schemaList;
}
}
- const connection = state.connectionList.find(
- (connection) => connection.id === database.connectionId
- );
+ const connection = state.connectionList.find((connection) => connection.id === database.connectionId);
if (!connection) {
return [];
}
- const { data: result } = await axios.post>(
- "/api/connection/db_schema",
- {
- connection,
- db: database.name,
- }
- );
+ const { data: result } = await axios.post>("/api/connection/db_schema", {
+ connection,
+ db: database.name,
+ });
+
if (result.message) {
throw result.message;
}
- const fetchedTableList = result.data;
+ const fetchedTableList: Schema[] = result.data;
+ fetchedTableList.forEach((schema) => {
+ schema.tables.forEach((table) => {
+ table.token = countTextTokens(table.structure);
+ });
+ });
set((state) => ({
...state,
databaseList: state.databaseList.map((item) =>
- item.connectionId === database.connectionId &&
- item.name === database.name
- ? { ...item, tableList: fetchedTableList }
- : item
+ item.connectionId === database.connectionId && item.name === database.name ? { ...item, schemaList: fetchedTableList } : item
),
}));
return fetchedTableList;
},
getConnectionById: (connectionId: string) => {
- return get().connectionList.find(
- (connection) => connection.id === connectionId
- );
+ return get().connectionList.find((connection) => connection.id === connectionId);
},
- updateConnection: (
- connectionId: string,
- connection: Partial
- ) => {
+ updateConnection: (connectionId: string, connection: Partial) => {
set((state) => ({
...state,
- connectionList: state.connectionList.map((item) =>
- item.id === connectionId ? { ...item, ...connection } : item
- ),
+ connectionList: state.connectionList.map((item) => (item.id === connectionId ? { ...item, ...connection } : item)),
}));
},
clearConnection: (filter: (connection: Connection) => boolean) => {
@@ -184,6 +143,16 @@ export const useConnectionStore = create()(
}),
{
name: "connection-storage",
+ version: 1,
+ migrate: (persistedState: any, version: number) => {
+ let state = persistedState as ConnectionState;
+ if (version === 0) {
+ console.info(`migrate from ${version} to 1`);
+ // to clear old data. it will make refetch new schema List
+ state.databaseList = [];
+ }
+ return state;
+ },
}
)
);
diff --git a/src/store/conversation.ts b/src/store/conversation.ts
index 44a19988..59f782f2 100644
--- a/src/store/conversation.ts
+++ b/src/store/conversation.ts
@@ -3,12 +3,12 @@ import { create } from "zustand";
import { persist } from "zustand/middleware";
import { Conversation, Id } from "@/types";
import { generateUUID } from "@/utils";
-import { GeneralBotId, SQLChatBotId } from ".";
+import { SQLChatBotId } from ".";
const getDefaultConversation = (): Conversation => {
return {
id: generateUUID(),
- assistantId: GeneralBotId,
+ assistantId: SQLChatBotId,
title: dayjs().format("LTS"),
createdAt: Date.now(),
};
@@ -18,25 +18,18 @@ interface ConversationState {
getState: () => ConversationState;
conversationList: Conversation[];
currentConversationId?: Id;
- createConversation: (
- connectionId?: Id,
- databaseName?: string
- ) => Conversation;
+ createConversation: (connectionId?: Id, databaseName?: string) => Conversation;
setCurrentConversationId: (conversationId: Id | undefined) => void;
- getConversationById: (
- conversationId: Id | undefined
- ) => Conversation | undefined;
- updateConversation: (
- conversationId: Id,
- conversation: Partial
- ) => void;
+ getConversationById: (conversationId: Id | undefined) => Conversation | undefined;
+ updateConversation: (conversationId: Id, conversation: Partial) => void;
clearConversation: (filter: (conversation: Conversation) => boolean) => void;
- updateTableName: (tableName: string) => void;
+ updateSelectedTablesNameList: (selectedTableNameList: string[]) => void;
+ updateSelectedSchemaName: (selectedSchemaName: string) => void;
}
export const useConversationStore = create()(
persist(
- (set: any, get: any) => ({
+ (set, get) => ({
getState: () => get(),
conversationList: [],
createConversation: (connectionId?: Id, databaseName?: string) => {
@@ -54,17 +47,11 @@ export const useConversationStore = create()(
}));
return conversation;
},
- setCurrentConversationId: (conversation: Id | undefined) =>
- set(() => ({ currentConversationId: conversation })),
+ setCurrentConversationId: (conversation: Id | undefined) => set(() => ({ currentConversationId: conversation })),
getConversationById: (conversationId: Id | undefined) => {
- return get().conversationList.find(
- (item: Conversation) => item.id === conversationId
- );
+ return get().conversationList.find((item: Conversation) => item.id === conversationId);
},
- updateConversation: (
- conversationId: Id,
- conversation: Partial
- ) => {
+ updateConversation: (conversationId: Id, conversation: Partial) => {
set((state: ConversationState) => ({
...state,
conversationList: state.conversationList.map((item: Conversation) =>
@@ -78,13 +65,19 @@ export const useConversationStore = create()(
conversationList: state.conversationList.filter(filter),
}));
},
- updateTableName: (tableName: string) => {
- const currentConversation = get().getConversationById(
- get().currentConversationId
- );
+ updateSelectedTablesNameList: (selectedTableNameList: string[]) => {
+ const currentConversation = get().getConversationById(get().currentConversationId);
if (currentConversation) {
get().updateConversation(currentConversation.id, {
- tableName,
+ selectedTableNameList,
+ });
+ }
+ },
+ updateSelectedSchemaName: (selectedSchemaName: string) => {
+ const currentConversation = get().getConversationById(get().currentConversationId);
+ if (currentConversation) {
+ get().updateConversation(currentConversation.id, {
+ selectedSchemaName,
});
}
},
@@ -96,11 +89,7 @@ export const useConversationStore = create()(
let state = persistedState as ConversationState;
if (version === 0) {
for (const conversation of state.conversationList) {
- if (!conversation.connectionId) {
- conversation.assistantId = "general-bot";
- } else {
- conversation.assistantId = "sql-chat-bot";
- }
+ conversation.assistantId = SQLChatBotId;
}
state.currentConversationId = undefined;
}
diff --git a/src/store/message.ts b/src/store/message.ts
index f820879f..666b18cc 100644
--- a/src/store/message.ts
+++ b/src/store/message.ts
@@ -7,6 +7,7 @@ interface MessageState {
getState: () => MessageState;
addMessage: (message: Message) => void;
updateMessage: (messageId: Id, message: Partial) => void;
+ updateStatement: (messageId: Id, originalStatement: string, replacementStatement: string) => void;
clearMessage: (filter: (message: Message) => boolean) => void;
}
@@ -15,18 +16,24 @@ export const useMessageStore = create()(
(set, get) => ({
messageList: [],
getState: () => get(),
- addMessage: (message: Message) =>
- set((state) => ({ messageList: [...state.messageList, message] })),
+ addMessage: (message: Message) => set((state) => ({ messageList: [...state.messageList, message] })),
updateMessage: (messageId: Id, message: Partial) => {
set((state) => ({
...state,
- messageList: state.messageList.map((item) =>
- item.id === messageId ? { ...item, ...message } : item
- ),
+ messageList: state.messageList.map((item) => (item.id === messageId ? { ...item, ...message } : item)),
}));
},
- clearMessage: (filter: (message: Message) => boolean) =>
- set((state) => ({ messageList: state.messageList.filter(filter) })),
+ updateStatement: (messageId: Id, originalStatement: string, replacementStatement: string) => {
+ if (!originalStatement) return;
+ const newMessage = get().messageList.find((message) => message.id == messageId);
+ if (!newMessage) return;
+ newMessage.content = newMessage.content.replace(originalStatement, replacementStatement);
+ set((state) => ({
+ ...state,
+ messageList: state.messageList.map((item) => (item.id === messageId ? newMessage : item)),
+ }));
+ },
+ clearMessage: (filter: (message: Message) => boolean) => set((state) => ({ messageList: state.messageList.filter(filter) })),
}),
{
name: "message-storage",
diff --git a/src/store/query.ts b/src/store/query.ts
index 166b0383..81cb7a99 100644
--- a/src/store/query.ts
+++ b/src/store/query.ts
@@ -1,11 +1,12 @@
import { merge } from "lodash-es";
import { create } from "zustand";
import { persist } from "zustand/middleware";
-import { Connection, Database, Timestamp } from "@/types";
+import { Connection, Database, Id, Timestamp } from "@/types";
interface ExecuteQueryContext {
connection: Connection;
database?: Database;
+ messageId?: Id;
statement: string;
}
diff --git a/src/store/setting.ts b/src/store/setting.ts
index 9524faf4..b51abaac 100644
--- a/src/store/setting.ts
+++ b/src/store/setting.ts
@@ -10,6 +10,7 @@ const getDefaultSetting = (): Setting => {
openAIApiConfig: {
key: "",
endpoint: "",
+ model: "gpt-3.5-turbo",
},
};
};
@@ -54,8 +55,7 @@ export const useSettingStore = create()(
}),
{
name: "setting-storage",
- merge: (persistedState, currentState) =>
- merge(currentState, persistedState),
+ merge: (persistedState, currentState) => merge(currentState, persistedState),
}
)
);
diff --git a/src/types/connection.ts b/src/types/connection.ts
index 522eba5f..b7bb64c1 100644
--- a/src/types/connection.ts
+++ b/src/types/connection.ts
@@ -4,12 +4,18 @@ export enum Engine {
MySQL = "MYSQL",
PostgreSQL = "POSTGRESQL",
MSSQL = "MSSQL",
+ TiDB = "TiDB",
+ Snowflake = "SNOWFLAKE",
+ Hive = "HIVE",
+ OceanBase = "OCEANBASE",
}
export interface SSLOptions {
ca?: string;
cert?: string;
key?: string;
+ minVersion?: string;
+ rejectUnauthorized?: boolean;
}
export interface Connection {
diff --git a/src/types/conversation.ts b/src/types/conversation.ts
index d2e9cc0a..b629c922 100644
--- a/src/types/conversation.ts
+++ b/src/types/conversation.ts
@@ -4,7 +4,8 @@ export interface Conversation {
id: string;
connectionId?: Id;
databaseName?: string;
- tableName?: string;
+ selectedTableNameList?: string[];
+ selectedSchemaName?: string;
assistantId: Id;
title: string;
createdAt: Timestamp;
diff --git a/src/types/database.ts b/src/types/database.ts
index 2d86fdb9..30b12612 100644
--- a/src/types/database.ts
+++ b/src/types/database.ts
@@ -1,9 +1,8 @@
import { Id } from ".";
-
export interface Database {
connectionId: Id;
name: string;
- tableList: Table[];
+ schemaList: Schema[];
}
export interface Table {
@@ -11,4 +10,9 @@ export interface Table {
// structure is a string of the table structure.
// It's mainly used for providing a chat context for the assistant.
structure: string;
+ token?: number;
+}
+export interface Schema {
+ name: string;
+ tables: Table[];
}
diff --git a/src/types/index.ts b/src/types/index.ts
index dd3fd4cc..bdeb2706 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -9,3 +9,4 @@ export * from "./api";
export * from "./connector";
export * from "./assistant";
export * from "./quota";
+export * from "./subscription";
diff --git a/src/types/quota.ts b/src/types/quota.ts
index 6054f511..c742d0bb 100644
--- a/src/types/quota.ts
+++ b/src/types/quota.ts
@@ -2,8 +2,3 @@ export interface Quota {
current: number;
limit: number;
}
-
-// By month
-export const GUEST_QUOTA = 10;
-export const FREE_QUOTA = 25;
-export const PRO_QUOTA = 1000;
diff --git a/src/types/setting.ts b/src/types/setting.ts
index 636a85f2..886dbf26 100644
--- a/src/types/setting.ts
+++ b/src/types/setting.ts
@@ -5,6 +5,7 @@ export type Theme = "light" | "dark" | "system";
export interface OpenAIApiConfig {
key: string;
endpoint: string;
+ model: string;
}
export interface Setting {
diff --git a/src/types/subscription.ts b/src/types/subscription.ts
new file mode 100644
index 00000000..f3bbdc10
--- /dev/null
+++ b/src/types/subscription.ts
@@ -0,0 +1,39 @@
+import { SubscriptionPlan } from "@prisma/client";
+
+export type PlanType = SubscriptionPlan | "GUEST" | "FREE";
+
+// Quota is by month
+export const PlanConfig: {
+ [key: string]: {
+ quota: number;
+ };
+} = {
+ GUEST: {
+ quota: 0,
+ },
+ FREE: {
+ quota: 20,
+ },
+ PRO: {
+ quota: 1000,
+ },
+};
+
+export interface Subscription {
+ id: string;
+ plan: PlanType;
+ quota: number;
+ startAt: number;
+ expireAt: number;
+ canceledAt?: number;
+}
+
+export interface Payment {
+ id: string;
+ email: string;
+ createdAt: number;
+ amount: number;
+ currency: string;
+ receipt: string;
+ description: string;
+}
diff --git a/src/utils/event-emitter.ts b/src/utils/event-emitter.ts
new file mode 100644
index 00000000..268fe3a3
--- /dev/null
+++ b/src/utils/event-emitter.ts
@@ -0,0 +1,37 @@
+export type EventType = "usage.update";
+
+type Callback = () => void;
+
+class EventEmitter {
+ private static instance: EventEmitter;
+ private events: { [eventName: string]: Callback[] } = {};
+
+ private constructor() {}
+
+ public static getInstance(): EventEmitter {
+ if (!EventEmitter.instance) {
+ EventEmitter.instance = new EventEmitter();
+ }
+ return EventEmitter.instance;
+ }
+
+ on(eventName: EventType, callback: Callback) {
+ if (!this.events[eventName]) {
+ this.events[eventName] = [];
+ }
+ this.events[eventName].push(callback);
+ }
+
+ emit(eventName: EventType) {
+ const callbacks = this.events[eventName];
+ if (callbacks) {
+ callbacks.forEach((callback) => callback());
+ }
+ }
+}
+
+const getEventEmitter = () => {
+ return EventEmitter.getInstance();
+};
+
+export default getEventEmitter;
diff --git a/src/utils/execution.ts b/src/utils/execution.ts
index 905e9188..da5ab287 100644
--- a/src/utils/execution.ts
+++ b/src/utils/execution.ts
@@ -1,12 +1,11 @@
import { ExecutionResult } from "@/types";
-export const getMessageFromExecutionResult = (
- result: ExecutionResult
-): string => {
+export const getMessageFromExecutionResult = (result: ExecutionResult): string => {
if (result.error) {
return result.error;
}
- if (result.affectedRows) {
+ // Only return the "rows affected" message if there are no raw results to display
+ if (result.affectedRows && (!result.rawResult || result.rawResult.length === 0)) {
return `${result.affectedRows} rows affected.`;
}
return "";
diff --git a/src/utils/feature.ts b/src/utils/feature.ts
index 087b6dac..0ac417f7 100644
--- a/src/utils/feature.ts
+++ b/src/utils/feature.ts
@@ -1,8 +1,26 @@
-type FeatureType = "account" | "payment" | "quota";
+type FeatureType = "debug" | "account" | "payment" | "quota" | "collect";
-export const HasFeature = (feature: FeatureType) => {
- if (process.env.NODE_ENV === "development") {
- return true;
- }
- return false;
+export const hasDatabase = () => {
+ return process.env.NEXT_PUBLIC_USE_DATABASE == "true";
+};
+
+const matrix: { [key: string]: { [feature: string]: boolean } } = {
+ development: {
+ debug: true,
+ account: hasDatabase(),
+ payment: hasDatabase(),
+ quota: hasDatabase(),
+ collect: hasDatabase(),
+ },
+ production: {
+ debug: false,
+ account: hasDatabase(),
+ payment: hasDatabase(),
+ quota: hasDatabase(),
+ collect: hasDatabase(),
+ },
+};
+
+export const hasFeature = (feature: FeatureType) => {
+ return matrix[process.env.NODE_ENV][feature];
};
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 9d730bfb..5886fcbf 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -4,3 +4,6 @@ export * from "./sql";
export * from "./execution";
export * from "./model";
export * from "./feature";
+export * from "./tidb";
+export * from "./misc";
+export * from "./plan";
diff --git a/src/utils/misc.ts b/src/utils/misc.ts
new file mode 100644
index 00000000..a753dfda
--- /dev/null
+++ b/src/utils/misc.ts
@@ -0,0 +1,22 @@
+export const getCurrencySymbol = (currencyCode: string): string => {
+ try {
+ return new Intl.NumberFormat("en-US", {
+ style: "currency",
+ currency: currencyCode,
+ })
+ .formatToParts(1)
+ .find((part) => part.type === "currency")!.value;
+ } catch (error) {
+ console.error(`Invalid currency code: ${currencyCode}`);
+ return "";
+ }
+};
+
+export const getDateString = (timeStamp = Date.now()): string => {
+ const dateOptions: Intl.DateTimeFormatOptions = {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ };
+ return new Date(timeStamp).toLocaleDateString(undefined, dateOptions);
+};
diff --git a/src/utils/model.ts b/src/utils/model.ts
index af555a4b..2541de72 100644
--- a/src/utils/model.ts
+++ b/src/utils/model.ts
@@ -1,6 +1,55 @@
-export const gpt35 = {
+const gpt35turbo = {
name: "gpt-3.5-turbo",
temperature: 0,
frequency_penalty: 0.0,
presence_penalty: 0.0,
+ max_token: 4000,
+ cost_per_call: 1,
+};
+
+const gpt4 = {
+ name: "gpt-4",
+ temperature: 0,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ max_token: 8000,
+ cost_per_call: 60,
+};
+
+const gpt4turbo = {
+ name: "gpt-4-turbo",
+ temperature: 0,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ max_token: 4000,
+ cost_per_call: 20,
+};
+
+const gpt4ho = {
+ name: "gpt-4o",
+ temperature: 0,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ max_token: 4000,
+ cost_per_call: 10,
+};
+
+const deepseekChat = {
+ name: "deepseek-chat",
+ temperature: 0,
+ frequency_penalty: 0.0,
+ presence_penalty: 0.0,
+ max_token: 12000,
+ cost_per_call: 1,
+};
+
+export const models = [gpt35turbo, gpt4, gpt4turbo, gpt4ho, deepseekChat];
+
+export const getModel = (name: string) => {
+ for (const model of models) {
+ if (model.name === name) {
+ return model;
+ }
+ }
+ return gpt35turbo;
};
diff --git a/src/utils/openai.ts b/src/utils/openai.ts
index cc74b0e3..a152406d 100644
--- a/src/utils/openai.ts
+++ b/src/utils/openai.ts
@@ -1,12 +1,59 @@
import { encode } from "@nem035/gpt-3-encoder";
+import { Engine, Schema, Table } from "@/types";
// openAIApiKey is the API key for OpenAI API.
export const openAIApiKey = process.env.OPENAI_API_KEY;
// openAIApiEndpoint is the API endpoint for OpenAI API. Defaults to https://api.openai.com.
-export const openAIApiEndpoint =
- process.env.OPENAI_API_ENDPOINT || "https://api.openai.com";
+export const openAIApiEndpoint = process.env.OPENAI_API_ENDPOINT || "https://api.openai.com";
+
+// openAIOrganization a header to specify which organization is used for an API request.
+export const openAIOrganization = process.env.OPENAI_ORGANIZATION;
export const countTextTokens = (text: string) => {
return encode(text).length;
};
+
+export function generateDbPromptFromContext(
+ promptGenerator: (engine: Engine | undefined, schema: string | undefined) => string,
+ engine: Engine,
+ schemaList: Schema[],
+ selectedSchemaName: string,
+ selectedTableNameList: string[],
+ maxToken: number,
+ userPrompt?: string
+): string {
+ // userPrompt is the message that user want to send to bot. When to look prompt in drawer, userPrompt is undefined.
+ let tokens = countTextTokens(userPrompt || "");
+
+ // Empty table name(such as []) denote all table. [] and `undefined` both are false in `if`
+ // The above comment is out of date. [] is true in `if` now. And no selected table should not denote all table now.
+ // Because in have Token custom number in connectionSidebar. If [] denote all table. the Token will be inconsistent.
+ const tableList: string[] = [];
+ const selectedSchema = schemaList.find((schema: Schema) => schema.name == (selectedSchemaName || ""));
+ if (selectedTableNameList) {
+ selectedTableNameList.forEach((tableName: string) => {
+ const table = selectedSchema?.tables.find((table: Table) => table.name == tableName);
+ tableList.push(table!.structure);
+ });
+ } else {
+ for (const table of selectedSchema?.tables || []) {
+ tableList.push(table!.structure);
+ }
+ }
+
+ let finalTableList = [];
+ if (tableList) {
+ for (const table of tableList) {
+ if (tokens < maxToken / 2) {
+ tokens += countTextTokens(table + "\n\n");
+ finalTableList.push(table);
+ }
+ }
+ }
+ return promptGenerator(engine, finalTableList.join("\n\n"));
+}
+
+export function allowSelfOpenAIKey() {
+ return process.env.NEXT_PUBLIC_ALLOW_SELF_OPENAI_KEY == "true";
+}
diff --git a/src/utils/plan.ts b/src/utils/plan.ts
new file mode 100644
index 00000000..83536774
--- /dev/null
+++ b/src/utils/plan.ts
@@ -0,0 +1,22 @@
+export const getPlanFromPriceId = (priceId: string) => {
+ switch (priceId) {
+ case process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_MONTH_SUBSCRIPTION:
+ return {
+ month: 1,
+ description: "Pro 1 Month (Early Bird)",
+ };
+ case process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_3_MONTH_SUBSCRIPTION:
+ return {
+ month: 1,
+ description: "Pro 3 Months (Early Bird)",
+ };
+ case process.env.NEXT_PUBLIC_STRIPE_PRICE_ID_PRO_1_YEAR_SUBSCRIPTION:
+ return {
+ month: 12,
+ description: "Pro 1 Year (Early Bird)",
+ };
+ default: {
+ throw Error(`Invalid price ID ${priceId}`);
+ }
+ }
+};
diff --git a/src/utils/tidb.ts b/src/utils/tidb.ts
new file mode 100644
index 00000000..2d4d18ec
--- /dev/null
+++ b/src/utils/tidb.ts
@@ -0,0 +1,16 @@
+import { Connection } from "@/types";
+import { Engine } from "@/types/connection";
+
+export const changeTiDBConnectionToMySQL = (connection: Connection) => {
+ if (connection.engineType === Engine.TiDB) {
+ return {
+ ...connection,
+ engineType: Engine.MySQL,
+ ssl: {
+ minVersion: "TLSv1.2",
+ rejectUnauthorized: true,
+ },
+ };
+ }
+ return connection;
+};
diff --git a/tailwind.config.js b/tailwind.config.js
index c68b0430..fbb7a447 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,9 +1,6 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
- content: [
- "./src/pages/**/*.{js,ts,jsx,tsx}",
- "./src/components/**/*.{js,ts,jsx,tsx}",
- ],
+ content: ["./src/pages/**/*.{js,ts,jsx,tsx}", "./src/components/**/*.{js,ts,jsx,tsx}"],
darkMode: "class",
theme: {
extend: {
@@ -13,5 +10,5 @@ module.exports = {
},
},
},
- plugins: [require("@tailwindcss/typography")],
+ plugins: [require("@tailwindcss/typography"), require("tailwind-scrollbar-hide")],
};
diff --git a/tsconfig.json b/tsconfig.json
index 6344ce50..a62f1358 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,6 +18,6 @@
"@/*": ["./src/*"]
}
},
- "include": ["next-env.d.ts", "process.d.ts", "**/*.ts", "**/*.tsx"],
+ "include": ["next-env.d.ts", "process.d.ts", "auth.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}