diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..1ef3494 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,87 @@ +name: Build and Publish Docker Image + +on: + push: + branches: + - main + - develop + - "release/**" + - "hotfix/**" + tags: + - "v*.*.*" + pull_request: + branches: + - main + - develop + workflow_dispatch: + inputs: + version: + description: "Optional version override" + required: false + type: string + push_image: + description: "Push image to GHCR" + required: false + default: false + type: boolean + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Required for GitVersion + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: "10.0.x" + + - name: Install GitVersion + uses: gittools/actions/gitversion/setup@v0.10.2 + with: + versionSpec: "5.x" + + - name: Determine Version + id: set-version + uses: gittools/actions/gitversion/execute@v0.10.2 + with: + useConfigFile: true + + - name: Resolve Version + id: resolved-version + run: | + VERSION="${{ inputs.version }}" + if [ -z "$VERSION" ]; then + VERSION="${{ steps.set-version.outputs.semVer }}" + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + + - name: Login to GitHub Container Registry + if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image) + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build the Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: ${{ github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image) }} + tags: | + ghcr.io/${{ github.repository_owner }}/terraform-registry:${{ env.VERSION }} + ${{ github.ref == 'refs/heads/main' && format('ghcr.io/{0}/terraform-registry:latest', github.repository_owner) || '' }} + ${{ startsWith(github.ref, 'refs/heads/develop') && format('ghcr.io/{0}/terraform-registry:develop', github.repository_owner) || '' }} + ${{ startsWith(github.ref, 'refs/heads/release/') && format('ghcr.io/{0}/terraform-registry:release', github.repository_owner) || '' }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..cc839f9 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,49 @@ +name: Run Tests + +on: + push: + branches: + - main + - develop + - "release/**" + - "hotfix/**" + pull_request: + branches: + - main + - develop + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: "9.0.x" + + - name: Restore dependencies + run: dotnet restore + + - name: Build solution + run: dotnet build --no-restore --configuration Release + + - name: Run tests with coverage + run: dotnet test TerraformRegistry.Tests/TerraformRegistry.Tests.csproj --no-build --configuration Release --logger "trx;LogFileName=test_results.trx" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./TestResults/coverage.cobertura.xml + env: + ASPNETCORE_ENVIRONMENT: Test + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: code-coverage-report + path: TerraformRegistry.Tests/TestResults/coverage.cobertura.xml + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + files: TerraformRegistry.Tests/TestResults/coverage.cobertura.xml + token: ${{ secrets.CODECOV_TOKEN }} # Not required for public repos diff --git a/.gitignore b/.gitignore index 56a316a..d29da68 100644 --- a/.gitignore +++ b/.gitignore @@ -292,3 +292,24 @@ npm-debug.log yarn-error.log # End of https://www.toptal.com/developers/gitignore/api/dotnetcore,aspnetcore,dotenv,vuejs + +# Created by https://www.toptal.com/developers/gitignore/api/nuxtjs +# Edit at https://www.toptal.com/developers/gitignore?templates=nuxtjs + +### NuxtJS ### +# Generated dirs +dist +.nuxt +.nuxt-* +.output +.gen + +# Node dependencies +node_modules + +# System files +*.log + +# End of https://www.toptal.com/developers/gitignore/api/nuxtjs + +run-dev.ps1 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..53edcbf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine AS build +WORKDIR /app + + +# Copy solution and project files +COPY terraform-registry.sln ./ +COPY TerraformRegistry/TerraformRegistry.csproj TerraformRegistry/ +COPY TerraformRegistry.API/TerraformRegistry.API.csproj TerraformRegistry.API/ +COPY TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj TerraformRegistry.AzureBlob/ +COPY TerraformRegistry.Models/TerraformRegistry.Models.csproj TerraformRegistry.Models/ +COPY TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj TerraformRegistry.PostgreSQL/ +COPY TerraformRegistry.Tests/TerraformRegistry.Tests.csproj TerraformRegistry.Tests/ + +# Restore using the solution file +RUN dotnet restore terraform-registry.sln + +# Copy the rest of the source code +COPY . . + +WORKDIR /app/TerraformRegistry +RUN dotnet build TerraformRegistry.csproj -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish TerraformRegistry.csproj -c Release -o /app/publish /p:UseAppHost=false + +FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS final +WORKDIR /app +COPY --from=publish /app/publish . +# Create modules directory +RUN mkdir -p /app/modules +# Create web directory and copy static files +COPY TerraformRegistry/web /app/web +ENTRYPOINT ["dotnet", "TerraformRegistry.dll"] \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..78699ed --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,25 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build-env +WORKDIR /app + +# Copy csproj and restore dependencies +COPY ["TerraformRegistry/TerraformRegistry.csproj", "TerraformRegistry/"] +RUN dotnet restore "TerraformRegistry/TerraformRegistry.csproj" + +# Copy everything else +COPY . ./ + +# Set up for development +WORKDIR /app/TerraformRegistry +EXPOSE 80 +EXPOSE 443 + +# Create modules directory +RUN mkdir -p /app/modules + +# Use environment variables for configuration +ENV ASPNETCORE_ENVIRONMENT=Development +ENV DOTNET_USE_POLLING_FILE_WATCHER=1 +ENV ASPNETCORE_URLS=http://+:80;https://+:443 + +# Run in development mode with hot reload +ENTRYPOINT ["dotnet", "watch", "run", "--no-restore", "--urls", "http://+:80;https://+:443"] \ No newline at end of file diff --git a/GitVersion.yml b/GitVersion.yml new file mode 100644 index 0000000..dc2abe3 --- /dev/null +++ b/GitVersion.yml @@ -0,0 +1,26 @@ +mode: ContinuousDeployment +branches: + main: + tag: "" + increment: Patch + prevent-increment-of-merged-branch-version: true + track-merge-target: false + develop: + tag: beta + increment: Minor + prevent-increment-of-merged-branch-version: false + track-merge-target: true + release: + tag: rc + increment: None + prevent-increment-of-merged-branch-version: true + hotfix: + tag: fix + increment: Patch + prevent-increment-of-merged-branch-version: false + feature: + tag: feature-{BranchName} + increment: Inherit +ignore: + sha: [] +merge-message-formats: {} diff --git a/README.md b/README.md new file mode 100644 index 0000000..a41508f --- /dev/null +++ b/README.md @@ -0,0 +1,299 @@ +# Private Terraform Registry + +A lightweight, feature-rich private Terraform Registry implementation with full support for modules! + +[![.NET](https://img.shields.io/badge/.NET-10-purple?style=flat-square&logo=dotnet)](https://dotnet.microsoft.com/) +[![Docker](https://img.shields.io/badge/Docker-Ready-blue?style=flat-square&logo=docker)](https://docker.com/) +[![Azure](https://img.shields.io/badge/Azure-Compatible-0078d4?style=flat-square&logo=microsoftazure)](https://azure.microsoft.com/) + +## Features + +- Full Terraform Registry Protocol v1 for modules +- Built-in web UI and OpenAPI (Swagger) documentation +- OIDC Authentication for web portal (GitHub, Azure AD) +- API Token authentication for Terraform CLI (currently set via env vars) +- Local filesystem and Azure Blob Storage support +- PostgreSQL database +- Docker-ready deployment + +## Screenshots + +![Login](screenshots/login.png) +![Dashboard](screenshots/dashboard.png) +![Dashboard Settings](screenshots/dashboard_settings.png) + +## Quick Start + +### Using Docker (Recommended) + +```bash +# Run with local storage +docker run -p 5131:80 \ + -v ./modules:/app/modules \ + -e TF_REG_PORT=80 \ + -e TF_REG_BASEURL=http://localhost:5131 \ + -e TF_REG_AUTHORIZATIONTOKEN=your-secure-token \ + terraform-registry +``` + +### Using .NET CLI + +```bash +git clone +cd terraform-registry/TerraformRegistry +dotnet run +``` + +Visit `http://localhost:5131` to access the web interface! + +## API Endpoints + +### Service Discovery + +- `GET /.well-known/terraform.json` - Terraform service discovery endpoint + +### Module Operations + +- `GET /v1/modules` - List or search modules with filtering +- `GET /v1/modules/{namespace}/{name}/{provider}/{version}` - Get specific module details +- `GET /v1/modules/{namespace}/{name}/{provider}/versions` - Get all module versions +- `GET /v1/modules/{namespace}/{name}/{provider}/{version}/download` - Download specific version +- `GET /v1/modules/{namespace}/{name}/{provider}/download` - Download latest version +- `POST /v1/modules/{namespace}/{name}/{provider}/{version}` - Upload new module (auth required) + +### Documentation + +- `GET /swagger` - Interactive API documentation (when enabled) + +_Endpoints requiring authentication are marked accordingly._ + +## Configuration + +### Environment Variables + +Configure the application using environment variables (prefix with `TF_REG_`): + +| Variable | Description | Default | Required | Example | +| -------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------- | +| **Core Settings** | | | | +| `TF_REG_PORT` | Application port | `5131` | No | `80` | +| `TF_REG_BASEURL` | Registry base URL | `http://localhost:5131` | Yes | `https://registry.company.com` | +| `TF_REG_AUTHORIZATIONTOKEN` | API authentication token | - | Recommended | `your-secure-token-here` | +| **Database Settings** | | | | +| `TF_REG_DATABASEPROVIDER` | Database type (`sqlite`/`postgres`) | `sqlite` | No | `postgres` | +| `TF_REG_SQLITE__CONNECTIONSTRING` | SQLite connection string | `Data Source=terraform.db` | If using SQLite | `Data Source=/data/terraform.db` | +| `TF_REG_POSTGRESQL__CONNECTIONSTRING` | PostgreSQL connection | - | If using PostgreSQL | `Host=localhost;Database=tfregistry;...` | +| **Storage Settings** | | | | +| `TF_REG_STORAGEPROVIDER` | Storage type (`local`/`azure`) | `local` | No | `azure` | +| `TF_REG_MODULESTORAGEPATH` | Local storage path | `modules` | If using local | `/data/modules` | +| **Azure Storage Settings** | | | | +| `TF_REG_AZURESTORAGE__CONNECTIONSTRING` | Azure connection string | - | If using Azure | `DefaultEndpointsProtocol=https;...` | +| `TF_REG_AZURESTORAGE__ACCOUNTNAME` | Storage account name | - | If using Azure | `mystorageaccount` | +| `TF_REG_AZURESTORAGE__CONTAINERNAME` | Blob container name | `modules` | If using Azure | `terraform-modules` | +| `TF_REG_AZURESTORAGE__SASTOKENEXPIRYMINUTES` | SAS token expiry | `5` | No | `10` | +| **OIDC Authentication Settings** | | | | +| `TF_REG_OIDC__JWTSECRETKEY` | JWT signing key (min 32 chars) | - | Yes (for OIDC) | `your-256-bit-secret-key-here...` | +| `TF_REG_OIDC__PROVIDERS__GITHUB__CLIENTID` | GitHub OAuth App Client ID | - | If using GitHub | `Iv1.xxxxxxxxxxxx` | +| `TF_REG_OIDC__PROVIDERS__GITHUB__CLIENTSECRET` | GitHub OAuth App Client Secret | - | If using GitHub | `xxxxxxxxxxxx` | +| `TF_REG_OIDC__PROVIDERS__GITHUB__ENABLED` | Enable GitHub OIDC | `false` | No | `true` | +| `TF_REG_OIDC__PROVIDERS__AZUREAD__CLIENTID` | Azure AD App Client ID | - | If using Azure AD | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | +| `TF_REG_OIDC__PROVIDERS__AZUREAD__CLIENTSECRET` | Azure AD App Client Secret | - | If using Azure AD | `xxxxxxxxxxxx` | +| `TF_REG_OIDC__PROVIDERS__AZUREAD__ENABLED` | Enable Azure AD OIDC | `false` | No | `true` | +| `TF_REG_OIDC__PROVIDERS__AZUREAD__AUTHORIZATIONENDPOINT` | Azure AD auth URL (use tenant ID if single-tenant) | `https://login.microsoftonline.com/common/oauth2/v2.0/authorize` | If overriding | `https://login.microsoftonline.com//oauth2/v2.0/authorize` | +| `TF_REG_OIDC__PROVIDERS__AZUREAD__TOKENENDPOINT` | Azure AD token URL (use tenant ID if single-tenant) | `https://login.microsoftonline.com/common/oauth2/v2.0/token` | If overriding | `https://login.microsoftonline.com//oauth2/v2.0/token` | +| **Development Settings** | | | | +| `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | + +### Architecture Options + +#### Local Development + +```bash +# SQLite database (default) + local file storage +TF_REG_DATABASEPROVIDER=sqlite +TF_REG_SQLITE__CONNECTIONSTRING="Data Source=terraform.db" +TF_REG_STORAGEPROVIDER=local +TF_REG_MODULESTORAGEPATH=./modules +``` + +#### Production (PostgreSQL + Local) + +```bash +# PostgreSQL database + local file storage +TF_REG_DATABASEPROVIDER=postgres +TF_REG_POSTGRESQL__CONNECTIONSTRING=Host=db;Database=registry;... +TF_REG_STORAGEPROVIDER=local +TF_REG_MODULESTORAGEPATH=/data/modules +``` + +#### Cloud (PostgreSQL + Azure) + +```bash +# PostgreSQL database + Azure Blob Storage +TF_REG_DATABASEPROVIDER=postgres +TF_REG_POSTGRESQL__CONNECTIONSTRING=Host=db.postgres.database.azure.com;... +TF_REG_STORAGEPROVIDER=azure +TF_REG_AZURESTORAGE__CONNECTIONSTRING=DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=...;EndpointSuffix=core.windows.net +TF_REG_AZURESTORAGE__ACCOUNTNAME=mystorageaccount +TF_REG_AZURESTORAGE__CONTAINERNAME=modules +``` + +## Docker Deployment + +### Docker Compose Example + +```yaml +version: "3.8" +services: + terraform-registry: + image: terraform-registry + ports: + - "5131:80" + environment: + - TF_REG_PORT=80 + - TF_REG_BASEURL=https://registry.company.com + - TF_REG_DATABASEPROVIDER=postgres + - TF_REG_POSTGRESQL__CONNECTIONSTRING=Host=postgres;Database=registry;Username=user;Password=pass + - TF_REG_STORAGEPROVIDER=azure + - TF_REG_AZURESTORAGE__ACCOUNTNAME=mystorageaccount + - TF_REG_AUTHORIZATIONTOKEN=super-secure-token + depends_on: + - postgres + + postgres: + image: postgres:15 + environment: + - POSTGRES_DB=registry + - POSTGRES_USER=user + - POSTGRES_PASSWORD=pass + volumes: + - postgres_data:/var/lib/postgresql/data + +volumes: + postgres_data: +``` + +### Azure Container Instances + +```bash +az container create \ + --resource-group myResourceGroup \ + --name terraform-registry \ + --image terraform-registry \ + --dns-name-label terraform-registry \ + --ports 80 \ + --environment-variables \ + TF_REG_PORT=80 \ + TF_REG_BASEURL=https://terraform-registry.eastus.azurecontainer.io \ + TF_REG_STORAGEPROVIDER=azure \ + TF_REG_AZURESTORAGE__CONNECTIONSTRING="DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=...;EndpointSuffix=core.windows.net" \ + TF_REG_AZURESTORAGE__ACCOUNTNAME=mystorageaccount \ + --assign-identity \ + --scope /subscriptions/.../resourceGroups/.../providers/Microsoft.Storage/storageAccounts/mystorageaccount +``` + +## Usage with Terraform + +### Configure Terraform CLI + +Create or update `~/.terraformrc`: + +```hcl +host "registry.company.com" { + services = { + "modules.v1" = "/v1/modules/" + } + + credentials { + token = "your-auth-token-here" + } +} +``` + +### Use Modules in Terraform + +```hcl +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + } +} + +# Use a module from your private registry +module "vpc" { + source = "registry.company.com/myorg/vpc/aws" + version = "1.2.3" + + cidr_block = "10.0.0.0/16" + name = "my-vpc" +} +``` + +### Upload Modules + +```bash +# Create a module archive +tar -czf vpc-aws-1.2.3.tar.gz -C ./vpc-module . + +# Upload using curl +curl -X POST \ + -H "Authorization: Bearer your-auth-token" \ + -F "moduleFile=@vpc-aws-1.2.3.tar.gz" \ + -F "description=VPC module for AWS" \ + "https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3" +``` + +### Health Checks + +```bash +# Check service discovery +curl https://registry.company.com/.well-known/terraform.json + +# List available modules +curl https://registry.company.com/v1/modules + +# Check specific module +curl https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3 +``` + +## Development + +### Prerequisites + +- .NET 10 SDK +- PostgreSQL (optional, for database testing) +- Azure Storage Emulator (optional, for Azure testing) + +### Run Locally + +```bash +cd TerraformRegistry +dotnet restore +dotnet run +``` + +### Run Tests + +```bash +dotnet test +``` + +### Build Docker Image + +```bash +docker build -t terraform-registry . +``` + +## License + +This project is licensed under the MIT License - see the LICENSE file for details. + +## Support + +- Check the [API documentation](http://localhost:5131/swagger) when running locally +- Report issues on GitHub + +--- diff --git a/TerraformRegistry.API/Interfaces/IDatabaseService.cs b/TerraformRegistry.API/Interfaces/IDatabaseService.cs new file mode 100644 index 0000000..3049757 --- /dev/null +++ b/TerraformRegistry.API/Interfaces/IDatabaseService.cs @@ -0,0 +1,54 @@ +using TerraformRegistry.Models; + +namespace TerraformRegistry.API.Interfaces; + +/// +/// Interface for database services that store module metadata +/// +public interface IDatabaseService +{ + /// + /// Lists all modules based on search criteria + /// + Task ListModulesAsync(ModuleSearchRequest request); + + /// + /// Gets detailed information about a specific module + /// + Task GetModuleAsync(string @namespace, string name, string provider, string version); + + /// + /// Gets all versions of a specific module + /// + Task GetModuleVersionsAsync(string @namespace, string name, string provider); + + /// + /// Gets the storage path information for a specific module version + /// + Task GetModuleStorageAsync(string @namespace, string name, string provider, string version); + + /// + /// Adds a new module to the database + /// + Task AddModuleAsync(ModuleStorage module); + + /// + /// Removes a module from the database + /// + Task RemoveModuleAsync(ModuleStorage module); + + // User & API Key Methods + Task GetUserByEmailAsync(string email); + Task GetUserByIdAsync(string id); + Task AddUserAsync(User user); + Task UpdateUserAsync(User user); + Task DeleteUserAsync(string userId); + + Task AddApiKeyAsync(ApiKey apiKey); + Task GetApiKeyAsync(Guid id); + Task> GetApiKeysByUserAsync(string userId); + Task> GetSharedApiKeysAsync(); + Task> GetApiKeysByPrefixAsync(string prefix); + Task UpdateApiKeyAsync(ApiKey apiKey); + Task DeleteApiKeyAsync(ApiKey apiKey); +} \ No newline at end of file diff --git a/TerraformRegistry.API/Interfaces/IInitializableDb.cs b/TerraformRegistry.API/Interfaces/IInitializableDb.cs new file mode 100644 index 0000000..f320625 --- /dev/null +++ b/TerraformRegistry.API/Interfaces/IInitializableDb.cs @@ -0,0 +1,9 @@ +namespace TerraformRegistry.API.Interfaces; + +/// +/// Interface for services that can be explicitly initialized at startup. +/// +public interface IInitializableDb +{ + Task InitializeDatabase(); +} \ No newline at end of file diff --git a/TerraformRegistry.API/Interfaces/IModuleService.cs b/TerraformRegistry.API/Interfaces/IModuleService.cs new file mode 100644 index 0000000..b8555fa --- /dev/null +++ b/TerraformRegistry.API/Interfaces/IModuleService.cs @@ -0,0 +1,35 @@ +using TerraformRegistry.Models; + +namespace TerraformRegistry.API.Interfaces; + +/// +/// Interface for module operations in the Terraform Registry +/// +public interface IModuleService +{ + /// + /// Lists all modules + /// + Task ListModulesAsync(ModuleSearchRequest request); + + /// + /// Gets detailed information about a specific module + /// + Task GetModuleAsync(string @namespace, string name, string provider, string version); + + /// + /// Gets all versions of a specific module + /// + Task GetModuleVersionsAsync(string @namespace, string name, string provider); + + /// + /// Gets the download path for a specific module version + /// + Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, string version); + + /// + /// Uploads a new module + /// + Task UploadModuleAsync(string @namespace, string name, string provider, string version, Stream moduleContent, + string description, bool replace = false); +} \ No newline at end of file diff --git a/TerraformRegistry.API/ModuleService.cs b/TerraformRegistry.API/ModuleService.cs new file mode 100644 index 0000000..2b185a9 --- /dev/null +++ b/TerraformRegistry.API/ModuleService.cs @@ -0,0 +1,54 @@ +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; + +namespace TerraformRegistry.API; + +/// +/// Abstract base class for module services that implements SemVer validation +/// +public abstract class ModuleService : IModuleService +{ + /// + /// Lists all modules + /// + public abstract Task ListModulesAsync(ModuleSearchRequest request); + + /// + /// Gets detailed information about a specific module + /// + public abstract Task GetModuleAsync(string @namespace, string name, string provider, string version); + + /// + /// Gets all versions of a specific module + /// + public abstract Task GetModuleVersionsAsync(string @namespace, string name, string provider); + + /// + /// Gets the download path for a specific module version + /// + public abstract Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, + string version); + + /// + /// Uploads a new module with SemVer validation + /// + public async Task UploadModuleAsync(string @namespace, string name, string provider, string version, + Stream moduleContent, string description, bool replace = false) + { + // Validate the version string against SemVer 2.0.0 specification + if (!SemVerValidator.IsValid(version)) + throw new ArgumentException( + $"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]", + nameof(version)); + + // Delegate to the implementation-specific upload method + return await UploadModuleAsyncImpl(@namespace, name, provider, version, moduleContent, description, replace); + } + + /// + /// Implementation-specific method to upload a module after validation + /// + protected abstract Task UploadModuleAsyncImpl(string @namespace, string name, string provider, string version, + Stream moduleContent, string description, bool replace); +} \ No newline at end of file diff --git a/TerraformRegistry.API/TerraformRegistry.API.csproj b/TerraformRegistry.API/TerraformRegistry.API.csproj new file mode 100644 index 0000000..5fe5af1 --- /dev/null +++ b/TerraformRegistry.API/TerraformRegistry.API.csproj @@ -0,0 +1,13 @@ + + + + + + + + net10.0 + enable + enable + + + diff --git a/TerraformRegistry.API/Utilities/SemVerValidator.cs b/TerraformRegistry.API/Utilities/SemVerValidator.cs new file mode 100644 index 0000000..02835dc --- /dev/null +++ b/TerraformRegistry.API/Utilities/SemVerValidator.cs @@ -0,0 +1,137 @@ +using System.Text.RegularExpressions; + +namespace TerraformRegistry.API.Utilities; + +/// +/// Provides validation and parsing for Semantic Versioning 2.0.0. +/// For full specification, see: https://semver.org/ +/// +public static class SemVerValidator +{ + // SemVer 2.0.0 pattern + // Major.Minor.Patch[-Prerelease][+BuildMetadata] + private static readonly Regex SemVerPattern = new( + @"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$", + RegexOptions.Compiled); + + /// + /// Determines whether the specified version string is a valid SemVer 2.0.0. + /// + /// The version string to validate. + /// True if the string is a valid SemVer; otherwise, false. + public static bool IsValid(string version) + { + if (string.IsNullOrWhiteSpace(version)) + return false; + + return SemVerPattern.IsMatch(version); + } + + /// + /// Attempts to parse a version string into its semantic version components. + /// + /// The version string to parse. + /// When this method returns, contains the major version if successful; otherwise, 0. + /// When this method returns, contains the minor version if successful; otherwise, 0. + /// When this method returns, contains the patch version if successful; otherwise, 0. + /// When this method returns, contains the prerelease version if present; otherwise, null. + /// When this method returns, contains the build metadata if present; otherwise, null. + /// True if the version was successfully parsed; otherwise, false. + public static bool TryParse(string version, out int major, out int minor, out int patch, + out string? prerelease, out string? buildMetadata) + { + major = minor = patch = 0; + prerelease = buildMetadata = null; + + if (string.IsNullOrWhiteSpace(version)) + return false; + + var match = SemVerPattern.Match(version); + if (!match.Success) + return false; + + major = int.Parse(match.Groups[1].Value); + minor = int.Parse(match.Groups[2].Value); + patch = int.Parse(match.Groups[3].Value); + + if (match.Groups[4].Success) + prerelease = match.Groups[4].Value; + + if (match.Groups[5].Success) + buildMetadata = match.Groups[5].Value; + + return true; + } + + /// + /// Compares two semantic version strings. + /// + /// The first version. + /// The second version. + /// + /// A signed integer that indicates the relative values of version1 and version2: + /// Less than zero: version1 is less than version2. + /// Zero: version1 equals version2. + /// Greater than zero: version1 is greater than version2. + /// If either version is invalid, returns null. + /// + public static int? Compare(string version1, string version2) + { + if (!TryParse(version1, out var major1, out var minor1, out var patch1, out var prerelease1, out _) || + !TryParse(version2, out var major2, out var minor2, out var patch2, out var prerelease2, out _)) + return null; + + // Compare major.minor.patch + var result = major1.CompareTo(major2); + if (result != 0) return result; + + result = minor1.CompareTo(minor2); + if (result != 0) return result; + + result = patch1.CompareTo(patch2); + if (result != 0) return result; + + // Pre-release versions have lower precedence than the associated normal version + if (prerelease1 is null && prerelease2 is null) return 0; + if (prerelease1 is null) return 1; // 1.0.0 > 1.0.0-alpha + if (prerelease2 is null) return -1; // 1.0.0-alpha < 1.0.0 + + // Compare pre-release identifiers + return ComparePrerelease(prerelease1, prerelease2); + } + + private static int ComparePrerelease(string prerelease1, string prerelease2) + { + var identifiers1 = prerelease1.Split('.'); + var identifiers2 = prerelease2.Split('.'); + + var minLength = Math.Min(identifiers1.Length, identifiers2.Length); + + for (var i = 0; i < minLength; i++) + { + var id1 = identifiers1[i]; + var id2 = identifiers2[i]; + + var isNum1 = int.TryParse(id1, out var num1); + var isNum2 = int.TryParse(id2, out var num2); + + int result; + + // Numeric identifiers always have lower precedence than non-numeric identifiers + if (isNum1 && isNum2) + result = num1.CompareTo(num2); + else if (isNum1) + result = -1; // Numeric has lower precedence + else if (isNum2) + result = 1; // Non-numeric has higher precedence + else + result = string.Compare(id1, id2, StringComparison.Ordinal); + + if (result != 0) + return result; + } + + // A larger set of pre-release fields has a higher precedence + return identifiers1.Length.CompareTo(identifiers2.Length); + } +} \ No newline at end of file diff --git a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs new file mode 100644 index 0000000..cfc19ad --- /dev/null +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -0,0 +1,420 @@ +using Azure.Identity; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Azure.Storage.Sas; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; + +namespace TerraformRegistry.AzureBlob; + +// Added for Managed Identity + +/// +/// Implementation of a module service using Azure Blob Storage +/// +public class AzureBlobModuleService : ModuleService +{ + private readonly BlobContainerClient _containerClient; + private readonly string _containerName; + private readonly IDatabaseService _databaseService; + private readonly ILogger _logger; + private readonly int _sasTokenExpiryMinutes; + + public AzureBlobModuleService( + IConfiguration configuration, + IDatabaseService databaseService, + ILogger logger, + BlobServiceClient? blobServiceClient = null) + { + _databaseService = databaseService; + _logger = logger; + + // Get Azure Storage configuration values + _containerName = configuration["AzureStorage:ContainerName"] + ?? throw new ArgumentNullException("AzureStorage:ContainerName", + "Azure Storage container name is required."); + + _sasTokenExpiryMinutes = int.Parse(configuration["AzureStorage:SasTokenExpiryMinutes"] ?? "5"); + if (_sasTokenExpiryMinutes <= 0) + { + _logger.LogWarning( + "AzureStorage:SasTokenExpiryMinutes must be a positive integer, but was configured as {ConfiguredValue}. Defaulting to 5 minutes.", + _sasTokenExpiryMinutes); + _sasTokenExpiryMinutes = 5; + } + + BlobServiceClient clientToUse; + + if (blobServiceClient != null) + { + _logger.LogInformation("Using provided BlobServiceClient instance."); + clientToUse = blobServiceClient; + } + else + { + _logger.LogInformation("BlobServiceClient not provided; attempting to create one based on configuration."); + // Get Azure Storage connection settings from configuration + var connectionString = configuration["AzureStorage:ConnectionString"]; + var accountName = configuration["AzureStorage:AccountName"]; + + // Initialize Azure Blob Storage clients + if (string.IsNullOrEmpty(connectionString)) + { + if (string.IsNullOrEmpty(accountName)) + { + const string errorMessage = + "Azure Storage AccountName ('AzureStorage:AccountName') is required when connection string is not provided (for Managed Identity)."; + _logger.LogError(errorMessage); + throw new ArgumentNullException("AzureStorage:AccountName", errorMessage); + } + + _logger.LogInformation( + "Azure Storage connection string not found. Attempting to use Managed Identity for account: {AccountName}.", + accountName); + // Use Managed Identity + var blobServiceUri = new Uri($"https://{accountName}.blob.core.windows.net"); + clientToUse = new BlobServiceClient(blobServiceUri, new DefaultAzureCredential()); + } + else + { + _logger.LogInformation("Using Azure Storage connection string to create BlobServiceClient."); + clientToUse = new BlobServiceClient(connectionString); + } + } + + // Initialize Azure Blob Storage container client + _containerClient = clientToUse.GetBlobContainerClient(_containerName); + + // Ensure container exists + try + { + _logger.LogInformation("Ensuring blob container '{ContainerName}' exists...", _containerName); + _containerClient.CreateIfNotExists(); + _logger.LogInformation("Blob container '{ContainerName}' is ready.", _containerName); + } + catch (Exception ex) + { + _logger.LogError(ex, + "Failed to create or verify blob container '{ContainerName}'. This may prevent module operations.", + _containerName); + throw; // Re-throw as this is a critical failure for the service's operation. + } + } + + /// + /// Lists all modules based on search criteria + /// + public override Task ListModulesAsync(ModuleSearchRequest request) + { + return _databaseService.ListModulesAsync(request); + } + + /// + /// Gets detailed information about a specific module + /// + public override Task GetModuleAsync(string @namespace, string name, string provider, string version) + { + return _databaseService.GetModuleAsync(@namespace, name, provider, version); + } + + /// + /// Gets all versions of a specific module + /// + public override Task GetModuleVersionsAsync(string @namespace, string name, string provider) + { + return _databaseService.GetModuleVersionsAsync(@namespace, name, provider); + } + + /// + /// Gets the download URL for a specific module version using SAS token + /// + public override async Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, + string version) + { + // First query the database to get storage metadata + var moduleStorage = await _databaseService.GetModuleStorageAsync(@namespace, name, provider, version); + if (moduleStorage == null) + { + // Module not found in database + _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} not found in database"); + return null; + } + + try + { + // Get the blob path from storage metadata and generate a client + var blobPath = moduleStorage.FilePath; + var blobClient = _containerClient.GetBlobClient(blobPath); + + // Check if the blob exists in Azure Storage + if (!await blobClient.ExistsAsync()) + { + // This indicates data inconsistency - database record exists but no blob + _logger.LogWarning( + $"Module {@namespace}/{name}/{provider}/{version} exists in database but blob not found at {blobPath}"); + return null; + } + + // Create a SAS token that's valid for the specified time + var sasBuilder = new BlobSasBuilder + { + BlobContainerName = _containerName, + BlobName = blobPath, + Resource = "b", // b for blob + ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(_sasTokenExpiryMinutes) + }; + + sasBuilder.SetPermissions(BlobSasPermissions.Read); + + // Generate the SAS token URI that includes the full URL + var sasToken = blobClient.GenerateSasUri(sasBuilder); + + return sasToken.ToString(); + } + catch (Exception ex) + { + // Log any errors during SAS token generation + _logger.LogError(ex, $"Error generating SAS token for module {@namespace}/{name}/{provider}/{version}"); + return null; + } + } + + /// + /// Implementation-specific method to upload a module after validation + /// + /// + /// This method demonstrates the two-step storage process: + /// 1. Upload the actual module file to Azure Blob Storage + /// 2. Store the metadata and blob path reference in the PostgreSQL database + /// The database stores metadata and a reference to the blob path, while the + /// actual module content is stored in Azure Blob Storage. + /// + protected override async Task UploadModuleAsyncImpl(string @namespace, string name, string provider, + string version, Stream moduleContent, string description, bool replace) + { + // Create a consistent blob path format for easy retrieval + var blobPath = $"{@namespace}/{name}-{provider}-{version}.zip"; + var blobClient = _containerClient.GetBlobClient(blobPath); + + // Check if blob already exists to avoid duplication or allow replacement + if (await blobClient.ExistsAsync()) + { + if (!replace) + { + _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} already exists in blob storage"); + return false; + } + + // Replace requested: delete existing blob + try + { + await blobClient.DeleteIfExistsAsync(); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Failed to delete existing blob for {@namespace}/{name}/{provider}/{version}"); + return false; + } + } + + try + { + // Step 1: Upload the actual module content to Azure Blob Storage + // We store metadata in the blob properties for redundancy and easier recovery + await blobClient.UploadAsync(moduleContent, new BlobUploadOptions + { + Metadata = new Dictionary + { + { "namespace", @namespace }, + { "name", name }, + { "provider", provider }, + { "version", version }, + { "description", description }, + { "publishedAt", DateTime.UtcNow.ToString("o") } + } + }); + + // Step 2: Store module metadata in PostgreSQL database with a reference to the blob + var module = new ModuleStorage + { + Namespace = @namespace, + Name = name, + Provider = provider, + Version = version, + Description = description, + FilePath = blobPath, // This is the crucial link between database and blob storage + PublishedAt = DateTime.UtcNow, + Dependencies = new List() // Simplified, no dependencies + }; + + if (replace) + { + try + { + await _databaseService.RemoveModuleAsync(module); + } + catch + { + // ignore DB remove failures; Add will handle upsert where supported + } + } + + // Add to database - this stores metadata and the blob path reference + var result = await _databaseService.AddModuleAsync(module); + + if (!result) + { + // Clean up the blob if database insertion fails to maintain consistency + await blobClient.DeleteAsync(); + _logger.LogError( + $"Failed to add module {@namespace}/{name}/{provider}/{version} to database, cleaned up blob storage"); + } + + return result; + } + catch (Exception ex) + { + // Log any errors during upload + _logger.LogError(ex, $"Error uploading module {@namespace}/{name}/{provider}/{version}"); + + // Try to clean up the blob if an error occurred + try + { + if (await blobClient.ExistsAsync()) await blobClient.DeleteAsync(); + } + catch + { + // Ignore cleanup errors + } + + return false; + } + } + + /// + /// Scans the blob container and loads existing modules into memory + /// + /// + /// This method demonstrates the recovery capability of our architecture: + /// 1. If the database is missing metadata but the blobs exist, we can reconstruct the database entries + /// 2. It ensures consistency between what's in blob storage and what's in the database + /// 3. It helps with migration scenarios when moving from one database to another + /// + private async void LoadExistingModules() + { + try + { + _logger.LogInformation("Starting synchronization between Azure Blob Storage and PostgreSQL database..."); + var syncCount = 0; + + // List all blobs in the container + await foreach (var blobItem in _containerClient.GetBlobsAsync()) + try + { + // Get the blob client + var blobClient = _containerClient.GetBlobClient(blobItem.Name); + + // Get blob metadata + var properties = await blobClient.GetPropertiesAsync(); + + ModuleStorage? module = null; + + if (properties.Value.Metadata.Count > 0) + { + // Extract module information from metadata (preferred method) + var metadata = properties.Value.Metadata; + + if (metadata.TryGetValue("namespace", out var namespaceName) && + metadata.TryGetValue("name", out var moduleName) && + metadata.TryGetValue("provider", out var provider) && + metadata.TryGetValue("version", out var version) && + metadata.TryGetValue("description", out var description)) + // Create module storage object from blob metadata + module = new ModuleStorage + { + Namespace = namespaceName, + Name = moduleName, + Provider = provider, + Version = version, + Description = description, + FilePath = blobItem.Name, // Store reference to blob location + PublishedAt = properties.Value.LastModified.DateTime, + Dependencies = new List() // Simplified, no dependencies + }; + } + + // Fallback method: try to extract module information from the blob name pattern + if (module == null) + { + var pathParts = blobItem.Name.Split('/'); + if (pathParts.Length < 2) continue; + + var namespaceName = pathParts[0]; + var fileName = Path.GetFileNameWithoutExtension(pathParts[1]); + var parts = fileName.Split('-'); + + if (parts.Length < 3) continue; + + // Last part is version + var version = parts[^1]; + // Second last part is provider + var provider = parts[^2]; + // All remaining parts (if multiple) form the name + var name = string.Join("-", parts.Take(parts.Length - 2)); + + // Validate the version string against SemVer 2.0.0 specification + if (!SemVerValidator.IsValid(version)) continue; + + // Create module storage object from blob name + module = new ModuleStorage + { + Namespace = namespaceName, + Name = name, + Provider = provider, + Version = version, + Description = $"Module {name} for {provider} (auto-recovered)", + FilePath = blobItem.Name, // Store reference to blob location + PublishedAt = properties.Value.LastModified.DateTime, + Dependencies = new List() // Simplified, no dependencies + }; + } + + if (module != null) + { + // Check if this module already exists in the database + var existingModule = await _databaseService.GetModuleStorageAsync( + module.Namespace, module.Name, module.Provider, module.Version); + + if (existingModule == null) + { + // Module exists in blob storage but not in database - synchronize by adding to database + var result = await _databaseService.AddModuleAsync(module); + if (result) + { + syncCount++; + _logger.LogInformation( + $"Synchronized module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} from blob storage to database"); + } + } + } + } + catch (Exception ex) + { + // Log the error but continue processing other blobs + _logger.LogError(ex, $"Error processing blob {blobItem.Name}"); + } + + _logger.LogInformation( + $"Synchronization complete. Added {syncCount} modules from Azure Blob Storage to the database."); + } + catch (Exception ex) + { + // Log any errors during initialization + _logger.LogError(ex, "Error during blob storage/database synchronization"); + } + } +} \ No newline at end of file diff --git a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj new file mode 100644 index 0000000..59af2a1 --- /dev/null +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -0,0 +1,20 @@ + + + + + + + + net10.0 + enable + enable + + + + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry.Models/ApiKey.cs b/TerraformRegistry.Models/ApiKey.cs new file mode 100644 index 0000000..561248e --- /dev/null +++ b/TerraformRegistry.Models/ApiKey.cs @@ -0,0 +1,47 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +[Table("api_keys")] +public class ApiKey +{ + [Key] + [Column("id")] + public Guid Id { get; set; } = Guid.NewGuid(); + + [Column("user_id")] + [ForeignKey("User")] + public string UserId { get; set; } = string.Empty; + + [JsonIgnore] + public virtual User? User { get; set; } + + [Column("description")] + [Required] + [MaxLength(255)] + public string Description { get; set; } = string.Empty; + + [Column("token_hash")] + [Required] + [JsonIgnore] + public string TokenHash { get; set; } = string.Empty; + + [Column("prefix")] + [Required] + [MaxLength(10)] + public string Prefix { get; set; } = string.Empty; + + [Column("is_shared")] + public bool IsShared { get; set; } + + [Column("created_at")] + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; + + [Column("expires_at")] + public DateTime? ExpiresAt { get; set; } + + [Column("last_used_at")] + public DateTime? LastUsedAt { get; set; } +} diff --git a/TerraformRegistry.Models/Module.cs b/TerraformRegistry.Models/Module.cs new file mode 100644 index 0000000..1b6a763 --- /dev/null +++ b/TerraformRegistry.Models/Module.cs @@ -0,0 +1,37 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a module with detailed information +/// +public class Module +{ + [JsonPropertyName("id")] public required string Id { get; set; } + + [JsonPropertyName("owner")] public required string Owner { get; set; } + + [JsonPropertyName("namespace")] public required string Namespace { get; set; } + + [JsonPropertyName("name")] public required string Name { get; set; } + + [JsonPropertyName("version")] public required string Version { get; set; } + + [JsonPropertyName("provider")] public required string Provider { get; set; } + + [JsonPropertyName("description")] public string? Description { get; set; } + + [JsonPropertyName("source")] public string? Source { get; set; } + + [JsonPropertyName("published_at")] public required string PublishedAt { get; set; } + + [JsonPropertyName("versions")] public required List Versions { get; set; } + + [JsonPropertyName("root")] public required string Root { get; set; } + + [JsonPropertyName("submodules")] public required List Submodules { get; set; } + + [JsonPropertyName("providers")] public required Dictionary Providers { get; set; } + + [JsonPropertyName("download_url")] public string? DownloadUrl { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleList.cs b/TerraformRegistry.Models/ModuleList.cs new file mode 100644 index 0000000..c527bf2 --- /dev/null +++ b/TerraformRegistry.Models/ModuleList.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a response for module listing +/// +public class ModuleList +{ + [JsonPropertyName("modules")] public required List Modules { get; set; } + + [JsonPropertyName("meta")] public required Dictionary Meta { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleListItem.cs b/TerraformRegistry.Models/ModuleListItem.cs new file mode 100644 index 0000000..ab41cb7 --- /dev/null +++ b/TerraformRegistry.Models/ModuleListItem.cs @@ -0,0 +1,31 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a single module in a listing +/// +public class ModuleListItem +{ + [JsonPropertyName("id")] public required string Id { get; set; } + + [JsonPropertyName("owner")] public required string Owner { get; set; } + + [JsonPropertyName("namespace")] public required string Namespace { get; set; } + + [JsonPropertyName("name")] public required string Name { get; set; } + + [JsonPropertyName("version")] public required string Version { get; set; } + + [JsonPropertyName("provider")] public required string Provider { get; set; } + + [JsonPropertyName("description")] public string? Description { get; set; } + + [JsonPropertyName("source")] public string? Source { get; set; } + + [JsonPropertyName("published_at")] public required string PublishedAt { get; set; } + + [JsonPropertyName("versions")] public required List Versions { get; set; } + + [JsonPropertyName("download_url")] public required string DownloadUrl { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleMetadata.cs b/TerraformRegistry.Models/ModuleMetadata.cs new file mode 100644 index 0000000..fab98c4 --- /dev/null +++ b/TerraformRegistry.Models/ModuleMetadata.cs @@ -0,0 +1,17 @@ +namespace TerraformRegistry.Models; + +/// +/// Represents metadata for a Terraform module +/// +public class ModuleMetadata +{ + /// + /// Description of the module + /// + public string? Description { get; set; } + + /// + /// Additional properties for module metadata + /// + public Dictionary? Properties { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleSearchRequest.cs b/TerraformRegistry.Models/ModuleSearchRequest.cs new file mode 100644 index 0000000..97f6957 --- /dev/null +++ b/TerraformRegistry.Models/ModuleSearchRequest.cs @@ -0,0 +1,19 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a request to search for modules +/// +public class ModuleSearchRequest +{ + [JsonPropertyName("q")] public string? Q { get; set; } + + [JsonPropertyName("namespace")] public string? Namespace { get; set; } + + [JsonPropertyName("provider")] public string? Provider { get; set; } + + [JsonPropertyName("offset")] public int Offset { get; set; } = 0; + + [JsonPropertyName("limit")] public int Limit { get; set; } = 10; +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleStorage.cs b/TerraformRegistry.Models/ModuleStorage.cs new file mode 100644 index 0000000..0a75384 --- /dev/null +++ b/TerraformRegistry.Models/ModuleStorage.cs @@ -0,0 +1,17 @@ +namespace TerraformRegistry.Models; + +/// +/// Represents a module storage model for internal use +/// +public class ModuleStorage +{ + // Internal model, no need for JSON attributes + public required string Namespace { get; set; } + public required string Name { get; set; } + public required string Provider { get; set; } + public required string Version { get; set; } + public required string Description { get; set; } + public required string FilePath { get; set; } + public DateTime PublishedAt { get; set; } = DateTime.UtcNow; + public required List Dependencies { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleSubmodule.cs b/TerraformRegistry.Models/ModuleSubmodule.cs new file mode 100644 index 0000000..6b1533d --- /dev/null +++ b/TerraformRegistry.Models/ModuleSubmodule.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a submodule within a module +/// +public class ModuleSubmodule +{ + [JsonPropertyName("path")] public required string Path { get; set; } + + [JsonPropertyName("providers")] public required Dictionary Providers { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ModuleVersions.cs b/TerraformRegistry.Models/ModuleVersions.cs new file mode 100644 index 0000000..49e5951 --- /dev/null +++ b/TerraformRegistry.Models/ModuleVersions.cs @@ -0,0 +1,28 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a module version in the versions response +/// +public class VersionInfo +{ + [JsonPropertyName("version")] public required string Version { get; set; } +} + +/// +/// Represents a module in the versions response +/// +public class ModuleVersionInfo +{ + [JsonPropertyName("versions")] public required List Versions { get; set; } +} + +/// +/// Represents the response structure for module versions +/// Format follows Terraform Registry protocol specification +/// +public class ModuleVersions +{ + [JsonPropertyName("modules")] public required List Modules { get; set; } = new(); +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ServiceDiscovery.cs b/TerraformRegistry.Models/ServiceDiscovery.cs new file mode 100644 index 0000000..14bb955 --- /dev/null +++ b/TerraformRegistry.Models/ServiceDiscovery.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace TerraformRegistry.Models; + +/// +/// Represents a service discovery response for Terraform Registry +/// +public class ServiceDiscovery +{ + [JsonPropertyName("modules.v1")] + public string ModulesV1 { get; set; } = "/v1/modules/"; + + // [JsonPropertyName("providers.v1")] + // public string ProvidersV1 { get; set; } = "/v1/providers/"; +} \ No newline at end of file diff --git a/TerraformRegistry.Models/TerraformRegistry.Models.csproj b/TerraformRegistry.Models/TerraformRegistry.Models.csproj new file mode 100644 index 0000000..237d661 --- /dev/null +++ b/TerraformRegistry.Models/TerraformRegistry.Models.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/TerraformRegistry.Models/UploadModuleResponse.cs b/TerraformRegistry.Models/UploadModuleResponse.cs new file mode 100644 index 0000000..7b7c392 --- /dev/null +++ b/TerraformRegistry.Models/UploadModuleResponse.cs @@ -0,0 +1,4 @@ +public class UploadModuleResponse +{ + public string Filename { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/TerraformRegistry.Models/User.cs b/TerraformRegistry.Models/User.cs new file mode 100644 index 0000000..baa0d1d --- /dev/null +++ b/TerraformRegistry.Models/User.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace TerraformRegistry.Models; + +[Table("users")] +public class User +{ + [Key] + [Column("id")] + public string Id { get; set; } = Guid.NewGuid().ToString(); + + [Column("email")] + [Required] + [MaxLength(255)] + public string Email { get; set; } = string.Empty; + + [Column("provider")] + [Required] + [MaxLength(50)] + public string Provider { get; set; } = string.Empty; // e.g. "github", "azuread" + + [Column("provider_id")] + [Required] + [MaxLength(255)] + public string ProviderId { get; set; } = string.Empty; + + [Column("created_at")] + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; + + [Column("updated_at")] + public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; +} diff --git a/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs new file mode 100644 index 0000000..9b2c506 --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs @@ -0,0 +1,24 @@ +using Npgsql; + +namespace TerraformRegistry.PostgreSQL.Migrations; + +/// +/// Interface for database migrations +/// +public interface IDatabaseMigration +{ + /// + /// Gets the migration version in SemVer format (e.g. 1.0.0) + /// + string Version { get; } + + /// + /// Gets a description of what this migration does + /// + string Description { get; } + + /// + /// Applies the migration to the database + /// + Task ApplyAsync(NpgsqlConnection connection, NpgsqlTransaction transaction); +} \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs new file mode 100644 index 0000000..dd54030 --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs @@ -0,0 +1,188 @@ +using System.Reflection; +using Microsoft.Extensions.Logging; +using Npgsql; + +namespace TerraformRegistry.PostgreSQL.Migrations; + +/// +/// Manages database migrations +/// +public class MigrationManager +{ + private const string SchemaVersionTable = "schema_version"; + private readonly ILogger _logger; + private readonly List _migrations = new(); + + /// + /// Initializes a new instance of the MigrationManager class + /// + public MigrationManager(ILogger logger) + { + _logger = logger; + // Discover all migration implementations in the assembly + DiscoverMigrations(); + } + + /// + /// Uses reflection to find all classes that implement IDatabaseMigration + /// + private void DiscoverMigrations() + { + var migrationType = typeof(IDatabaseMigration); + + // Find all non-abstract classes that implement IDatabaseMigration in the current assembly + var migrationTypes = Assembly.GetExecutingAssembly() + .GetTypes() + .Where(t => t.IsClass && !t.IsAbstract && migrationType.IsAssignableFrom(t)); + + foreach (var type in migrationTypes) + // Create an instance of each migration class and add it to our list + if (Activator.CreateInstance(type) is IDatabaseMigration migration) + _migrations.Add(migration); + + // Sort migrations by version + _migrations.Sort((a, b) => CompareVersions(a.Version, b.Version)); + } + + /// + /// Compares two version strings (SemVer format) + /// + private int CompareVersions(string versionA, string versionB) + { + var partsA = versionA.Split('.').Select(int.Parse).ToArray(); + var partsB = versionB.Split('.').Select(int.Parse).ToArray(); + + // Compare major version + var majorComparison = partsA[0].CompareTo(partsB[0]); + if (majorComparison != 0) return majorComparison; + + // Compare minor version + var minorComparison = partsA[1].CompareTo(partsB[1]); + if (minorComparison != 0) return minorComparison; + + // Compare patch version + return partsA[2].CompareTo(partsB[2]); + } + + /// + /// Checks if the database needs initialization by looking for a version table + /// + public async Task NeedsInitializationAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) + { + try + { + // Check if the schema_version table exists + var sql = $@" + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_schema = 'public' + AND table_name = '{SchemaVersionTable}' + );"; + + await using var command = new NpgsqlCommand(sql, connection); + var tableExists = (bool)await command.ExecuteScalarAsync(cancellationToken); + + if (!tableExists) return true; // Database needs initialization (table doesn't exist) + + // Check if there are any migrations to run + return await HasPendingMigrationsAsync(connection, cancellationToken); + } + catch (PostgresException) + { + // If we got an exception, the database likely needs initialization + return true; + } + } + + /// + /// Checks if there are any pending migrations that need to be applied + /// + private async Task HasPendingMigrationsAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) + { + // Get the current database schema version + var currentVersion = await GetCurrentVersionAsync(connection, cancellationToken); + + // Check if there are any migrations with a higher version + return _migrations.Any(m => CompareVersions(m.Version, currentVersion) > 0); + } + + /// + /// Gets the current version of the database schema + /// + private async Task GetCurrentVersionAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) + { + try + { + var sql = $"SELECT version FROM {SchemaVersionTable} ORDER BY applied_at DESC LIMIT 1;"; + await using var command = new NpgsqlCommand(sql, connection); + var result = await command.ExecuteScalarAsync(cancellationToken); + return result?.ToString() ?? "0.0.0"; + } + catch + { + // If there's any error, assume it's a new database + return "0.0.0"; + } + } + + /// + /// Initializes the database schema and applies all pending migrations + /// + public async Task InitializeDatabaseAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) + { + // Create the schema_version table if it doesn't exist + var createVersionTableSql = $@" + CREATE TABLE IF NOT EXISTS {SchemaVersionTable} ( + id SERIAL PRIMARY KEY, + version VARCHAR(50) NOT NULL, + applied_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + description TEXT + );"; + + await using (var command = new NpgsqlCommand(createVersionTableSql, connection, transaction)) + { + await command.ExecuteNonQueryAsync(); + } + + // Get the current database version + var currentVersion = await GetCurrentVersionAsync(connection); + + // Apply all migrations that have a higher version than the current version + foreach (var migration in _migrations.Where(m => CompareVersions(m.Version, currentVersion) > 0)) + await ApplyMigrationAsync(connection, transaction, migration); + } + + /// + /// Applies a single migration and records its version + /// + private async Task ApplyMigrationAsync(NpgsqlConnection connection, NpgsqlTransaction transaction, + IDatabaseMigration migration) + { + try + { + // Apply the migration + await migration.ApplyAsync(connection, transaction); + + // Record that this migration was applied + var insertVersionSql = $@" + INSERT INTO {SchemaVersionTable} (version, description) + VALUES (@version, @description);"; + + await using var versionCommand = new NpgsqlCommand(insertVersionSql, connection, transaction); + versionCommand.Parameters.AddWithValue("@version", migration.Version); + versionCommand.Parameters.AddWithValue("@description", migration.Description); + await versionCommand.ExecuteNonQueryAsync(); + + _logger.LogInformation("Applied database migration to version {Version}: {Description}", migration.Version, + migration.Description); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error applying migration to version {Version}", migration.Version); + throw; + } + } +} \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs new file mode 100644 index 0000000..7c56d3b --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs @@ -0,0 +1,114 @@ +namespace TerraformRegistry.PostgreSQL.Migrations; + +using Npgsql; + +/// +/// Initial database +/// Creates the core module storage tables, adds metadata, and download tracking. +/// +public class Migration_1_0_0 : IDatabaseMigration // Keep class name for simplicity, but update version/desc +{ + /// + /// Gets the migration version in SemVer format + /// + public string Version => "1.0.0"; // Updated version + + /// + /// Gets a description of what this migration does + /// + public string Description => "Initial schema"; + + /// + /// Applies the migration to the database + /// + public async Task ApplyAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) + { + var combinedSql = @" + -- Migration 1.0.0: Initial schema creation + CREATE TABLE IF NOT EXISTS modules ( + id SERIAL PRIMARY KEY, + namespace VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + version VARCHAR(50) NOT NULL, + description TEXT, + storage_path TEXT NOT NULL, + published_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + dependencies JSONB NOT NULL DEFAULT '[]', + metadata JSONB NOT NULL DEFAULT '{}', + CONSTRAINT module_unique_constraint UNIQUE (namespace, name, provider, version) + ); + + -- Create indexes for faster searches + CREATE INDEX IF NOT EXISTS idx_module_namespace ON modules(namespace); + CREATE INDEX IF NOT EXISTS idx_module_name ON modules(name); + CREATE INDEX IF NOT EXISTS idx_module_provider ON modules(provider); + CREATE INDEX IF NOT EXISTS idx_module_version ON modules(version); + -- Create an index for efficient JSON queries on metadata + CREATE INDEX IF NOT EXISTS idx_module_metadata ON modules USING GIN (metadata); + + -- Create downloads table + CREATE TABLE IF NOT EXISTS module_downloads ( + id SERIAL PRIMARY KEY, + module_id INTEGER REFERENCES modules(id), + namespace VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + version VARCHAR(50) NOT NULL, + download_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + client_ip VARCHAR(50), + user_agent TEXT + ); + + -- Create indexes for faster queries + CREATE INDEX IF NOT EXISTS idx_downloads_module_id ON module_downloads(module_id); + CREATE INDEX IF NOT EXISTS idx_downloads_namespace ON module_downloads(namespace); + CREATE INDEX IF NOT EXISTS idx_downloads_name ON module_downloads(name); + CREATE INDEX IF NOT EXISTS idx_downloads_provider ON module_downloads(provider); + CREATE INDEX IF NOT EXISTS idx_downloads_time ON module_downloads(download_time); + + -- Create function to record a download + CREATE OR REPLACE FUNCTION record_module_download( + p_namespace VARCHAR(255), + p_name VARCHAR(255), + p_provider VARCHAR(255), + p_version VARCHAR(50), + p_client_ip VARCHAR(50), + p_user_agent TEXT + ) + RETURNS VOID AS $$ + DECLARE + module_id INTEGER; + BEGIN + -- Find the module ID + SELECT id INTO module_id FROM modules + WHERE namespace = p_namespace + AND name = p_name + AND provider = p_provider + AND version = p_version; + + -- Insert the download record + INSERT INTO module_downloads ( + module_id, + namespace, + name, + provider, + version, + client_ip, + user_agent + ) VALUES ( + module_id, + p_namespace, + p_name, + p_provider, + p_version, + p_client_ip, + p_user_agent + ); + END; + $$ LANGUAGE plpgsql;"; + + await using var command = new NpgsqlCommand(combinedSql, connection, transaction); + await command.ExecuteNonQueryAsync(); + } +} \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_1.cs b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_1.cs new file mode 100644 index 0000000..e11f5ec --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_1.cs @@ -0,0 +1,48 @@ +namespace TerraformRegistry.PostgreSQL.Migrations; + +using Npgsql; + +/// +/// Adds User and ApiKey tables +/// +public class Migration_1_0_1 : IDatabaseMigration +{ + public string Version => "1.0.1"; + public string Description => "Add users and api_keys tables"; + + public async Task ApplyAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) + { + var sql = @" + CREATE TABLE IF NOT EXISTS users ( + id VARCHAR(255) PRIMARY KEY, + email VARCHAR(255) NOT NULL, + provider VARCHAR(50) NOT NULL, + provider_id VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT uq_users_email UNIQUE (email), + CONSTRAINT uq_users_provider_id UNIQUE (provider, provider_id) + ); + + CREATE TABLE IF NOT EXISTS api_keys ( + id UUID PRIMARY KEY, + user_id VARCHAR(255) NOT NULL REFERENCES users(id) ON DELETE CASCADE, + description VARCHAR(255) NOT NULL, + token_hash TEXT NOT NULL, + prefix VARCHAR(10) NOT NULL, + is_shared BOOLEAN NOT NULL DEFAULT FALSE, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + expires_at TIMESTAMP WITH TIME ZONE, + last_used_at TIMESTAMP WITH TIME ZONE + ); + + CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); + CREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON api_keys(user_id); + CREATE INDEX IF NOT EXISTS idx_api_keys_prefix ON api_keys(prefix); + CREATE INDEX IF NOT EXISTS idx_api_keys_is_shared ON api_keys(is_shared); -- Optimization for shared key lookups + "; + + await using var command = new NpgsqlCommand(sql, connection, transaction); + await command.ExecuteNonQueryAsync(); + } +} diff --git a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs new file mode 100644 index 0000000..1dd9b8d --- /dev/null +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -0,0 +1,667 @@ +using System.Text.Json; +using Microsoft.Extensions.Logging; +using Npgsql; +using NpgsqlTypes; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.PostgreSQL.Migrations; + +namespace TerraformRegistry.PostgreSQL; + +/// +/// Implementation of a database service using PostgreSQL +/// +public class PostgreSqlDatabaseService : IDatabaseService, IInitializableDb +{ + private readonly string _baseUrl; + private readonly string _connectionString; + private readonly ILogger _logger; + private readonly MigrationManager _migrationManager; + + public PostgreSqlDatabaseService(string connectionString, string baseUrl, ILogger logger, + MigrationManager migrationManager) + { + _connectionString = connectionString; + _baseUrl = baseUrl; + _migrationManager = migrationManager; + _logger = logger; + } + + /// + /// Lists all modules based on search criteria + /// + public async Task ListModulesAsync(ModuleSearchRequest request) + { + var modules = new List(); + var conditions = new List(); + var parameters = new List(); + var paramCounter = 0; + + var sql = @" + WITH latest_versions AS ( + SELECT + namespace, + name, + provider, + MAX(version) AS latest_version + FROM + modules + GROUP BY + namespace, name, provider + ) + SELECT + m.namespace, + m.name, + m.provider, + m.version, + m.description, + m.storage_path, + m.published_at, + ARRAY( + SELECT version + FROM modules + WHERE + namespace = m.namespace AND + name = m.name AND + provider = m.provider + ORDER BY version DESC + ) AS versions + FROM + modules m + INNER JOIN + latest_versions lv ON + m.namespace = lv.namespace AND + m.name = lv.name AND + m.provider = lv.provider AND + m.version = lv.latest_version + WHERE 1=1"; + + if (!string.IsNullOrWhiteSpace(request.Q)) + { + conditions.Add($" AND (m.name ILIKE @p{paramCounter} OR m.description ILIKE @p{paramCounter})"); + parameters.Add(new NpgsqlParameter($"@p{paramCounter}", $"%{request.Q}%")); + paramCounter++; + } + + if (!string.IsNullOrWhiteSpace(request.Namespace)) + { + conditions.Add($" AND m.namespace = @p{paramCounter}"); + parameters.Add(new NpgsqlParameter($"@p{paramCounter}", request.Namespace)); + paramCounter++; + } + + if (!string.IsNullOrWhiteSpace(request.Provider)) + { + conditions.Add($" AND m.provider = @p{paramCounter}"); + parameters.Add(new NpgsqlParameter($"@p{paramCounter}", request.Provider)); + paramCounter++; + } + + sql += string.Join(" ", conditions); + sql += $" ORDER BY m.namespace, m.name, m.provider LIMIT @p{paramCounter} OFFSET @p{paramCounter + 1}"; + parameters.Add(new NpgsqlParameter($"@p{paramCounter}", request.Limit)); + parameters.Add(new NpgsqlParameter($"@p{paramCounter + 1}", request.Offset)); + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddRange(parameters.ToArray()); + + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + var namespace_ = reader.GetString(0); + var name = reader.GetString(1); + var provider = reader.GetString(2); + var version = reader.GetString(3); + var description = reader.GetString(4); + var publishedAt = reader.GetDateTime(6); + var versions = reader.GetFieldValue(7); + + modules.Add(new ModuleListItem + { + Id = $"{namespace_}/{name}/{provider}", + Owner = namespace_, + Namespace = namespace_, + Name = name, + Version = version, + Provider = provider, + Description = description, + PublishedAt = publishedAt.ToString("o"), + Versions = versions.ToList(), + DownloadUrl = $"{_baseUrl}/v1/modules/{namespace_}/{name}/{provider}/{version}/download" + }); + } + + return new ModuleList + { + Modules = modules, + Meta = new Dictionary + { + { "limit", request.Limit.ToString() }, + { "current_offset", request.Offset.ToString() } + } + }; + } + + /// + /// Gets detailed information about a specific module + /// + public async Task GetModuleAsync(string @namespace, string name, string provider, string version) + { + var sql = @" + SELECT + namespace, + name, + provider, + version, + description, + storage_path, + published_at, + dependencies, + ( + SELECT + ARRAY( + SELECT version + FROM modules + WHERE + namespace = m.namespace AND + name = m.name AND + provider = m.provider + ORDER BY version DESC + ) + ) AS versions + FROM + modules m + WHERE + namespace = @namespace AND + name = @name AND + provider = @provider AND + version = @version"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@namespace", @namespace); + command.Parameters.AddWithValue("@name", name); + command.Parameters.AddWithValue("@provider", provider); + command.Parameters.AddWithValue("@version", version); + + await using var reader = await command.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) + return null; + + var dependenciesJson = reader.GetString(7); + var dependencies = JsonSerializer.Deserialize>(dependenciesJson) ?? new List(); + var versions = reader.GetFieldValue(8); + + return new Module + { + Id = $"{@namespace}/{name}/{provider}/{version}", + Owner = @namespace, + Namespace = @namespace, + Name = name, + Version = version, + Provider = provider, + Description = reader.GetString(4), + Source = $"{_baseUrl}/{@namespace}/{name}", + PublishedAt = reader.GetDateTime(6).ToString("o"), + DownloadUrl = $"{_baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download", + Versions = versions.ToList(), + Root = "main", + Submodules = new List(), + Providers = new Dictionary + { + { provider, "*" } + } + }; + } + + /// + /// Gets all versions of a specific module + /// + public async Task GetModuleVersionsAsync(string @namespace, string name, string provider) + { + var sql = @" + SELECT + version + FROM + modules + WHERE + namespace = @namespace AND + name = @name AND + provider = @provider + ORDER BY + version DESC"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@namespace", @namespace); + command.Parameters.AddWithValue("@name", name); + command.Parameters.AddWithValue("@provider", provider); + + var versions = new List(); + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); + + return new ModuleVersions + { + Modules = new List + { + new ModuleVersionInfo + { + Versions = versions.Select(v => new VersionInfo { Version = v }).ToList() + } + } + }; + } + + /// + /// Gets the storage path information for a specific module version + /// + public async Task GetModuleStorageAsync(string @namespace, string name, string provider, + string version) + { + var sql = @" + SELECT + namespace, + name, + provider, + version, + description, + storage_path, + published_at, + dependencies + FROM + modules + WHERE + namespace = @namespace AND + name = @name AND + provider = @provider AND + version = @version"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@namespace", @namespace); + command.Parameters.AddWithValue("@name", name); + command.Parameters.AddWithValue("@provider", provider); + command.Parameters.AddWithValue("@version", version); + + await using var reader = await command.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) + return null; + + var dependenciesJson = reader.GetString(7); + var dependencies = JsonSerializer.Deserialize>(dependenciesJson) ?? new List(); + + return new ModuleStorage + { + Namespace = reader.GetString(0), + Name = reader.GetString(1), + Provider = reader.GetString(2), + Version = reader.GetString(3), + Description = reader.GetString(4), + FilePath = reader.GetString(5), + PublishedAt = reader.GetDateTime(6), + Dependencies = dependencies + }; + } + + /// + /// Adds a new module to the database + /// + public async Task AddModuleAsync(ModuleStorage module) + { + var sql = @" + INSERT INTO modules ( + namespace, + name, + provider, + version, + description, + storage_path, + published_at, + dependencies + ) + VALUES ( + @namespace, + @name, + @provider, + @version, + @description, + @storagePath, + @publishedAt, + @dependencies + ) + ON CONFLICT (namespace, name, provider, version) + DO UPDATE SET + description = @description, + storage_path = @storagePath, + dependencies = @dependencies + RETURNING id"; + + try + { + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@namespace", module.Namespace); + command.Parameters.AddWithValue("@name", module.Name); + command.Parameters.AddWithValue("@provider", module.Provider); + command.Parameters.AddWithValue("@version", module.Version); + command.Parameters.AddWithValue("@description", module.Description); + command.Parameters.AddWithValue("@storagePath", module.FilePath); + command.Parameters.AddWithValue("@publishedAt", module.PublishedAt); + command.Parameters.AddWithValue("@dependencies", + module.Dependencies == null ? "[]" : JsonSerializer.Serialize(module.Dependencies)).NpgsqlDbType = + NpgsqlDbType.Jsonb; + + var result = await command.ExecuteScalarAsync(); + return result != null; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error adding module {Namespace}/{Name}/{Provider}/{Version} to database", + module.Namespace, module.Name, module.Provider, module.Version); + return false; + } + } + + /// + /// Removes a module from the database + /// + public async Task RemoveModuleAsync(ModuleStorage module) + { + var sql = @" + DELETE FROM modules + WHERE namespace = @namespace + AND name = @name + AND provider = @provider + AND version = @version"; + + try + { + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@namespace", module.Namespace); + command.Parameters.AddWithValue("@name", module.Name); + command.Parameters.AddWithValue("@provider", module.Provider); + command.Parameters.AddWithValue("@version", module.Version); + + var rowsAffected = await command.ExecuteNonQueryAsync(); + return rowsAffected > 0; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error removing module {Namespace}/{Name}/{Provider}/{Version} from database", + module.Namespace, module.Name, module.Provider, module.Version); + return false; + } + } + + // User Methods + public async Task GetUserByEmailAsync(string email) + { + const string sql = "SELECT id, email, provider, provider_id, created_at, updated_at FROM users WHERE email = @email"; + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@email", email); + + await using var reader = await command.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return new User + { + Id = reader.GetString(0), + Email = reader.GetString(1), + Provider = reader.GetString(2), + ProviderId = reader.GetString(3), + CreatedAt = reader.GetDateTime(4), + UpdatedAt = reader.GetDateTime(5) + }; + } + + public async Task GetUserByIdAsync(string id) + { + const string sql = "SELECT id, email, provider, provider_id, created_at, updated_at FROM users WHERE id = @id"; + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@id", id); + + await using var reader = await command.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return new User + { + Id = reader.GetString(0), + Email = reader.GetString(1), + Provider = reader.GetString(2), + ProviderId = reader.GetString(3), + CreatedAt = reader.GetDateTime(4), + UpdatedAt = reader.GetDateTime(5) + }; + } + + public async Task AddUserAsync(User user) + { + const string sql = @" + INSERT INTO users (id, email, provider, provider_id, created_at, updated_at) + VALUES (@id, @email, @provider, @providerId, @createdAt, @updatedAt)"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + + command.Parameters.AddWithValue("@id", user.Id); + command.Parameters.AddWithValue("@email", user.Email); + command.Parameters.AddWithValue("@provider", user.Provider); + command.Parameters.AddWithValue("@providerId", user.ProviderId); + command.Parameters.AddWithValue("@createdAt", user.CreatedAt); + command.Parameters.AddWithValue("@updatedAt", user.UpdatedAt); + + await command.ExecuteNonQueryAsync(); + } + + public async Task UpdateUserAsync(User user) + { + const string sql = "UPDATE users SET email=@email, provider=@provider, provider_id=@providerId, updated_at=@updatedAt WHERE id=@id"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + + command.Parameters.AddWithValue("@id", user.Id); + command.Parameters.AddWithValue("@email", user.Email); + command.Parameters.AddWithValue("@provider", user.Provider); + command.Parameters.AddWithValue("@providerId", user.ProviderId); + command.Parameters.AddWithValue("@updatedAt", user.UpdatedAt); + + await command.ExecuteNonQueryAsync(); + } + + public async Task DeleteUserAsync(string userId) + { + const string sql = "DELETE FROM users WHERE id = @id"; + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@id", userId); + await command.ExecuteNonQueryAsync(); + } + + // ApiKey Methods + public async Task AddApiKeyAsync(ApiKey apiKey) + { + const string sql = @" + INSERT INTO api_keys (id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at) + VALUES (@id, @userId, @description, @tokenHash, @prefix, @isShared, @createdAt, @expiresAt, @lastUsedAt)"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + + command.Parameters.AddWithValue("@id", apiKey.Id); + command.Parameters.AddWithValue("@userId", apiKey.UserId); + command.Parameters.AddWithValue("@description", apiKey.Description); + command.Parameters.AddWithValue("@tokenHash", apiKey.TokenHash); + command.Parameters.AddWithValue("@prefix", apiKey.Prefix); + command.Parameters.AddWithValue("@isShared", apiKey.IsShared); + command.Parameters.AddWithValue("@createdAt", apiKey.CreatedAt); + command.Parameters.AddWithValue("@expiresAt", apiKey.ExpiresAt ?? (object)DBNull.Value); + command.Parameters.AddWithValue("@lastUsedAt", apiKey.LastUsedAt ?? (object)DBNull.Value); + + await command.ExecuteNonQueryAsync(); + } + + public async Task GetApiKeyAsync(Guid id) + { + const string sql = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE id = @id"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@id", id); + + await using var reader = await command.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return MapReaderToApiKey(reader); + } + + public async Task> GetApiKeysByUserAsync(string userId) + { + const string sql = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE user_id = @userId ORDER BY created_at DESC"; + var keys = new List(); + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@userId", userId); + + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapReaderToApiKey(reader)); + } + + return keys; + } + + public async Task> GetSharedApiKeysAsync() + { + const string sql = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE is_shared = TRUE ORDER BY created_at DESC"; + var keys = new List(); + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapReaderToApiKey(reader)); + } + return keys; + } + + public async Task> GetApiKeysByPrefixAsync(string prefix) + { + const string sql = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE prefix = @prefix"; + var keys = new List(); + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@prefix", prefix); + + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapReaderToApiKey(reader)); + } + return keys; + } + + public async Task UpdateApiKeyAsync(ApiKey apiKey) + { + const string sql = "UPDATE api_keys SET description=@description, is_shared=@isShared, last_used_at=@lastUsedAt WHERE id=@id"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + + command.Parameters.AddWithValue("@id", apiKey.Id); + command.Parameters.AddWithValue("@description", apiKey.Description); + command.Parameters.AddWithValue("@isShared", apiKey.IsShared); + command.Parameters.AddWithValue("@lastUsedAt", apiKey.LastUsedAt ?? (object)DBNull.Value); + + await command.ExecuteNonQueryAsync(); + } + + public async Task DeleteApiKeyAsync(ApiKey apiKey) + { + const string sql = "DELETE FROM api_keys WHERE id = @id"; + + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("@id", apiKey.Id); + + await command.ExecuteNonQueryAsync(); + } + + private ApiKey MapReaderToApiKey(NpgsqlDataReader reader) + { + return new ApiKey + { + Id = reader.GetGuid(0), + UserId = reader.GetString(1), + Description = reader.GetString(2), + TokenHash = reader.GetString(3), + Prefix = reader.GetString(4), + IsShared = reader.GetBoolean(5), + CreatedAt = reader.GetDateTime(6), + ExpiresAt = reader.IsDBNull(7) ? null : reader.GetDateTime(7), + LastUsedAt = reader.IsDBNull(8) ? null : reader.GetDateTime(8) + }; + } + + public async Task InitializeDatabase() + { + await InitializeDatabaseImpl(); + } + + private async Task InitializeDatabaseImpl() + { + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + if (await _migrationManager.NeedsInitializationAsync(connection)) + { + await using var transaction = await connection.BeginTransactionAsync(); + try + { + await _migrationManager.InitializeDatabaseAsync(connection, transaction); + await transaction.CommitAsync(); + _logger.LogInformation("Database initialization and migrations completed successfully"); + } + catch (Exception ex) + { + await transaction.RollbackAsync(); + _logger.LogError(ex, "Error initializing database"); + throw; + } + } + } +} \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj new file mode 100644 index 0000000..53ccc1e --- /dev/null +++ b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj @@ -0,0 +1,17 @@ + + + + + + + + net10.0 + enable + enable + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs new file mode 100644 index 0000000..2d97845 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs @@ -0,0 +1,21 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class DownloadModuleUnauthorizedTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string AuthToken = "default-auth-token"; + + [Fact] + public async Task DownloadModule_InvalidAuthorization_ReturnsUnauthorized() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "invalid-token"); + + var response = await client.GetAsync("/v1/modules/test-ns/test-name/test-provider/0.1.0/download"); + + Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs new file mode 100644 index 0000000..6c4d9fd --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs @@ -0,0 +1,21 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class GetModuleUnauthorizedTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string AuthToken = "default-auth-token"; + + [Fact] + public async Task GetModule_InvalidAuthorization_ReturnsUnauthorized() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "invalid-token"); + + var response = await client.GetAsync("/v1/modules/test-ns/test-name/test-provider/0.1.0"); + + Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs new file mode 100644 index 0000000..7df54e7 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs @@ -0,0 +1,21 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class GetModuleVersionsUnauthorizedTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string AuthToken = "default-auth-token"; + + [Fact] + public async Task GetModuleVersions_InvalidAuthorization_ReturnsUnauthorized() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "invalid-token"); + + var response = await client.GetAsync("/v1/modules/test-ns/test-name/test-provider/versions"); + + Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs new file mode 100644 index 0000000..60efe12 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs @@ -0,0 +1,231 @@ +using System.Text; +using DotNet.Testcontainers.Builders; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Testcontainers.PostgreSql; +using Xunit.Abstractions; +using Xunit.Extensions.Logging; + +namespace TerraformRegistry.Tests.IntegrationTests; + +// Base class for integration tests +public abstract class IntegrationTestBase : IAsyncLifetime +{ + private readonly string _authToken; + private readonly CancellationTokenSource _logMonitorCts = new(); + protected readonly ITestOutputHelper _output; + protected HttpClient _client = null!; + protected WebApplicationFactory _factory = null!; + protected XunitLoggerProvider _loggerProvider = null!; + protected PostgreSqlContainer _postgresContainer = null!; + + protected IntegrationTestBase(ITestOutputHelper output, string authToken) + { + _output = output; + _authToken = authToken; + } + + public virtual async Task InitializeAsync() + { + _output.WriteLine("Starting PostgreSQL test container..."); + + var randomSuffix = Path.GetRandomFileName().Replace(".", ""); + var moduleStoragePath = Path.Combine(Directory.GetCurrentDirectory(), $"modules/{randomSuffix}"); + if (!string.IsNullOrEmpty(moduleStoragePath) && Directory.Exists(moduleStoragePath)) + { + Directory.Delete(moduleStoragePath, true); + _output.WriteLine($"Cleared directory: {moduleStoragePath}"); + } + + _factory = new WebApplicationFactory() + .WithWebHostBuilder(builder => + { + builder.ConfigureAppConfiguration((_, config) => + { + var connStr = _postgresContainer.GetConnectionString(); + config.AddInMemoryCollection(new Dictionary + { + ["PostgreSQL:ConnectionString"] = connStr, + ["DatabaseProvider"] = "postgres", + ["StorageProvider"] = "local", + ["BaseUrl"] = "http://localhost:5000", + ["ModuleStoragePath"] = moduleStoragePath, + ["AuthorizationToken"] = _authToken + }); + }); + + builder.ConfigureLogging(logging => + { + logging.ClearProviders(); + logging.AddProvider(_loggerProvider); + logging.SetMinimumLevel(LogLevel.Information); + logging.AddFilter("Microsoft.AspNetCore", LogLevel.Warning); + logging.AddFilter("Testcontainers", LogLevel.Information); + }); + + builder.UseEnvironment("Test"); + }); + + var testOutputConsumer = Consume.RedirectStdoutAndStderrToStream( + new OutputToTestConsoleStream(_output), new OutputToTestConsoleStream(_output)); + + _postgresContainer = new PostgreSqlBuilder() + .WithDatabase("testdb") + .WithUsername("postgres") + .WithPassword("postgres") + .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(5432)) + .WithOutputConsumer(testOutputConsumer) + .Build(); + + try + { + await _postgresContainer.StartAsync(); + _output.WriteLine( + $"PostgreSQL container started successfully. Connection string: {_postgresContainer.GetConnectionString()}"); + + // Optionally, start monitoring logs in the background + // _ = MonitorContainerLogsAsync(); + } + catch (Exception ex) + { + _output.WriteLine($"Failed to start PostgreSQL container: {ex}"); + throw; + } + + _loggerProvider = new XunitLoggerProvider(_output, (_, _) => true); + + _client = _factory.CreateClient(); + } + + public virtual async Task DisposeAsync() + { + _logMonitorCts.Cancel(); + _logMonitorCts.Dispose(); + + _client?.Dispose(); + _factory?.Dispose(); + + if (_postgresContainer != null) + try + { + _output.WriteLine("Stopping PostgreSQL container..."); + await _postgresContainer.DisposeAsync(); + _output.WriteLine("PostgreSQL container stopped."); + } + catch (Exception ex) + { + _output.WriteLine($"Error stopping PostgreSQL container: {ex.Message}"); + } + + _loggerProvider?.Dispose(); + } + + // Monitor container logs in the background + private async Task MonitorContainerLogsAsync() + { + try + { + while (!_logMonitorCts.Token.IsCancellationRequested && _postgresContainer != null) + { + try + { + // Get logs since the last minute + var since = DateTime.UtcNow.AddMinutes(-1); + var (stdout, stderr) = await _postgresContainer.GetLogsAsync(since); + + if (!string.IsNullOrEmpty(stdout)) _output.WriteLine($"PostgreSQL Container Stdout: {stdout}"); + + if (!string.IsNullOrEmpty(stderr)) _output.WriteLine($"PostgreSQL Container Stderr: {stderr}"); + } + catch (Exception ex) + { + _output.WriteLine($"Error retrieving container logs: {ex.Message}"); + } + + // Wait before checking logs again + await Task.Delay(5000, _logMonitorCts.Token); + } + } + catch (OperationCanceledException) + { + // Expected when cancellation token is triggered + } + catch (Exception ex) when (!_logMonitorCts.Token.IsCancellationRequested) + { + _output.WriteLine($"Error monitoring container logs: {ex.Message}"); + } + } +} + +// Custom stream class to redirect container output to test output +public class OutputToTestConsoleStream : Stream +{ + private readonly StringBuilder _lineBuffer = new(); + private readonly ITestOutputHelper _output; + + public OutputToTestConsoleStream(ITestOutputHelper output) + { + _output = output; + } + + public override bool CanRead => false; + public override bool CanSeek => false; + public override bool CanWrite => true; + public override long Length => 0; + + public override long Position + { + get => 0; + set { } + } + + public override void Flush() + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + var text = Encoding.UTF8.GetString(buffer, offset, count); + + for (var i = 0; i < text.Length; i++) + { + var c = text[i]; + if (c == '\n') + { + // End of line found, write to output + try + { + _output.WriteLine($"[Container] {_lineBuffer}"); + } + catch (Exception) + { + // Ignore write errors during test cleanup + } + + _lineBuffer.Clear(); + } + else if (c != '\r') + { + // Append to buffer (skipping \r characters) + _lineBuffer.Append(c); + } + } + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs new file mode 100644 index 0000000..4c2997e --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs @@ -0,0 +1,21 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class ListModulesUnauthorizedTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string AuthToken = "default-auth-token"; + + [Fact] + public async Task ListModules_InvalidAuthorization_ReturnsUnauthorized() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "invalid-token"); + + var response = await client.GetAsync("/v1/modules"); + + Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs b/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs new file mode 100644 index 0000000..02b81e6 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs @@ -0,0 +1,37 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class UploadAndListModulesTests(ITestOutputHelper output) : UploadModuleTests(output) +{ + [Fact] + public async Task Upload_ValidModule_Then_ListModules_OutputsResponse() + { + // Call the existing upload test + await Upload_ValidModule_ReturnsOk(); + + // Now fetch all modules + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthToken); + + var listResponse = await client.GetAsync("/v1/modules?offset=0&limit=10"); + _output.WriteLine($"List modules status: {listResponse.StatusCode}"); + var listContent = await listResponse.Content.ReadAsStringAsync(); + _output.WriteLine($"List modules response: {listContent}"); + } + + [Fact] + public async Task ListModules_OutputsResponse() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthToken); + + var listResponse = await client.GetAsync("/v1/modules?offset=0&limit=10"); + Assert.Equal(HttpStatusCode.OK, listResponse.StatusCode); + + var listContent = await listResponse.Content.ReadAsStringAsync(); + Assert.Equal("{\"modules\":[],\"meta\":{\"limit\":\"10\",\"current_offset\":\"0\"}}", listContent); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs new file mode 100644 index 0000000..0098738 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs @@ -0,0 +1,77 @@ +using System.Net; +using System.Net.Http.Headers; +using System.Reflection; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class UploadModuleTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string TestDataDirectory = "TestData"; + private const string TestModuleName = "test-module.zip"; + protected const string AuthToken = "default-auth-token"; + + [Fact] + public async Task Invalid_Authorization_ReturnsUnauthorized() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "invalid-token"); + + var response = await client.PostAsync("/v1/modules/test-ns/test-name/test-provider/0.1.0", null); + + Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); + } + + [Fact] + public async Task Upload_ValidModule_ReturnsOk() + { + var client = _factory.CreateClient(); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthToken); + + // Get the project directory instead of the output directory + var projectDir = GetProjectDirectory(); + var moduleFilePath = Path.Combine(projectDir, TestDataDirectory, TestModuleName); + var fileName = Path.GetFileName(moduleFilePath); + + _output.WriteLine($"Looking for test module at: {moduleFilePath}"); + + if (!File.Exists(moduleFilePath)) + { + _output.WriteLine( + $"Test module file not found. Ensure '{TestModuleName}' exists in the '{TestDataDirectory}' folder at the root of the test project."); + throw new FileNotFoundException("Test module file missing.", moduleFilePath); + } + + await using var fileStream = File.OpenRead(moduleFilePath); + using var content = new MultipartFormDataContent(); + using var streamContent = new StreamContent(fileStream); + streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/gzip"); + content.Add(streamContent, "moduleFile", fileName); + + var response = await client.PostAsync("/v1/modules/test-ns/test-name/test-provider/0.1.0", content); + + var responseContent = await response.Content.ReadAsStringAsync(); + _output.WriteLine($"Response content: {responseContent}"); + + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + } + + /// + /// Gets the test project directory path + /// + private string GetProjectDirectory() + { + // Find the project directory by starting from the current assembly location and going up + // until we find the directory containing the test project file + var assembly = Assembly.GetExecutingAssembly(); + var assemblyDirectory = Path.GetDirectoryName(assembly.Location); + + // Navigate to the project directory (going up from bin/Debug/net9.0) + var projectDir = Directory.GetParent(assemblyDirectory)?.Parent?.Parent?.FullName; + + if (string.IsNullOrEmpty(projectDir) || !Directory.Exists(projectDir)) + throw new DirectoryNotFoundException("Could not locate the test project directory."); + + return projectDir; + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs new file mode 100644 index 0000000..415a8e0 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs @@ -0,0 +1,34 @@ +using System.Net; +using System.Text.Json; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class WellKnownEndpointTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) +{ + private const string AuthToken = "default-auth-token"; + + [Fact] + public async Task WellKnown_Endpoint_Returns_Expected_Response() + { + _output.WriteLine("Sending request to /.well-known/terraform.json"); + var response = await _client.GetAsync("/.well-known/terraform.json"); + _output.WriteLine($"Received status code: {response.StatusCode}"); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var content = await response.Content.ReadAsStringAsync(); _output.WriteLine($"Received content: {content}"); + + // Assert the JSON content + var expectedJson = new + { + modules_v1 = "/v1/modules/" + }; + + using var jsonDoc = JsonDocument.Parse(content); + var actualJson = new + { + modules_v1 = jsonDoc.RootElement.GetProperty("modules.v1").GetString() + }; + + Assert.Equal(expectedJson.modules_v1, actualJson.modules_v1); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj new file mode 100644 index 0000000..c51f8ed --- /dev/null +++ b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj @@ -0,0 +1,38 @@ + + + + net10.0 + enable + enable + false + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + \ No newline at end of file diff --git a/TerraformRegistry.Tests/TestData/test-module.zip b/TerraformRegistry.Tests/TestData/test-module.zip new file mode 100644 index 0000000..3e15f3d Binary files /dev/null and b/TerraformRegistry.Tests/TestData/test-module.zip differ diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs new file mode 100644 index 0000000..5faea31 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs @@ -0,0 +1,184 @@ +using Azure; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.AzureBlob; + +namespace TerraformRegistry.Tests.UnitTests.AzureBlob; + +public class AzureBlobModuleServiceConstructorTests +{ + private readonly string _containerName = "test-container"; + private readonly Mock _mockBlobContainerClient; + private readonly Mock _mockBlobServiceClient; + private readonly Mock _mockDatabaseService; + private readonly Mock> _mockLogger; + + public AzureBlobModuleServiceConstructorTests() + { + _mockDatabaseService = new Mock(); + _mockLogger = new Mock>(); + _mockBlobServiceClient = new Mock(); + _mockBlobContainerClient = new Mock(); + + // Setup default behavior for mocks + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(It.IsAny())) + .Returns(_mockBlobContainerClient.Object); + _mockBlobContainerClient.Setup(c => + c.CreateIfNotExists(It.IsAny(), It.IsAny>(), + It.IsAny(), It.IsAny())) + .Returns(Mock.Of>()); + } + + private IConfiguration CreateConfiguration(Dictionary? azureStorageSettings) + { + var configBuilder = new ConfigurationBuilder(); + if (azureStorageSettings != null) + configBuilder.AddInMemoryCollection( + azureStorageSettings.Select(kvp => + new KeyValuePair($"AzureStorage:{kvp.Key}", kvp.Value)) + ); + return configBuilder.Build(); + } + + // Test: Should initialize clients and create the container if it does not exist + [Fact] + public void Constructor_Initializes_Clients_And_Creates_Container_IfNotExists() + { + // Arrange + var settings = new Dictionary + { + { "ContainerName", _containerName }, + { "SasTokenExpiryMinutes", "5" } + }; + var configuration = CreateConfiguration(settings); + + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)) + .Returns(_mockBlobContainerClient.Object); + + // Act + var service = new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object); + + // Assert + Assert.NotNull(service); + _mockBlobServiceClient.Verify(s => s.GetBlobContainerClient(_containerName), Times.Once); + _mockBlobContainerClient.Verify( + c => c.CreateIfNotExists(PublicAccessType.None, null, null, It.IsAny()), Times.Once); + } + + // Test: Should throw ArgumentNullException if ContainerName is missing from configuration + [Fact] + public void Constructor_ThrowsArgumentNullException_For_Missing_ContainerName() + { + // Arrange + var settings = new Dictionary + { + // ContainerName is missing + { "SasTokenExpiryMinutes", "5" } + }; + var configuration = CreateConfiguration(settings); + + // Act & Assert + var ex = Assert.Throws(() => + new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object)); + Assert.Equal("AzureStorage:ContainerName", ex.ParamName); + } + + // Test: Should use the default value for SasTokenExpiryMinutes if it is missing from configuration + [Fact] + public void Constructor_UsesDefault_SasTokenExpiryMinutes_When_Missing() + { + // Arrange + var settings = new Dictionary + { + { "ContainerName", _containerName } + // SasTokenExpiryMinutes is missing, should default to "5" + }; + var configuration = CreateConfiguration(settings); + + // Act + var service = new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object); + + // Assert + Assert.NotNull(service); // Ensures constructor completes and default is parsed + // To verify the actual value, one would typically need to expose it or test a method that uses it. + // For this constructor test, we're primarily ensuring it doesn't throw with missing optional config. + } + + // Test: Should throw FormatException if SasTokenExpiryMinutes is not a valid integer + [Fact] + public void Constructor_ThrowsFormatException_For_Invalid_SasTokenExpiryMinutes() + { + // Arrange + var settings = new Dictionary + { + { "ContainerName", _containerName }, + { "SasTokenExpiryMinutes", "not-an-integer" } + }; + var configuration = CreateConfiguration(settings); + + // Act & Assert + Assert.Throws(() => + new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object)); + } + + // Test: Should throw ArgumentNullException if both connection string and account name are missing + [Fact] + public void Constructor_ThrowsArgumentNullException_If_ConnectionString_And_AccountName_Missing() + { + var config = new ConfigurationBuilder() + .AddInMemoryCollection(new[] + { + new KeyValuePair("AzureStorage:ContainerName", _containerName) + // No ConnectionString, no AccountName + }) + .Build(); + + // Use a real BlobServiceClient mock that will not be used (to force the else branch) + // Pass null for blobServiceClient to hit the Managed Identity path + var ex = Assert.Throws(() => + new AzureBlobModuleService(config, _mockDatabaseService.Object, _mockLogger.Object)); + Assert.Equal("AzureStorage:AccountName", ex.ParamName); + _mockLogger.Verify(x => x.Log( + LogLevel.Error, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("Azure Storage AccountName")), + null, + It.IsAny>()), Times.Once); + } + + // Test: Should log and rethrow if CreateIfNotExists throws + [Fact] + public void Constructor_Logs_And_Rethrows_If_CreateIfNotExists_Fails() + { + var settings = new Dictionary + { + { "ContainerName", _containerName }, + { "SasTokenExpiryMinutes", "5" } + }; + var configuration = CreateConfiguration(settings); + var testException = new Exception("fail"); + _mockBlobContainerClient.Setup(c => + c.CreateIfNotExists(PublicAccessType.None, null, null, It.IsAny())) + .Throws(testException); + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)) + .Returns(_mockBlobContainerClient.Object); + var ex = Assert.Throws(() => + new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object)); + Assert.Equal(testException, ex); + _mockLogger.Verify(x => x.Log( + LogLevel.Error, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("Failed to create or verify blob container")), + testException, + It.IsAny>()), Times.Once); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs new file mode 100644 index 0000000..9edc621 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs @@ -0,0 +1,100 @@ +using Azure; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.AzureBlob; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Tests.UnitTests.AzureBlob; + +public class AzureBlobModuleServiceDelegationTests +{ + private const string ContainerName = "test-container"; + private readonly Mock _mockBlobServiceClient = new(); + private readonly Mock _mockConfiguration = new(); + private readonly Mock _mockContainerClient = new(); + private readonly Mock _mockDatabaseService = new(); + private readonly Mock> _mockLogger = new(); + + public AzureBlobModuleServiceDelegationTests() + { + _mockConfiguration.Setup(c => c["AzureStorage:ContainerName"]).Returns(ContainerName); + _mockConfiguration.Setup(c => c["AzureStorage:SasTokenExpiryMinutes"]).Returns("5"); + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(ContainerName)).Returns(_mockContainerClient.Object); + _mockContainerClient + .Setup(c => c.CreateIfNotExists(It.IsAny(), It.IsAny>(), + default)).Returns(Mock.Of>()); + } + + private AzureBlobModuleService CreateService() + { + return new AzureBlobModuleService( + _mockConfiguration.Object, + _mockDatabaseService.Object, + _mockLogger.Object, + _mockBlobServiceClient.Object); + } + + [Fact] + public async Task ListModulesAsync_Delegates_To_DatabaseService() + { + var request = new ModuleSearchRequest(); + var expected = new ModuleList + { + Modules = new List(), + Meta = new Dictionary() + }; + _mockDatabaseService.Setup(x => x.ListModulesAsync(request)).ReturnsAsync(expected); + var service = CreateService(); + var result = await service.ListModulesAsync(request); + Assert.Equal(expected, result); + _mockDatabaseService.Verify(x => x.ListModulesAsync(request), Times.Once); + } + + [Fact] + public async Task GetModuleAsync_Delegates_To_DatabaseService() + { + var expected = new Module + { + Id = string.Empty, + Owner = string.Empty, + Namespace = string.Empty, + Name = string.Empty, + Version = string.Empty, + Provider = string.Empty, + PublishedAt = string.Empty, + Versions = new List(), + Root = string.Empty, + Submodules = new List(), + Providers = new Dictionary() + }; + _mockDatabaseService.Setup(x => x.GetModuleAsync("ns", "name", "provider", "1.0.0")).ReturnsAsync(expected); + var service = CreateService(); + var result = await service.GetModuleAsync("ns", "name", "provider", "1.0.0"); + Assert.Equal(expected, result); + _mockDatabaseService.Verify(x => x.GetModuleAsync("ns", "name", "provider", "1.0.0"), Times.Once); + } + + [Fact] + public async Task GetModuleVersionsAsync_Delegates_To_DatabaseService() + { + var expected = new ModuleVersions + { + Modules = new List + { + new ModuleVersionInfo + { + Versions = new List() + } + } + }; + _mockDatabaseService.Setup(x => x.GetModuleVersionsAsync("ns", "name", "provider")).ReturnsAsync(expected); + var service = CreateService(); + var result = await service.GetModuleVersionsAsync("ns", "name", "provider"); + Assert.Equal(expected, result); + _mockDatabaseService.Verify(x => x.GetModuleVersionsAsync("ns", "name", "provider"), Times.Once); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDownloadTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDownloadTests.cs new file mode 100644 index 0000000..17fccfe --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDownloadTests.cs @@ -0,0 +1,223 @@ +using Azure; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Azure.Storage.Sas; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.AzureBlob; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Tests.UnitTests.AzureBlob; + +public class AzureBlobModuleServiceDownloadTests +{ + private readonly string _containerName = "test-container"; + private readonly Mock _mockBlobServiceClient; + private readonly Mock _mockConfiguration; + private readonly Mock _mockContainerClient; + private readonly Mock _mockDatabaseService; + private readonly Mock> _mockLogger; + + public AzureBlobModuleServiceDownloadTests() + { + _mockDatabaseService = new Mock(); + _mockLogger = new Mock>(); + _mockConfiguration = new Mock(); + _mockBlobServiceClient = new Mock(); + _mockContainerClient = new Mock(); + + // Default configuration + var mockAzureStorageSection = new Mock(); + _mockConfiguration.Setup(c => c.GetSection("AzureStorage")).Returns(mockAzureStorageSection.Object); + _mockConfiguration.Setup(c => c["AzureStorage:ContainerName"]).Returns(_containerName); + _mockConfiguration.Setup(c => c["AzureStorage:SasTokenExpiryMinutes"]).Returns("5"); + + // Setup the service client to return the mocked container client + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)) + .Returns(_mockContainerClient.Object); + + // Setup CreateIfNotExists for the constructor path, called on the _mockContainerClient + _mockContainerClient.Setup(c => + c.CreateIfNotExists(It.IsAny(), It.IsAny>(), default)) + .Returns(Mock.Of>()); + } + + private AzureBlobModuleService CreateService() + { + // Pass the mocked BlobServiceClient to the constructor + var service = new AzureBlobModuleService( + _mockConfiguration.Object, // This mocked configuration is used + _mockDatabaseService.Object, + _mockLogger.Object, + _mockBlobServiceClient.Object); + + return service; + } + + // Test: Should return null and log a warning when the module is not found in the database + [Fact] + public async Task GetModuleDownloadPathAsync_Returns_Null_When_Module_Not_In_Database() + { + // Arrange + _mockDatabaseService.Setup(db => + db.GetModuleStorageAsync(It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny())) + .ReturnsAsync((ModuleStorage?)null); + + var service = CreateService(); + + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "prov", "1.0.0"); + + // Assert + Assert.Null(result); + _mockLogger.Verify( + x => x.Log( + LogLevel.Warning, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("not found in database")), + null, + It.IsAny>()), + Times.Once); + } + + // Test: Should return null and log a warning when the blob does not exist in storage, even if the module exists in the database + [Fact] + public async Task GetModuleDownloadPathAsync_Returns_Null_When_Blob_Does_Not_Exist() + { + // Arrange + var moduleStorage = new ModuleStorage + { + FilePath = "path/to/blob.zip", + Namespace = "testns", // Added + Name = "testname", // Added + Provider = "testprov", // Added + Version = "1.0.0", // Added + Description = "Test Description", // Added + Dependencies = new List() // Added + }; + _mockDatabaseService.Setup(db => + db.GetModuleStorageAsync(It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny())) + .ReturnsAsync(moduleStorage); + + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)) + .ReturnsAsync(Response.FromValue(false, Mock.Of())); + + // Ensure GetBlobClient is called on the _mockContainerClient (which is returned by _mockBlobServiceClient) + _mockContainerClient.Setup(cc => cc.GetBlobClient(moduleStorage.FilePath)) + .Returns(mockBlobClient.Object); + + var service = CreateService(); + + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "prov", "1.0.0"); + + // Assert + Assert.Null(result); + mockBlobClient.Verify(bc => bc.ExistsAsync(default), Times.Once); + _mockLogger.Verify( + x => x.Log( + LogLevel.Warning, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("exists in database but blob not found")), + null, + It.IsAny>()), + Times.Once); + } + + // Test: Should return a SAS URI when both the module exists in the database and the blob exists in storage + [Fact] + public async Task GetModuleDownloadPathAsync_Returns_SasUri_When_Module_And_Blob_Exist() + { + // Arrange + var moduleStorage = new ModuleStorage + { + FilePath = "path/to/blob.zip", + Namespace = "testns", // Added + Name = "testname", // Added + Provider = "testprov", // Added + Version = "1.0.0", // Added + Description = "Test Description", // Added + Dependencies = new List() // Added + }; + _mockDatabaseService.Setup(db => + db.GetModuleStorageAsync(It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny())) + .ReturnsAsync(moduleStorage); + + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)).ReturnsAsync(Response.FromValue(true, Mock.Of())); + var fakeSasUri = + new Uri($"https://fakeaccount.blob.core.windows.net/{_containerName}/path/to/blob.zip?sastoken"); + mockBlobClient.Setup(bc => bc.GenerateSasUri(It.IsAny())).Returns(fakeSasUri); + mockBlobClient.SetupGet(bc => bc.Name).Returns(moduleStorage.FilePath); + mockBlobClient.SetupGet(bc => bc.BlobContainerName).Returns(_containerName); + + + _mockContainerClient.Setup(cc => cc.GetBlobClient(moduleStorage.FilePath)) + .Returns(mockBlobClient.Object); + + var service = CreateService(); + + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "prov", "1.0.0"); + + // Assert + Assert.Equal(fakeSasUri.ToString(), result); + mockBlobClient.Verify(bc => bc.GenerateSasUri(It.Is(bsb => + bsb.BlobName == moduleStorage.FilePath && + bsb.BlobContainerName == _containerName && + bsb.Resource == "b" && + bsb.Permissions.Contains("r") // Changed from bsb.GetPermissions().HasFlag(BlobSasPermissions.Read) + )), Times.Once); + } + + // Test: Should handle exceptions during SAS generation, log an error, and return null + [Fact] + public async Task GetModuleDownloadPathAsync_Handles_Exception_During_Sas_Generation_And_Returns_Null() + { + // Arrange + var moduleStorage = new ModuleStorage + { + FilePath = "path/to/blob.zip", + Namespace = "testns", // Added + Name = "testname", // Added + Provider = "testprov", // Added + Version = "1.0.0", // Added + Description = "Test Description", // Added + Dependencies = new List() // Added + }; + _mockDatabaseService.Setup(db => + db.GetModuleStorageAsync(It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny())) + .ReturnsAsync(moduleStorage); + + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)).ReturnsAsync(Response.FromValue(true, Mock.Of())); + mockBlobClient.Setup(bc => bc.GenerateSasUri(It.IsAny())) + .Throws(new InvalidOperationException("SAS error")); + + _mockContainerClient.Setup(cc => cc.GetBlobClient(moduleStorage.FilePath)) + .Returns(mockBlobClient.Object); + + var service = CreateService(); + + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "prov", "1.0.0"); + + // Assert + Assert.Null(result); + _mockLogger.Verify( + x => x.Log( + LogLevel.Error, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("Error generating SAS token")), + It.IsAny(), + It.IsAny>()), + Times.Once); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs new file mode 100644 index 0000000..72436d0 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs @@ -0,0 +1,207 @@ +using Azure; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.AzureBlob; +using TerraformRegistry.Models; + +// Required for Response + +namespace TerraformRegistry.Tests.UnitTests.AzureBlob; + +public class AzureBlobModuleServiceUploadTests +{ + private readonly string _containerName = "test-container"; + private readonly Mock _mockBlobServiceClient; // Added + private readonly Mock _mockConfiguration; + private readonly Mock _mockContainerClient; + private readonly Mock _mockDatabaseService; + private readonly Mock> _mockLogger; + + + public AzureBlobModuleServiceUploadTests() + { + _mockDatabaseService = new Mock(); + _mockLogger = new Mock>(); + _mockConfiguration = new Mock(); + _mockBlobServiceClient = new Mock(); // Initialized + _mockContainerClient = new Mock(); + + var mockAzureStorageSection = new Mock(); + _mockConfiguration.Setup(c => c.GetSection("AzureStorage")).Returns(mockAzureStorageSection.Object); + _mockConfiguration.Setup(c => c["AzureStorage:ContainerName"]).Returns(_containerName); + _mockConfiguration.Setup(c => c["AzureStorage:SasTokenExpiryMinutes"]).Returns("5"); + + // Setup the service client to return the mocked container client + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)) + .Returns(_mockContainerClient.Object); + + // Setup CreateIfNotExists for the constructor path, called on the _mockContainerClient + _mockContainerClient.Setup(c => + c.CreateIfNotExists(It.IsAny(), It.IsAny>(), default)) + .Returns(Mock.Of>()); + } + + private AzureBlobModuleService CreateService() + { + // Pass the mocked BlobServiceClient to the constructor + var service = new AzureBlobModuleService( + _mockConfiguration.Object, + _mockDatabaseService.Object, + _mockLogger.Object, + _mockBlobServiceClient.Object); // Pass the mock client + return service; + } + + // Test: Should return false and log a warning if the blob already exists in storage + [Fact] + public async Task UploadModuleAsync_Returns_False_If_Blob_Already_Exists() + { + // Arrange + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)).ReturnsAsync(Response.FromValue(true, Mock.Of())); + + _mockContainerClient.Setup(cc => cc.GetBlobClient(It.IsAny())) + .Returns(mockBlobClient.Object); + + var service = CreateService(); + using var stream = new MemoryStream(new byte[] { 1, 2, 3 }); + + // Act + var result = await service.UploadModuleAsync("ns", "name", "prov", "1.0.0", stream, "desc"); + + // Assert + Assert.False(result); + mockBlobClient.Verify(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default), + Times.Never); + _mockLogger.Verify( + x => x.Log( + LogLevel.Warning, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("already exists in blob storage")), + null, + It.IsAny>()), + Times.Once); + } + + // Test: Should return true on successful upload to blob storage and successful database add + [Fact] + public async Task UploadModuleAsync_Returns_True_On_Successful_Upload_And_Db_Add() + { + // Arrange + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)) + .ReturnsAsync(Response.FromValue(false, Mock.Of())); + mockBlobClient.Setup(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default)) + .ReturnsAsync(Mock.Of>()); + + _mockContainerClient.Setup(cc => cc.GetBlobClient(It.IsAny())) + .Returns(mockBlobClient.Object); + + _mockDatabaseService.Setup(db => db.AddModuleAsync(It.IsAny())) + .ReturnsAsync(true); + + var service = CreateService(); + using var stream = new MemoryStream(new byte[] { 1, 2, 3 }); + + // Act + var result = await service.UploadModuleAsync("ns", "name", "prov", "1.0.0", stream, "desc"); + + // Assert + Assert.True(result); + mockBlobClient.Verify(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default), + Times.Once); + _mockDatabaseService.Verify(db => db.AddModuleAsync(It.Is(m => + m.Namespace == "ns" && m.Name == "name" && m.Provider == "prov" && m.Version == "1.0.0" + )), Times.Once); + } + + // Test: Should delete the blob and return false if the database add fails after upload + [Fact] + public async Task UploadModuleAsync_Deletes_Blob_And_Returns_False_If_Db_Add_Fails() + { + // Arrange + var mockBlobClient = new Mock(); + mockBlobClient.Setup(bc => bc.ExistsAsync(default)) + .ReturnsAsync(Response.FromValue(false, Mock.Of())); + mockBlobClient.Setup(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default)) + .ReturnsAsync(Mock.Of>()); + mockBlobClient.Setup(bc => + bc.DeleteAsync(It.IsAny(), It.IsAny(), default)) + .ReturnsAsync(Mock.Of()); + + + _mockContainerClient.Setup(cc => cc.GetBlobClient(It.IsAny())) + .Returns(mockBlobClient.Object); + + _mockDatabaseService.Setup(db => db.AddModuleAsync(It.IsAny())) + .ReturnsAsync(false); // Simulate database add failure + + var service = CreateService(); + using var stream = new MemoryStream(new byte[] { 1, 2, 3 }); + + // Act + var result = await service.UploadModuleAsync("ns", "name", "prov", "1.0.0", stream, "desc"); + + // Assert + Assert.False(result); + mockBlobClient.Verify(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default), + Times.Once); + mockBlobClient.Verify(bc => bc.DeleteAsync(DeleteSnapshotsOption.None, null, default), + Times.Once); // Verify cleanup + _mockLogger.Verify( + x => x.Log( + LogLevel.Error, + It.IsAny(), + It.Is((v, t) => + v.ToString()!.Contains("Failed to add module") && + v.ToString()!.Contains("to database, cleaned up blob storage")), + null, + It.IsAny>()), + Times.Once); + } + + // Test: Should handle exceptions during blob upload, attempt cleanup, and return false + [Fact] + public async Task UploadModuleAsync_Handles_Exception_During_Blob_Upload_And_Cleans_Up() + { + // Arrange + var mockBlobClient = new Mock(); + // First ExistsAsync returns false (blob does not exist) + mockBlobClient.SetupSequence(bc => bc.ExistsAsync(default)) + .ReturnsAsync(Response.FromValue(false, Mock.Of())) // For initial check + .ReturnsAsync(Response.FromValue(true, Mock.Of())); // For cleanup check if upload fails mid-way + + mockBlobClient.Setup(bc => bc.UploadAsync(It.IsAny(), It.IsAny(), default)) + .ThrowsAsync(new RequestFailedException("Upload failed")); + mockBlobClient.Setup(bc => + bc.DeleteAsync(It.IsAny(), It.IsAny(), default)) + .ReturnsAsync(Mock.Of()); + + + _mockContainerClient.Setup(cc => cc.GetBlobClient(It.IsAny())) + .Returns(mockBlobClient.Object); + + var service = CreateService(); + using var stream = new MemoryStream(new byte[] { 1, 2, 3 }); + + // Act + var result = await service.UploadModuleAsync("ns", "name", "prov", "1.0.0", stream, "desc"); + + // Assert + Assert.False(result); + mockBlobClient.Verify(bc => bc.DeleteAsync(DeleteSnapshotsOption.None, null, default), + Times.Once); // Verify cleanup attempt + _mockLogger.Verify( + x => x.Log( + LogLevel.Error, + It.IsAny(), + It.Is((v, t) => v.ToString()!.Contains("Error uploading module")), + It.IsAny(), + It.IsAny>()), + Times.Once); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/Database/SqliteDatabaseServiceTests.cs b/TerraformRegistry.Tests/UnitTests/Database/SqliteDatabaseServiceTests.cs new file mode 100644 index 0000000..a1e9514 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/Database/SqliteDatabaseServiceTests.cs @@ -0,0 +1,191 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.Services; +using Xunit; + +namespace TerraformRegistry.Tests.UnitTests.Database; + +public class SqliteDatabaseServiceTests : IAsyncLifetime +{ + private string _dbPath = null!; + private string _connectionString = null!; + + public Task InitializeAsync() + { + // Create a unique temporary file-based SQLite database for each test class instance + var tempDir = Path.Combine(Path.GetTempPath(), "TerraformRegistryTests", Guid.NewGuid().ToString("N")); + Directory.CreateDirectory(tempDir); + _dbPath = Path.Combine(tempDir, "test.db"); + _connectionString = $"Data Source={_dbPath}"; + return Task.CompletedTask; + } + + public Task DisposeAsync() + { + try + { + if (!string.IsNullOrWhiteSpace(_dbPath)) + { + var dir = Path.GetDirectoryName(_dbPath)!; + if (Directory.Exists(dir)) Directory.Delete(dir, true); + } + } + catch + { + // ignore cleanup issues + } + + return Task.CompletedTask; + } + + private static SqliteDatabaseService CreateService(string connStr, string baseUrl = "http://localhost") + { + var logger = new Mock>(); + return new SqliteDatabaseService(connStr, baseUrl, logger.Object); + } + + private static ModuleStorage MakeModule( + string ns = "hashicorp", + string name = "vpc", + string provider = "aws", + string version = "1.0.0", + string? desc = "VPC module", + string? filePath = "/modules/vpc/1.0.0.zip", + DateTime? publishedAt = null, + params string[] deps) + { + return new ModuleStorage + { + Namespace = ns, + Name = name, + Provider = provider, + Version = version, + Description = desc ?? string.Empty, + FilePath = filePath ?? string.Empty, + PublishedAt = publishedAt ?? DateTime.UtcNow, + Dependencies = deps.ToList() + }; + } + + [Fact] + public async Task InitializeDatabase_CreatesSchemaAndAllowsInsertAndFetch() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + var mod = MakeModule(); + var added = await svc.AddModuleAsync(mod); + Assert.True(added); + + var fetched = await svc.GetModuleAsync(mod.Namespace, mod.Name, mod.Provider, mod.Version); + Assert.NotNull(fetched); + Assert.Equal(mod.Namespace, fetched!.Namespace); + Assert.Equal(mod.Name, fetched.Name); + Assert.Equal(mod.Provider, fetched.Provider); + Assert.Equal(mod.Version, fetched.Version); + Assert.Equal("http://localhost/v1/modules/hashicorp/vpc/aws/1.0.0/download", fetched.DownloadUrl); + Assert.Contains("1.0.0", fetched.Versions); + } + + [Fact] + public async Task AddModule_IsUpsertOnConflict_UpdatesDescriptionAndPath() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + var mod = MakeModule(desc: "desc1", filePath: "/path/one.zip"); + Assert.True(await svc.AddModuleAsync(mod)); + + // Update with same PK and new values + var modUpdated = MakeModule(desc: "desc2", filePath: "/path/two.zip"); + Assert.True(await svc.AddModuleAsync(modUpdated)); + + var storage = await svc.GetModuleStorageAsync(mod.Namespace, mod.Name, mod.Provider, mod.Version); + Assert.NotNull(storage); + Assert.Equal("desc2", storage!.Description); + Assert.Equal("/path/two.zip", storage.FilePath); + } + + [Fact] + public async Task ListModules_ReturnsLatestVersionPerTuple_AndSupportsFilters() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + // Insert multiple versions and different providers + await svc.AddModuleAsync(MakeModule(version: "1.0.0", desc: "alpha vpc")); + await svc.AddModuleAsync(MakeModule(version: "1.1.0", desc: "beta vpc")); + await svc.AddModuleAsync(MakeModule(provider: "azurerm", version: "0.1.0", desc: "azure vpc")); + + // No filter should return one entry per (ns,name,provider) with latest version + var all = await svc.ListModulesAsync(new ModuleSearchRequest { Limit = 50, Offset = 0 }); + Assert.Equal(2, all.Modules.Count); + var awsEntry = all.Modules.First(m => m.Provider == "aws"); + Assert.Equal("1.1.0", awsEntry.Version); + Assert.Contains("1.0.0", awsEntry.Versions); + Assert.Contains("1.1.0", awsEntry.Versions); + + // Filter by provider + var awsOnly = await svc.ListModulesAsync(new ModuleSearchRequest { Provider = "aws", Limit = 50 }); + Assert.Single(awsOnly.Modules); + + // Filter by namespace and search query (name/description) + var search = await svc.ListModulesAsync(new ModuleSearchRequest { Namespace = "hashicorp", Q = "azure" }); + Assert.Single(search.Modules); + Assert.Equal("azurerm", search.Modules[0].Provider); + } + + [Fact] + public async Task GetModuleVersions_ReturnsDescendingVersionList() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + await svc.AddModuleAsync(MakeModule(version: "1.0.0")); + await svc.AddModuleAsync(MakeModule(version: "1.2.0")); + await svc.AddModuleAsync(MakeModule(version: "1.1.1")); + + var versions = await svc.GetModuleVersionsAsync("hashicorp", "vpc", "aws"); + var list = versions.Modules.Single().Versions.Select(v => v.Version).ToList(); + + // Service orders DESC + Assert.Equal(new[] { "1.2.0", "1.1.1", "1.0.0" }, list); + } + + [Fact] + public async Task GetModuleStorage_ReturnsDependenciesAndFields() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + var published = new DateTime(2020, 1, 2, 3, 4, 5, DateTimeKind.Utc); + await svc.AddModuleAsync(MakeModule(version: "2.0.0", publishedAt: published, deps: ["a", "b"])); + + var storage = await svc.GetModuleStorageAsync("hashicorp", "vpc", "aws", "2.0.0"); + Assert.NotNull(storage); + Assert.Equal(["a", "b"], storage!.Dependencies); + Assert.Equal(published, storage.PublishedAt); + } + + [Fact] + public async Task RemoveModule_DeletesRow() + { + var svc = CreateService(_connectionString); + await (svc as IInitializableDb).InitializeDatabase(); + + var mod = MakeModule(version: "3.0.0"); + await svc.AddModuleAsync(mod); + + var removed = await svc.RemoveModuleAsync(mod); + Assert.True(removed); + + var fetched = await svc.GetModuleAsync(mod.Namespace, mod.Name, mod.Provider, mod.Version); + Assert.Null(fetched); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs new file mode 100644 index 0000000..0a1d9ad --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.Configuration; + +namespace TerraformRegistry.Tests.UnitTests; + +public class EnvironmentVariablesTests +{ + // This test verifies that environment variables matching those used in Program.cs + // (e.g., DatabaseProvider, StorageProvider, BaseUrl, ModuleStoragePath, AuthorizationToken) + // are correctly picked up by the configuration builder when using the "TF_REG_" prefix. + [Fact] + public void ProgramEnvironmentVariables_AreAcceptedByConfiguration() + { + // Arrange + var envVars = new[] + { + ("TF_REG_DatabaseProvider", "postgres"), + ("TF_REG_StorageProvider", "azure"), + ("TF_REG_BaseUrl", "https://example.com"), + ("TF_REG_ModuleStoragePath", "modules"), + ("TF_REG_AuthorizationToken", "super-secret-token") + }; + foreach (var (key, value) in envVars) + Environment.SetEnvironmentVariable(key, value); + + var config = new ConfigurationBuilder() + .AddEnvironmentVariables("TF_REG_") + .Build(); + + // Act & Assert + Assert.Equal("postgres", config["DatabaseProvider"]); + Assert.Equal("azure", config["StorageProvider"]); + Assert.Equal("https://example.com", config["BaseUrl"]); + Assert.Equal("modules", config["ModuleStoragePath"]); + Assert.Equal("super-secret-token", config["AuthorizationToken"]); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/GlobalExceptionMiddlewareTests.cs b/TerraformRegistry.Tests/UnitTests/GlobalExceptionMiddlewareTests.cs new file mode 100644 index 0000000..5156eb9 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/GlobalExceptionMiddlewareTests.cs @@ -0,0 +1,126 @@ +using System.Text.Json; + +namespace TerraformRegistry.Tests.UnitTests; + +/// +/// Tests for the GlobalExceptionMiddleware to ensure proper error handling +/// +public class GlobalExceptionMiddlewareTests +{ + [Fact] + public void GetStatusCode_WithArgumentException_Returns400() + { + // Test the private method indirectly by testing the middleware behavior + var exception = new ArgumentException("Test argument exception"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(400, statusCode); + } + + [Fact] + public void GetStatusCode_WithArgumentNullException_Returns400() + { + var exception = new ArgumentNullException("paramName", "Test null argument exception"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(400, statusCode); + } + + [Fact] + public void GetStatusCode_WithFileNotFoundException_Returns404() + { + var exception = new FileNotFoundException("Test file not found"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(404, statusCode); + } + + [Fact] + public void GetStatusCode_WithUnauthorizedAccessException_Returns401() + { + var exception = new UnauthorizedAccessException("Test unauthorized access"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(401, statusCode); + } + + [Fact] + public void GetStatusCode_WithInvalidOperationExceptionContainingAlreadyExists_Returns409() + { + var exception = new InvalidOperationException("Resource already exists"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(409, statusCode); + } + + [Fact] + public void GetStatusCode_WithInvalidOperationExceptionNotContainingAlreadyExists_Returns422() + { + var exception = new InvalidOperationException("Invalid operation"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(422, statusCode); + } + + [Fact] + public void GetStatusCode_WithGenericException_Returns500() + { + var exception = new Exception("Generic exception"); + var statusCode = GetStatusCodeForException(exception); + + Assert.Equal(500, statusCode); + } + + [Fact] + public void CreateErrorResponse_WithClientError_ReturnsActualMessage() + { + var exception = new ArgumentException("Invalid parameter"); + var response = CreateErrorResponseForException(exception, 400); + + var jsonElement = (JsonElement)response; + var errorsArray = jsonElement.GetProperty("errors").EnumerateArray().ToArray(); + + Assert.Single(errorsArray); + Assert.Equal("Invalid parameter", errorsArray[0].GetString()); + } + + [Fact] + public void CreateErrorResponse_WithServerError_ReturnsGenericMessage() + { + var exception = new Exception("Internal error details"); + var response = CreateErrorResponseForException(exception, 500); + + var jsonElement = (JsonElement)response; + var errorsArray = jsonElement.GetProperty("errors").EnumerateArray().ToArray(); + + Assert.Single(errorsArray); + Assert.Equal("An internal server error occurred", errorsArray[0].GetString()); + } + + // Helper methods to test the private methods indirectly + private static int GetStatusCodeForException(Exception exception) + { + return exception switch + { + ArgumentNullException => 400, + ArgumentException => 400, + UnauthorizedAccessException => 401, + FileNotFoundException => 404, + DirectoryNotFoundException => 404, + NotSupportedException => 405, + TimeoutException => 408, + InvalidOperationException when exception.Message.Contains("already exists") => 409, + InvalidOperationException => 422, + _ => 500 + }; + } + + private static object CreateErrorResponseForException(Exception exception, int statusCode) + { + var errorMessage = statusCode == 500 + ? "An internal server error occurred" + : exception.Message; + + return JsonSerializer.SerializeToElement(new { errors = new[] { errorMessage } }); + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs new file mode 100644 index 0000000..aa9ce5d --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs @@ -0,0 +1,214 @@ +using System.Text; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.Services; + +namespace TerraformRegistry.Tests.UnitTests; + +public class LocalModuleServiceTests +{ + private readonly IConfiguration _configuration; + private readonly Mock _mockDbService; + private readonly Mock> _mockLogger; + private readonly string _testModulePath; + + public LocalModuleServiceTests() + { + _mockDbService = new Mock(); + _mockLogger = new Mock>(); + var inMemorySettings = new Dictionary + { + { "ModuleStoragePath", Path.Combine(Path.GetTempPath(), "modules_test") } + }; + _configuration = new ConfigurationBuilder().AddInMemoryCollection(inMemorySettings).Build(); + _testModulePath = _configuration["ModuleStoragePath"]; + if (Directory.Exists(_testModulePath)) Directory.Delete(_testModulePath, true); + } + + // Verifies that the constructor creates the module storage directory if it does not exist + [Fact] + public void Constructor_CreatesModuleStorageDirectory() + { + // Arrange/Act + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + // Assert + Assert.True(Directory.Exists(_testModulePath)); + } + + // Verifies that the constructor logs the storage path being used + [Fact] + public void Constructor_LogsStoragePath() + { + // Arrange/Act + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + // Assert + _mockLogger.Verify( + x => x.Log( + LogLevel.Information, + It.IsAny(), + It.Is((v, t) => v.ToString().Contains(_testModulePath)), + null, + It.IsAny>()), + Times.AtLeastOnce()); + } + + // Verifies that ListModulesAsync delegates to the database service and returns the expected result + [Fact] + public async Task ListModulesAsync_DelegatesToDatabaseService() + { + // Arrange + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + var request = new ModuleSearchRequest(); + var expected = new ModuleList + { + Modules = new List(), + Meta = new Dictionary() + }; + _mockDbService.Setup(x => x.ListModulesAsync(request)).ReturnsAsync(expected); + // Act + var result = await service.ListModulesAsync(request); + // Assert + Assert.Equal(expected, result); + } + + // Verifies that GetModuleAsync delegates to the database service and returns the expected module + [Fact] + public async Task GetModuleAsync_DelegatesToDatabaseService() + { + // Arrange + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + var expected = new Module + { + Id = "id", + Owner = "owner", + Namespace = "namespace", + Name = "name", + Version = "1.0.0", + Provider = "provider", + Description = "desc", + Source = null, + PublishedAt = DateTime.UtcNow.ToString("o"), + Versions = new List(), + Root = "root", + Submodules = new List(), + Providers = new Dictionary(), + DownloadUrl = null + }; + _mockDbService.Setup(x => x.GetModuleAsync("ns", "name", "provider", "1.0.0")).ReturnsAsync(expected); + // Act + var result = await service.GetModuleAsync("ns", "name", "provider", "1.0.0"); + // Assert + Assert.Equal(expected, result); + } + + // Verifies that GetModuleVersionsAsync delegates to the database service and returns the expected versions + [Fact] + public async Task GetModuleVersionsAsync_DelegatesToDatabaseService() + { // Arrange + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + var expected = new ModuleVersions + { + Modules = new List + { + new ModuleVersionInfo + { + Versions = new List() + } + } + }; + _mockDbService.Setup(x => x.GetModuleVersionsAsync("ns", "name", "provider")).ReturnsAsync(expected); + // Act + var result = await service.GetModuleVersionsAsync("ns", "name", "provider"); + // Assert + Assert.Equal(expected, result); + } + + // Verifies that GetModuleDownloadPathAsync returns null if the module is not found in the database + [Fact] + public async Task GetModuleDownloadPathAsync_ReturnsNullIfModuleNotFound() + { + // Arrange + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + _mockDbService.Setup(x => x.GetModuleStorageAsync("ns", "name", "provider", "1.0.0")) + .ReturnsAsync((ModuleStorage?)null); + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "provider", "1.0.0"); + // Assert + Assert.Null(result); + } + + // Verifies that GetModuleDownloadPathAsync returns a download link and stores a token if the module exists + [Fact] + public async Task GetModuleDownloadPathAsync_ReturnsDownloadLinkAndStoresToken() + { + // Arrange + var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + var storage = new ModuleStorage + { + Namespace = "ns", + Name = "name", + Provider = "provider", + Version = "1.0.0", + Description = "desc", + FilePath = "fakepath", + PublishedAt = DateTime.UtcNow, + Dependencies = new List() + }; + _mockDbService.Setup(x => x.GetModuleStorageAsync("ns", "name", "provider", "1.0.0")).ReturnsAsync(storage); + // Act + var result = await service.GetModuleDownloadPathAsync("ns", "name", "provider", "1.0.0"); + // Assert + Assert.NotNull(result); + Assert.StartsWith("/module/download?token=", result); + } + + // Verifies that TryGetFilePathFromToken returns false and an empty file path for an invalid token + [Fact] + public void TryGetFilePathFromToken_ReturnsFalseForInvalidToken() + { + // Act + var found = LocalModuleService.TryGetFilePathFromToken("notatoken", out var filePath); + // Assert + Assert.False(found); + Assert.Equal(string.Empty, filePath); + } + + // Verifies that UploadModuleAsyncImpl saves the file and adds the module to the database + [Fact] + public async Task UploadModuleAsyncImpl_SavesFileAndAddsToDatabase() + { + // Arrange + var service = new TestableLocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); + var ns = "ns"; + var name = "name"; + var provider = "provider"; + var version = "1.0.0"; + var desc = "desc"; + var content = new MemoryStream(Encoding.UTF8.GetBytes("dummy")); + _mockDbService.Setup(x => x.AddModuleAsync(It.IsAny())).ReturnsAsync(true); + // Act + var result = await service.CallUploadModuleAsyncImpl(ns, name, provider, version, content, desc); + // Assert + Assert.True(result); + var filePath = Path.Combine(_testModulePath, ns, $"{name}-{provider}-{version}.zip"); + Assert.True(File.Exists(filePath)); + } + + // Helper to expose protected method for testing + private class TestableLocalModuleService : LocalModuleService + { + public TestableLocalModuleService(IConfiguration c, IDatabaseService d, ILogger l) : base(c, + d, l) + { + } + + public Task CallUploadModuleAsyncImpl(string ns, string name, string provider, string version, + Stream content, string desc, bool replace = false) + { + return base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc, replace); + } + } +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs b/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs new file mode 100644 index 0000000..1fbc9f2 --- /dev/null +++ b/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs @@ -0,0 +1,125 @@ +using TerraformRegistry.API.Utilities; + +namespace TerraformRegistry.Tests.Utilities; + +public class SemVerValidatorTests +{ + [Theory] + [InlineData("1.0.0", true)] + [InlineData("0.1.0", true)] + [InlineData("10.20.30", true)] + [InlineData("1.0.0-alpha", true)] + [InlineData("1.0.0-alpha.1", true)] + [InlineData("1.0.0-0.3.7", true)] + [InlineData("1.0.0-x.7.z.92", true)] + [InlineData("1.0.0-alpha+001", true)] + [InlineData("1.0.0+20130313144700", true)] + [InlineData("1.0.0-beta+exp.sha.5114f85", true)] + [InlineData("1.0.0-rc.1+build.1", true)] + [InlineData("1.2.3----RC-SNAPSHOT.12.9.1--.12+788", true)] // Example from spec + [InlineData("1.2.3----R-S.12.9.1--.12+meta", true)] // Example from spec + [InlineData("1.2.3----RC-SNAPSHOT.12.9.1--.12", true)] // Example from spec + [InlineData("1.0.0+0.build.1-rc.10000aaa-kk-0.1", true)] // Example from spec + [InlineData("99999999999999999999999.99999999999999999999999.99999999999999999999999", true)] // Large numbers + [InlineData("", false)] + [InlineData(" ", false)] + [InlineData(null, false)] + [InlineData("1.0", false)] // Missing patch + [InlineData("1", false)] // Missing minor and patch + [InlineData("1.0.0a", false)] // Invalid char after patch + [InlineData("1.0.0-", false)] // Empty prerelease identifier + [InlineData("1.0.0+", false)] // Empty build metadata + [InlineData("1.0.0-alpha..1", false)] // Double dot in prerelease + [InlineData("1.0.0-alpha_beta", false)] // Invalid char in prerelease + [InlineData("1.0.0+build#1", false)] // Invalid char in build metadata + [InlineData("01.0.0", false)] // Leading zero in major + [InlineData("1.01.0", false)] // Leading zero in minor + [InlineData("1.0.01", false)] // Leading zero in patch + [InlineData("1.0.0-01", false)] // Leading zero in numeric prerelease identifier + [InlineData("a.b.c", false)] // Non-numeric major/minor/patch + [InlineData("1.0.0 ", false)] // Trailing space + [InlineData(" 1.0.0", false)] // Leading space + public void IsValid_ReturnsExpectedResult(string? version, bool expected) + { + Assert.Equal(expected, SemVerValidator.IsValid(version!)); + } + + [Theory] + [InlineData("1.2.3", 1, 2, 3, null, null)] + [InlineData("10.20.30-alpha.1", 10, 20, 30, "alpha.1", null)] + [InlineData("1.0.0+build.123", 1, 0, 0, null, "build.123")] + [InlineData("2.5.0-rc.2+meta.data", 2, 5, 0, "rc.2", "meta.data")] + public void TryParse_ValidVersion_ReturnsTrueAndCorrectComponents(string version, int expMajor, int expMinor, + int expPatch, string? expPrerelease, string? expBuild) + { + var result = SemVerValidator.TryParse(version, out var major, out var minor, out var patch, out var prerelease, + out var buildMetadata); + + Assert.True(result); + Assert.Equal(expMajor, major); + Assert.Equal(expMinor, minor); + Assert.Equal(expPatch, patch); + Assert.Equal(expPrerelease, prerelease); + Assert.Equal(expBuild, buildMetadata); + } + + [Theory] + [InlineData("1.2")] + [InlineData("invalid")] + [InlineData("")] + // [InlineData(null)] // Cannot use null directly in InlineData for string? + public void TryParse_InvalidVersion_ReturnsFalse(string version) + { + var result = SemVerValidator.TryParse(version, out _, out _, out _, out _, out _); + Assert.False(result); + } + + [Fact] + public void TryParse_NullVersion_ReturnsFalse() + { + var result = SemVerValidator.TryParse(null!, out _, out _, out _, out _, out _); + Assert.False(result); + } + + [Theory] + // Equal + [InlineData("1.0.0", "1.0.0", 0)] + [InlineData("1.2.3-alpha", "1.2.3-alpha", 0)] + [InlineData("1.0.0-rc.1+build.1", "1.0.0-rc.1+build.2", 0)] // Build metadata ignored + + // Major/Minor/Patch comparison + [InlineData("2.0.0", "1.0.0", 1)] + [InlineData("1.1.0", "1.0.0", 1)] + [InlineData("1.0.1", "1.0.0", 1)] + [InlineData("1.0.0", "2.0.0", -1)] + [InlineData("1.0.0", "1.1.0", -1)] + [InlineData("1.0.0", "1.0.1", -1)] + + // Prerelease vs No Prerelease + [InlineData("1.0.0", "1.0.0-alpha", 1)] + [InlineData("1.0.0-alpha", "1.0.0", -1)] + + // Prerelease comparison + [InlineData("1.0.0-alpha", "1.0.0-beta", -1)] + [InlineData("1.0.0-beta", "1.0.0-alpha", 1)] + [InlineData("1.0.0-alpha.1", "1.0.0-alpha.2", -1)] + [InlineData("1.0.0-alpha.2", "1.0.0-alpha.1", 1)] + [InlineData("1.0.0-alpha.beta", "1.0.0-beta.alpha", -1)] // alpha < beta + [InlineData("1.0.0-alpha.1", "1.0.0-alpha.beta", -1)] // numeric < string + [InlineData("1.0.0-alpha.beta", "1.0.0-alpha.1", 1)] // string > numeric + [InlineData("1.0.0-rc.1", "1.0.0-rc.10", -1)] // numeric comparison + [InlineData("1.0.0-alpha", "1.0.0-alpha.1", -1)] // shorter prerelease < longer prerelease + [InlineData("1.0.0-alpha.1", "1.0.0-alpha", 1)] // longer prerelease > shorter prerelease + [InlineData("1.0.0-1", "1.0.0-2", -1)] // numeric identifiers + [InlineData("1.0.0-2", "1.0.0-1", 1)] // numeric identifiers + [InlineData("1.0.0-alpha.1", "1.0.0-alpha.1.beta", -1)] // length comparison after common part + + // Invalid versions + [InlineData("1.0.0", "invalid", null)] + [InlineData("invalid", "1.0.0", null)] + [InlineData("invalid", "also.invalid", null)] + public void Compare_ReturnsExpectedResult(string version1, string version2, int? expected) + { + Assert.Equal(expected, SemVerValidator.Compare(version1, version2)); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Controllers/ApiKeyController.cs b/TerraformRegistry/Controllers/ApiKeyController.cs new file mode 100644 index 0000000..53ae373 --- /dev/null +++ b/TerraformRegistry/Controllers/ApiKeyController.cs @@ -0,0 +1,164 @@ +using System.Security.Claims; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using TerraformRegistry.Models; +using TerraformRegistry.Services; + +namespace TerraformRegistry.Controllers; + +[ApiController] +[Route("api/keys")] +[Authorize] +public class ApiKeyController(IApiKeyService apiKeyService) : ControllerBase +{ + [HttpGet] + public async Task ListKeys() + { + var userId = GetUserId(); + if (string.IsNullOrEmpty(userId)) return Unauthorized(); + + var owner = await apiKeyService.GetUserByIdAsync(userId); + var keys = await apiKeyService.ListApiKeysAsync(userId); + var response = keys.Select(k => MapApiKey(k, owner)); + + return Ok(response); + } + + [HttpGet("shared")] + public async Task ListSharedKeys() + { + var keys = await apiKeyService.ListSharedApiKeysAsync(); + + // Preload owners to display ownership information + var owners = await LoadOwners(keys); + var response = keys.Select(k => MapApiKey(k, owners.GetValueOrDefault(k.UserId))); + + return Ok(response); + } + + [HttpPost] + public async Task CreateKey([FromBody] CreateApiKeyRequest request) + { + var userId = GetUserId(); + if (string.IsNullOrEmpty(userId)) return Unauthorized(); + + var (rawToken, key) = await apiKeyService.CreateApiKeyAsync(userId, request.Description, request.IsShared); + + var owner = await apiKeyService.GetUserByIdAsync(userId); + + return Ok(new + { + token = rawToken, + apiKey = MapApiKey(key, owner) + }); + } + + [HttpPut("{id}")] + public async Task UpdateKey(Guid id, [FromBody] UpdateApiKeyRequest request) + { + var userId = GetUserId(); + if (string.IsNullOrEmpty(userId)) return Unauthorized(); + + var result = await apiKeyService.UpdateApiKeyAsync(id, userId, request.Description, request.IsShared); + + if (result.Status == ApiKeyUpdateStatus.NotFound) return NotFound(); + if (result.Status == ApiKeyUpdateStatus.Forbidden) return Forbid(); + + var owner = await apiKeyService.GetUserByIdAsync(userId); + return Ok(MapApiKey(result.Key!, owner)); + } + + [HttpDelete("{id}")] + public async Task RevokeKey(Guid id) + { + var userId = GetUserId(); + if (string.IsNullOrEmpty(userId)) return Unauthorized(); + + var success = await apiKeyService.RevokeApiKeyAsync(id, userId); + if (!success) return NotFound(); + + return NoContent(); + } + + private string GetUserId() + { + // Assuming JWT/Auth puts relevant ID in claims + // Adjust claim type based on what OIDC/JWT Service provides + var idClaim = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value + ?? User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; + + return idClaim ?? string.Empty; + } + + private ApiKeyResponse MapApiKey(ApiKey key, User? owner) + { + return new ApiKeyResponse + { + Id = key.Id, + Description = key.Description, + Prefix = key.Prefix, + IsShared = key.IsShared, + CreatedAt = key.CreatedAt, + LastUsedAt = key.LastUsedAt, + OwnerUserId = owner?.Id ?? key.UserId, + OwnerUsername = owner?.ProviderId, + OwnerEmail = owner?.Email, + OwnerDisplay = BuildOwnerDisplay(owner, key.UserId) + }; + } + + private static string? BuildOwnerDisplay(User? owner, string fallbackUserId) + { + if (owner == null) return fallbackUserId; + + var username = owner.ProviderId; + var email = owner.Email; + + if (!string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(email)) + return $"{username} ({email})"; + + if (!string.IsNullOrWhiteSpace(username)) return username; + if (!string.IsNullOrWhiteSpace(email)) return email; + + return fallbackUserId; + } + + private async Task> LoadOwners(IEnumerable keys) + { + var owners = new Dictionary(); + + foreach (var key in keys) + { + if (owners.ContainsKey(key.UserId)) continue; + owners[key.UserId] = await apiKeyService.GetUserByIdAsync(key.UserId); + } + + return owners; + } +} + +public class CreateApiKeyRequest +{ + public string Description { get; set; } = string.Empty; + public bool IsShared { get; set; } +} + +public class UpdateApiKeyRequest +{ + public string Description { get; set; } = string.Empty; + public bool IsShared { get; set; } +} + +public class ApiKeyResponse +{ + public Guid Id { get; set; } + public string Description { get; set; } = string.Empty; + public string Prefix { get; set; } = string.Empty; + public bool IsShared { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? LastUsedAt { get; set; } + public string? OwnerUserId { get; set; } + public string? OwnerUsername { get; set; } + public string? OwnerEmail { get; set; } + public string? OwnerDisplay { get; set; } +} diff --git a/TerraformRegistry/Handlers/AuthHandlers.cs b/TerraformRegistry/Handlers/AuthHandlers.cs new file mode 100644 index 0000000..be0b4a3 --- /dev/null +++ b/TerraformRegistry/Handlers/AuthHandlers.cs @@ -0,0 +1,202 @@ +using System.Security.Claims; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.Services; + +namespace TerraformRegistry.Handlers; + +/// +/// Minimal API handlers for OIDC authentication. +/// +public static class AuthHandlers +{ + private const string SessionCookieName = "tf-session"; + private const string StateCookieName = "oauth-state"; + + /// + /// Returns list of enabled OIDC providers. + /// + public static IResult GetProviders(OAuthService oauthService) + { + var providers = oauthService.GetEnabledProviders(); + return Results.Ok(providers); + } + + /// + /// Initiates OIDC login flow for the specified provider. + /// + public static IResult Login(string provider, OAuthService oauthService, HttpContext context) + { + try + { + // Generate and store state for CSRF protection + var state = Guid.NewGuid().ToString("N"); + context.Response.Cookies.Append(StateCookieName, state, new CookieOptions + { + HttpOnly = true, + Secure = context.Request.IsHttps, + SameSite = SameSiteMode.Lax, + MaxAge = TimeSpan.FromMinutes(10) + }); + + var authUrl = oauthService.GetAuthorizationUrl(provider, state); + return Results.Redirect(authUrl); + } + catch (ArgumentException ex) + { + return Results.BadRequest(new { error = ex.Message }); + } + } + + /// + /// Handles OIDC callback after provider authentication. + /// + public static async Task Callback( + string provider, + string? code, + string? state, + string? error, + OAuthService oauthService, + JwtService jwtService, + IApiKeyService apiKeyService, + HttpContext context, + ILogger logger) + { + // Check for OAuth errors + if (!string.IsNullOrEmpty(error)) + { + logger.LogWarning("OAuth error from {Provider}: {Error}", provider, error); + return Results.Redirect("/login?error=oauth_denied"); + } + + // Validate state to prevent CSRF + var storedState = context.Request.Cookies[StateCookieName]; + if (string.IsNullOrEmpty(state) || storedState != state) + { + logger.LogWarning("OAuth state mismatch for {Provider}", provider); + return Results.Redirect("/login?error=invalid_state"); + } + + // Clear state cookie + context.Response.Cookies.Delete(StateCookieName); + + if (string.IsNullOrEmpty(code)) + { + return Results.Redirect("/login?error=no_code"); + } + + // Exchange code for user info + var userInfo = await oauthService.ExchangeCodeForUserInfoAsync(provider, code); + if (userInfo == null) + { + logger.LogError("Failed to exchange code for user info with {Provider}", provider); + return Results.Redirect("/login?error=exchange_failed"); + } + + logger.LogInformation("User {Email} logged in via {Provider}", userInfo.Email, provider); + + // Ensure user exists; userInfo.Id is the provider's ID (e.g. GitHub numeric ID). + var user = await apiKeyService.GetOrCreateUserAsync(userInfo.Email, provider, userInfo.Id); + + // Generate session JWT using the database User ID, not the provider ID + var token = jwtService.GenerateToken( + user.Id, // Use DB ID + userInfo.Email, + userInfo.Name, + userInfo.Provider, + userInfo.AvatarUrl + ); + + // Set session cookie + context.Response.Cookies.Append(SessionCookieName, token, new CookieOptions + { + HttpOnly = true, + Secure = context.Request.IsHttps, + SameSite = SameSiteMode.Lax, + MaxAge = TimeSpan.FromHours(24) + }); + + return Results.Redirect("/"); + } + + /// + /// Returns current user info from session. + /// + public static IResult GetCurrentUser(JwtService jwtService, HttpContext context) + { + var token = context.Request.Cookies[SessionCookieName]; + if (string.IsNullOrEmpty(token)) + { + return Results.Unauthorized(); + } + + var principal = jwtService.ValidateToken(token); + var userInfo = JwtService.GetUserInfoFromPrincipal(principal); + + if (userInfo == null) + { + return Results.Unauthorized(); + } + + return Results.Ok(userInfo); + } + + /// + /// Logs out the current user by clearing the session cookie. + /// + public static IResult Logout(HttpContext context) + { + context.Response.Cookies.Delete(SessionCookieName); + return Results.Ok(new { message = "Logged out successfully" }); + } + + /// + /// Checks if user has a valid session. + /// + public static IResult CheckSession(JwtService jwtService, HttpContext context) + { + var token = context.Request.Cookies[SessionCookieName]; + if (string.IsNullOrEmpty(token)) + { + return Results.Ok(new { authenticated = false }); + } + + var principal = jwtService.ValidateToken(token); + if (principal == null) + { + return Results.Ok(new { authenticated = false }); + } + + return Results.Ok(new { authenticated = true }); + } + + /// + /// Deletes the current user's account. + /// + public static async Task DeleteAccount( + HttpContext context, + IApiKeyService apiKeyService, + IDatabaseService dbService) + { + var userId = context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; + if (string.IsNullOrEmpty(userId)) + { + return Results.Unauthorized(); + } + + // Check for existing API keys + var keys = await apiKeyService.ListApiKeysAsync(userId); + if (keys.Any()) + { + return Results.Conflict(new { error = "You must delete all API keys before deleting your account." }); + } + + // Delete user + await dbService.DeleteUserAsync(userId); + + // Clear session + context.Response.Cookies.Delete(SessionCookieName); + + return Results.Ok(); + } +} diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs new file mode 100644 index 0000000..163155f --- /dev/null +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -0,0 +1,227 @@ +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Middleware; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Handlers; + +using static Results; + +/// +/// Handlers for module operations +/// +public static class ModuleHandlers +{ + private static readonly ILogger _logger; + + // Static constructor to initialize the logger + static ModuleHandlers() + { + // Create a logger factory and get a logger instance + var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); }); + + _logger = loggerFactory.CreateLogger("ModuleHandlers"); + } + + // Helper to return error responses in Terraform Registry format + private static IResult Error(int statusCode, string message) + { + return ErrorResponseExtensions.TerraformError(statusCode, message); + } + + /// + /// Lists or searches modules + /// + public static async Task ListModules( + IModuleService moduleService, + string? q = null, + string? @namespace = null, + string? provider = null, + int offset = 0, + int limit = 10) + { + _logger.LogInformation("Listing modules with query: {Query}, namespace: {Namespace}, provider: {Provider}", + q, @namespace, provider); + + var request = new ModuleSearchRequest + { + Q = q, + Namespace = @namespace, + Provider = provider, + Offset = offset, + Limit = limit + }; + + var result = await moduleService.ListModulesAsync(request); + return Ok(result); + } + + /// + /// Gets a specific module + /// + public static async Task GetModule( + string @namespace, + string name, + string provider, + string version, + IModuleService moduleService) + { + _logger.LogInformation("Getting module: {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + + var module = await moduleService.GetModuleAsync(@namespace, name, provider, version); + if (module == null) return ErrorResponseExtensions.NotFound("Module not found"); + + return Ok(module); + } + + /// + /// Gets all versions of a specific module + /// + public static async Task GetModuleVersions( + string @namespace, + string name, + string provider, + IModuleService moduleService) + { + _logger.LogInformation("Getting versions for module: {Namespace}/{Name}/{Provider}", + @namespace, name, provider); + + var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); + if (versions == null || versions.Modules == null || !versions.Modules.Any() || + versions.Modules.FirstOrDefault()?.Versions == null || !versions.Modules.FirstOrDefault()!.Versions.Any()) + return ErrorResponseExtensions.NotFound("Module not found"); + return Ok(versions); + } + + /// + /// Downloads a specific module version + /// + public static async Task DownloadModule( + string @namespace, + string name, + string provider, + string version, + IModuleService moduleService, + HttpContext context) + { + _logger.LogInformation("Downloading module: {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + + var downloadPath = await moduleService.GetModuleDownloadPathAsync(@namespace, name, provider, version); + if (downloadPath == null) return ErrorResponseExtensions.NotFound("Module not found"); + + context.Response.Headers["X-Terraform-Get"] = downloadPath; + + // Terraform CLI expects 204 + X-Terraform-Get. Portal/browser should follow a redirect. + var userAgent = context.Request.Headers["User-Agent"].ToString(); + var accept = context.Request.Headers["Accept"].ToString(); + var isTerraformClient = userAgent.Contains("Terraform", StringComparison.OrdinalIgnoreCase) || + accept.Contains("terraform", StringComparison.OrdinalIgnoreCase); + + if (isTerraformClient) + { + return NoContent(); + } + + context.Response.Headers.Location = downloadPath; + context.Response.StatusCode = StatusCodes.Status302Found; + return Empty; + } + + /// + /// Downloads the latest version of a module for a provider + /// + public static async Task DownloadLatestModule( + string @namespace, + string name, + string provider, + IModuleService moduleService, + HttpContext context) + { + _logger.LogInformation("Downloading latest module: {Namespace}/{Name}/{Provider}", + @namespace, name, provider); + + // Get all versions and pick the latest using SemVer sort + var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); + var latestVersions = versions?.Modules?.FirstOrDefault()?.Versions; + var latest = latestVersions?.OrderByDescending(v => v.Version, Comparer.Create((a, b) => + SemVerValidator.Compare(a, b) ?? 0)).FirstOrDefault()?.Version; + if (string.IsNullOrEmpty(latest)) return ErrorResponseExtensions.NotFound("Module not found"); + + return await DownloadModule(@namespace, name, provider, latest, moduleService, context); + } + + /// + /// Uploads a new module version + /// + public static async Task UploadModule( + string @namespace, + string name, + string provider, + string version, + HttpRequest request, + IModuleService moduleService) + { + _logger.LogInformation("Uploading module: {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + + // Validate the version string against SemVer 2.0.0 specification + if (!SemVerValidator.IsValid(version)) + { + _logger.LogWarning("Invalid version format: {Version}", version); + return ErrorResponseExtensions.BadRequest( + $"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]"); + } + + var form = await request.ReadFormAsync(); + var moduleFile = form.Files["moduleFile"]; + var description = form["description"].ToString() ?? string.Empty; + + if (moduleFile == null || moduleFile.Length == 0) return ErrorResponseExtensions.BadRequest("No file uploaded"); + + try + { + // Parse optional replace parameter from form or query + bool replace = false; + var replaceRaw = form["replace"].ToString(); + if (string.IsNullOrWhiteSpace(replaceRaw) && request.Query.ContainsKey("replace")) + { + replaceRaw = request.Query["replace"].ToString(); + } + if (!string.IsNullOrWhiteSpace(replaceRaw)) + { + var val = replaceRaw.Trim(); + if (string.Equals(val, "true", StringComparison.OrdinalIgnoreCase) || val == "1") + replace = true; + else if (string.Equals(val, "false", StringComparison.OrdinalIgnoreCase) || val == "0") + replace = false; + } + + await using var stream = moduleFile.OpenReadStream(); + var result = + await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description, replace); + + if (!result) + { + return ErrorResponseExtensions.Conflict("Module version already exists"); + } + + // Return JSON with filename using DTO + var response = new UploadModuleResponse { Filename = moduleFile.FileName }; + return Created($"/v1/modules/{@namespace}/{name}/{provider}/{version}", response); + } + catch (ArgumentException ex) when (ex.Message.Contains("Version")) + { + _logger.LogWarning("Invalid version format: {Version} - {Message}", version, ex.Message); + return ErrorResponseExtensions.BadRequest(ex.Message); + } + catch (InvalidOperationException ex) when (ex.Message.Contains("already exists")) + { + _logger.LogInformation("Module version already exists: {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + return ErrorResponseExtensions.Conflict(ex.Message); + } + // Let other exceptions bubble up to the global exception handler + } +} \ No newline at end of file diff --git a/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs new file mode 100644 index 0000000..bbc318d --- /dev/null +++ b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs @@ -0,0 +1,17 @@ +using TerraformRegistry.Models; + +namespace TerraformRegistry.Handlers; + +/// +/// Handlers for service discovery +/// +public static class ServiceDiscoveryHandlers +{ + /// + /// Terraform service discovery endpoint + /// + public static IResult GetServiceDiscovery() + { + return Results.Ok(new ServiceDiscovery()); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs new file mode 100644 index 0000000..0549cb9 --- /dev/null +++ b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs @@ -0,0 +1,138 @@ +using System.Security.Claims; +using TerraformRegistry.Services; + +namespace TerraformRegistry.Middleware; + +public class AuthenticationMiddleware( + RequestDelegate next, + string authToken, + JwtService jwtService, + ILogger logger) +{ + private const string AuthorizationHeader = "Authorization"; + private const string BearerPrefix = "Bearer "; + private const string SessionCookieName = "tf-session"; + private static readonly string[] ProtectedPathPrefixes = ["/v1/", "/api/keys"]; + + public async Task InvokeAsync(HttpContext context) + { + var path = context.Request.Path.Value ?? string.Empty; + if (ProtectedPathPrefixes.Any(prefix => path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + { + var header = context.Request.Headers[AuthorizationHeader].FirstOrDefault(); + + // Check 1: Static API token (Legacy/System) + if (!string.IsNullOrEmpty(header) && header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) + { + await next(context); + return; + } + + // Check 2: Database API Keys (Try if not a JWT) + if (!string.IsNullOrEmpty(header) && header.StartsWith(BearerPrefix, StringComparison.OrdinalIgnoreCase)) + { + var token = header.Substring(BearerPrefix.Length); + + // Heuristic: JWTs usually have 2 dots. API keys don't. + // If it doesn't look like a JWT, try API key validation first. + if (!token.Contains('.') || token.Count(c => c == '.') != 2) + { + using var scope = context.RequestServices.CreateScope(); // Service is scoped usually + var apiKeyService = scope.ServiceProvider.GetRequiredService(); + var apiKey = await apiKeyService.ValidateApiKeyAsync(token); + + if (apiKey != null) + { + // Set user principal if tied to key; Terraform CLI uses ApiKey identity. + var claims = new List + { + new(ClaimTypes.NameIdentifier, apiKey.UserId.ToString()), + new(ClaimTypes.AuthenticationMethod, "ApiKey") + }; + var identity = new ClaimsIdentity(claims, "ApiKey"); + context.User = new ClaimsPrincipal(identity); + + await next(context); + return; + } + } + } + + // Check 3: JWT from session cookie (Portal) + var sessionToken = context.Request.Cookies[SessionCookieName]; + if (!string.IsNullOrEmpty(sessionToken)) + { + logger.LogInformation("Processing request for {Path}. Found session cookie.", path); + var principal = jwtService.ValidateToken(sessionToken); + if (principal != null) + { + context.User = principal; + logger.LogInformation("Session cookie validated successfully for {Path}. User: {User}. IsAuthenticated: {IsAuthenticated}. AuthType: {AuthType}", + path, + principal.Identity?.Name, + context.User.Identity?.IsAuthenticated, + context.User.Identity?.AuthenticationType); + + logger.LogInformation("AuthenticationMiddleware: Calling next middleware for {Path}", path); + await next(context); + return; + } + else + { + logger.LogWarning("Session cookie validation failed for {Path}. Token: {TokenPrefix}...", path, sessionToken.Substring(0, Math.Min(10, sessionToken.Length))); + } + } + else + { + logger.LogInformation("Processing request for {Path}. No session cookie found.", path); + } + + // Check 4: JWT in Authorization header (Bearer token) + if (!string.IsNullOrEmpty(header) && header.StartsWith(BearerPrefix, StringComparison.OrdinalIgnoreCase)) + { + var jwtToken = header.Substring(BearerPrefix.Length); + // If we are here, it might be a JWT (or an invalid API key) + // Only try JWT validation if it looks like one + if (jwtToken.Contains('.') && jwtToken.Count(c => c == '.') == 2) + { + var principal = jwtService.ValidateToken(jwtToken); + if (principal != null) + { + context.User = principal; + await next(context); + return; + } + } + } + + // No valid authentication found + logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, + context.Connection.RemoteIpAddress); + + // For /api/keys, we let the [Authorize] attribute handle the challenge + if (path.StartsWith("/api/keys", StringComparison.OrdinalIgnoreCase)) + { + await next(context); + return; + } + + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + context.Response.Headers["WWW-Authenticate"] = "Bearer"; + var accept = context.Request.Headers["Accept"].ToString(); + var prefersJson = accept.Contains("application/json", StringComparison.OrdinalIgnoreCase) || + accept.Contains("text/html", StringComparison.OrdinalIgnoreCase); + + if (prefersJson) + { + await context.Response.WriteAsJsonAsync(new { error = "Unauthorized", path }); + } + else + { + await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); + } + return; + } + + await next(context); + } +} diff --git a/TerraformRegistry/Middleware/CustomBearerHandler.cs b/TerraformRegistry/Middleware/CustomBearerHandler.cs new file mode 100644 index 0000000..e07f562 --- /dev/null +++ b/TerraformRegistry/Middleware/CustomBearerHandler.cs @@ -0,0 +1,32 @@ +using System.Text.Encodings.Web; +using Microsoft.AspNetCore.Authentication; +using Microsoft.Extensions.Options; + +namespace TerraformRegistry.Middleware; + +public class CustomBearerHandler : AuthenticationHandler +{ + public CustomBearerHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder) + : base(options, logger, encoder) + { + } + + protected override Task HandleAuthenticateAsync() + { + // The middleware has already run and set the user if successful. + // We just check if the user is set. + if (Context.User?.Identity?.IsAuthenticated == true) + { + // Use the existing principal and return a ticket for this scheme. + var ticket = new AuthenticationTicket(Context.User, Scheme.Name); + return Task.FromResult(AuthenticateResult.Success(ticket)); + } + + // Log why we are failing + Logger.LogInformation("CustomBearerHandler: User is not authenticated for {Path}. Context.User.Identity.IsAuthenticated: {IsAuthenticated}", + Context.Request.Path, + Context.User?.Identity?.IsAuthenticated); + + return Task.FromResult(AuthenticateResult.NoResult()); + } +} diff --git a/TerraformRegistry/Middleware/ErrorResponseExtensions.cs b/TerraformRegistry/Middleware/ErrorResponseExtensions.cs new file mode 100644 index 0000000..74567bb --- /dev/null +++ b/TerraformRegistry/Middleware/ErrorResponseExtensions.cs @@ -0,0 +1,89 @@ +namespace TerraformRegistry.Middleware; + +/// +/// Extensions for creating consistent error responses that follow the Terraform Registry API format +/// +public static class ErrorResponseExtensions +{ + /// + /// Creates a Terraform Registry compliant error response + /// + /// HTTP status code + /// Error message + /// JSON result with errors array + public static IResult TerraformError(int statusCode, string message) + { + return Results.Json(new { errors = new[] { message } }, statusCode: statusCode); + } + + /// + /// Creates a Terraform Registry compliant error response with multiple messages + /// + /// HTTP status code + /// Error messages + /// JSON result with errors array + public static IResult TerraformError(int statusCode, params string[] messages) + { + return Results.Json(new { errors = messages }, statusCode: statusCode); + } + + /// + /// Creates a BadRequest (400) error response + /// + /// Error message + /// JSON result with 400 status code + public static IResult BadRequest(string message) + { + return TerraformError(400, message); + } + + /// + /// Creates an Unauthorized (401) error response + /// + /// Error message + /// JSON result with 401 status code + public static IResult Unauthorized(string message) + { + return TerraformError(401, message); + } + + /// + /// Creates a NotFound (404) error response + /// + /// Error message + /// JSON result with 404 status code + public static IResult NotFound(string message) + { + return TerraformError(404, message); + } + + /// + /// Creates a Conflict (409) error response + /// + /// Error message + /// JSON result with 409 status code + public static IResult Conflict(string message) + { + return TerraformError(409, message); + } + + /// + /// Creates an UnprocessableEntity (422) error response + /// + /// Error message + /// JSON result with 422 status code + public static IResult UnprocessableEntity(string message) + { + return TerraformError(422, message); + } + + /// + /// Creates an InternalServerError (500) error response + /// + /// Error message + /// JSON result with 500 status code + public static IResult InternalServerError(string message) + { + return TerraformError(500, message); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Middleware/GlobalExceptionMiddleware.cs b/TerraformRegistry/Middleware/GlobalExceptionMiddleware.cs new file mode 100644 index 0000000..11e7673 --- /dev/null +++ b/TerraformRegistry/Middleware/GlobalExceptionMiddleware.cs @@ -0,0 +1,77 @@ +using System.Text.Json; + +namespace TerraformRegistry.Middleware; + +/// +/// Global exception handling middleware that catches unhandled exceptions and returns consistent error responses +/// +public class GlobalExceptionMiddleware +{ + private readonly ILogger _logger; + private readonly RequestDelegate _next; + + public GlobalExceptionMiddleware(RequestDelegate next, ILogger logger) + { + _next = next; + _logger = logger; + } + + public async Task InvokeAsync(HttpContext context) + { + try + { + await _next(context); + } + catch (Exception ex) + { + _logger.LogError(ex, "An unhandled exception occurred while processing request {Method} {Path}", + context.Request.Method, context.Request.Path); + await HandleExceptionAsync(context, ex); + } + } + + private static async Task HandleExceptionAsync(HttpContext context, Exception exception) + { + context.Response.StatusCode = GetStatusCode(exception); + context.Response.ContentType = "application/json"; + + var response = CreateErrorResponse(exception, context.Response.StatusCode); + + var jsonOptions = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + + await context.Response.WriteAsync(JsonSerializer.Serialize(response, jsonOptions)); + } + + private static int GetStatusCode(Exception exception) + { + return exception switch + { + ArgumentNullException => 400, + ArgumentException => 400, + UnauthorizedAccessException => 401, + FileNotFoundException => 404, + DirectoryNotFoundException => 404, + NotSupportedException => 405, + TimeoutException => 408, + InvalidOperationException when exception.Message.Contains("already exists") => 409, + InvalidOperationException => 422, + _ => 500 + }; + } + + private static object CreateErrorResponse(Exception exception, int statusCode) + { + // Follow Terraform Registry API error format + var errorMessage = statusCode == 500 + ? "An internal server error occurred" + : exception.Message; + + return new + { + errors = new[] { errorMessage } + }; + } +} \ No newline at end of file diff --git a/TerraformRegistry/Middleware/PortalAuthenticationMiddleware.cs b/TerraformRegistry/Middleware/PortalAuthenticationMiddleware.cs new file mode 100644 index 0000000..9e1bab8 --- /dev/null +++ b/TerraformRegistry/Middleware/PortalAuthenticationMiddleware.cs @@ -0,0 +1,92 @@ +using TerraformRegistry.Services; + +namespace TerraformRegistry.Middleware; + +/// +/// Middleware that validates JWT session tokens for portal routes. +/// API routes (/v1/*) bypass this and use API key authentication instead. +/// +public class PortalAuthenticationMiddleware( + RequestDelegate next, + JwtService jwtService, + ILogger logger) +{ + private const string SessionCookieName = "tf-session"; + + // Routes that require portal authentication + private static readonly string[] ProtectedPortalPaths = ["/modules"]; + + // Routes that bypass auth; login/callback flows are explicitly skipped so auth endpoints can set Context.User. + private static readonly string[] PublicPaths = ["/", "/login", "/callback", "/api/auth/login", "/api/auth/callback", "/api/auth/providers"]; + + public async Task InvokeAsync(HttpContext context) + { + var path = context.Request.Path.Value ?? string.Empty; + + // Skip auth for API routes handled by API key middleware; portal uses cookie auth. + if (path.StartsWith("/v1/", StringComparison.OrdinalIgnoreCase) || path.StartsWith("/api/keys", StringComparison.OrdinalIgnoreCase)) + { + await next(context); + return; + } + + // Skip auth for public paths + if (IsPublicPath(path)) + { + await next(context); + return; + } + + // For any other path (including /api/auth/me, /settings, etc), try to authenticate if cookie exists. + // We don't enforce it unless it's a protected path, but we should populate Context.User. + var token = context.Request.Cookies[SessionCookieName]; + if (!string.IsNullOrEmpty(token)) + { + var principal = jwtService.ValidateToken(token); + if (principal != null) + { + context.User = principal; + logger.LogInformation("Portal session validated for {Path}. User: {User}", path, principal.Identity?.Name); + } + } + + // Check for protected portal paths + if (IsProtectedPortalPath(path)) + { + if (context.User.Identity?.IsAuthenticated != true) + { + // For API requests, return 401; for page requests, redirect to login + if (context.Request.Headers.Accept.ToString().Contains("application/json")) + { + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + await context.Response.WriteAsJsonAsync(new { error = "Not authenticated" }); + return; + } + + context.Response.Redirect("/login"); + return; + } + } + + await next(context); + } + + private static bool IsPublicPath(string path) + { + return PublicPaths.Any(p => path.Equals(p, StringComparison.OrdinalIgnoreCase) || + path.StartsWith(p + "/", StringComparison.OrdinalIgnoreCase)); + } + + private static bool IsProtectedPortalPath(string path) + { + return ProtectedPortalPaths.Any(p => + path.Equals(p, StringComparison.OrdinalIgnoreCase) || + path.StartsWith(p + "/", StringComparison.OrdinalIgnoreCase)); + } + + private static bool IsStaticFile(string path) + { + var extensions = new[] { ".js", ".css", ".png", ".jpg", ".jpeg", ".gif", ".svg", ".ico", ".woff", ".woff2", ".ttf", ".map" }; + return extensions.Any(ext => path.EndsWith(ext, StringComparison.OrdinalIgnoreCase)); + } +} diff --git a/TerraformRegistry/Models/DatabaseRetryOptions.cs b/TerraformRegistry/Models/DatabaseRetryOptions.cs new file mode 100644 index 0000000..049aa0e --- /dev/null +++ b/TerraformRegistry/Models/DatabaseRetryOptions.cs @@ -0,0 +1,27 @@ +namespace TerraformRegistry.Models; + +/// +/// Configuration options for database connection retry behavior during application startup. +/// +public class DatabaseRetryOptions +{ + /// + /// The maximum number of retry attempts before giving up. + /// Default: 5 + /// + public int MaxRetryAttempts { get; set; } = 5; + + /// + /// The initial delay in seconds before the first retry attempt. + /// Subsequent retries use exponential backoff. + /// Default: 2 seconds + /// + public int InitialDelaySeconds { get; set; } = 2; + + /// + /// The maximum delay in seconds between retry attempts. + /// Prevents exponential backoff from growing too large. + /// Default: 30 seconds + /// + public int MaxDelaySeconds { get; set; } = 30; +} diff --git a/TerraformRegistry/Models/OidcOptions.cs b/TerraformRegistry/Models/OidcOptions.cs new file mode 100644 index 0000000..b1d9842 --- /dev/null +++ b/TerraformRegistry/Models/OidcOptions.cs @@ -0,0 +1,48 @@ +namespace TerraformRegistry.Models; + +/// +/// Configuration options for a single OIDC provider. +/// +public class OidcProviderOptions +{ + public string ClientId { get; set; } = string.Empty; + public string ClientSecret { get; set; } = string.Empty; + public string AuthorizationEndpoint { get; set; } = string.Empty; + public string TokenEndpoint { get; set; } = string.Empty; + public string UserInfoEndpoint { get; set; } = string.Empty; + public string[] Scopes { get; set; } = []; + public bool Enabled { get; set; } = false; +} + +/// +/// Configuration options for OIDC authentication. +/// +public class OidcOptions +{ + public string JwtSecretKey { get; set; } = string.Empty; + public int JwtExpiryHours { get; set; } = 24; + public Dictionary Providers { get; set; } = + new(StringComparer.OrdinalIgnoreCase); +} + +/// +/// Response model for available OIDC providers. +/// +public class OidcProviderInfo +{ + public string Name { get; set; } = string.Empty; + public string DisplayName { get; set; } = string.Empty; + public string Icon { get; set; } = string.Empty; +} + +/// +/// Response model for current user info. +/// +public class UserInfo +{ + public string Id { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string Name { get; set; } = string.Empty; + public string Provider { get; set; } = string.Empty; + public string AvatarUrl { get; set; } = string.Empty; +} diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs new file mode 100644 index 0000000..70034e2 --- /dev/null +++ b/TerraformRegistry/Program.cs @@ -0,0 +1,364 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.FileProviders; +using NSwag; +using NSwag.Generation.Processors.Security; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.AzureBlob; +using TerraformRegistry.Handlers; +using TerraformRegistry.Middleware; +using TerraformRegistry.Models; +using TerraformRegistry.PostgreSQL; +using TerraformRegistry.PostgreSQL.Migrations; +using TerraformRegistry.Services; + +var builder = WebApplication.CreateSlimBuilder(args); + +builder.Configuration + .AddJsonFile("appsettings.json", true, true) + .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", true, true) + .AddEnvironmentVariables("TF_REG_"); + +// Register database retry options +builder.Services.Configure(builder.Configuration.GetSection("DatabaseRetry")); + +// Register MigrationManager and IInitializableDb for database initialization +builder.Services.AddSingleton(); +builder.Services.AddSingleton(provider => +{ + var db = provider.GetRequiredService(); + return db as IInitializableDb ?? + throw new InvalidOperationException("Database service does not implement IInitializableDb"); +}); + +// Register database service using DI factory +builder.Services.AddSingleton(provider => +{ + var config = provider.GetRequiredService(); + var loggerDb = provider.GetRequiredService>(); + var migrationManager = provider.GetRequiredService(); + var databaseProvider = config["DatabaseProvider"]?.ToLower() ?? "sqlite"; + var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; + + if (string.IsNullOrEmpty(baseUrl)) + throw new InvalidOperationException("BaseUrl is missing or empty. Please check your configuration."); + switch (databaseProvider) + { + case "postgres": + var connectionString = config["PostgreSQL:ConnectionString"]; + if (string.IsNullOrEmpty(connectionString)) + throw new InvalidOperationException( + "PostgreSQL connection string is missing or empty. Please check your configuration."); + return new PostgreSqlDatabaseService(connectionString, baseUrl, loggerDb, migrationManager); + case "sqlite": + var sqliteConn = config["Sqlite:ConnectionString"] ?? "Data Source=terraform.db"; + var sqliteLogger = provider.GetRequiredService>(); + return new SqliteDatabaseService(sqliteConn, baseUrl, sqliteLogger); + default: + throw new Exception($"Invalid database provider specified: '{databaseProvider}'. Check configuration."); + } +}); + +// Register module storage service using DI factory +builder.Services.AddSingleton(provider => +{ + var config = provider.GetRequiredService(); + var db = provider.GetRequiredService(); + var logger = provider.GetRequiredService>(); + var storageProvider = config["StorageProvider"]?.ToLower() ?? "local"; + switch (storageProvider) + { + case "azure": + return new AzureBlobModuleService(config, db, + provider.GetRequiredService>()); + case "local": + var storagePath = config["ModuleStoragePath"]; + if (string.IsNullOrEmpty(storagePath)) + { + logger.LogError( + "ModuleStoragePath is missing or empty. Please check your configuration. Application cannot start."); + throw new InvalidOperationException( + "ModuleStoragePath is missing or empty. Please check your configuration."); + } + + return new LocalModuleService(config, db, logger); + default: + throw new Exception($"Invalid storage provider specified: '{storageProvider}'. Check configuration."); + } +}); + +builder.Services.AddHostedService(); + +// Register HttpClientFactory for OAuth flows +builder.Services.AddHttpClient(); + +// Register Controllers (for ApiKeyController) +builder.Services.AddControllers(); + +// Register Authentication (required for [Authorize] attribute) +builder.Services.AddAuthentication(options => +{ + options.DefaultAuthenticateScheme = "CustomBearer"; + options.DefaultChallengeScheme = "CustomBearer"; +}) +.AddScheme("CustomBearer", options => { }); + +// Register OIDC configuration and services +var oidcOptions = new OidcOptions(); +builder.Configuration.GetSection("Oidc").Bind(oidcOptions); +builder.Services.AddSingleton(oidcOptions); +builder.Services.AddSingleton(); + +builder.Services.AddSingleton(); + +// Register API Key Service +builder.Services.AddScoped(); + +builder.Services.ConfigureHttpJsonOptions(options => +{ + options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; + // Add other options as needed +}); + +var enableSwagger = false; +var enableSwaggerConfig = builder.Configuration["EnableSwagger"]; +if (!string.IsNullOrEmpty(enableSwaggerConfig) && bool.TryParse(enableSwaggerConfig, out var parsed)) + enableSwagger = parsed; +else if (builder.Environment.IsDevelopment()) enableSwagger = true; + +if (enableSwagger) +{ + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddOpenApiDocument(options => + { + options.Title = "Terraform Registry API"; + options.Version = "v1"; + options.Description = "A private Terraform Registry API for modules"; + // Add Bearer authentication support + options.AddSecurity("Bearer", new OpenApiSecurityScheme + { + Type = OpenApiSecuritySchemeType.Http, + Scheme = "bearer", + BearerFormat = "JWT", + Name = "Authorization", + In = OpenApiSecurityApiKeyLocation.Header, + Description = "Enter your Bearer token in the format: Bearer {token}" + }); + options.OperationProcessors.Add(new AspNetCoreOperationSecurityScopeProcessor("Bearer")); + }); +} + +var app = builder.Build(); + +// Log which providers are in use +var logger = app.Services.GetRequiredService>(); +var config = app.Services.GetRequiredService(); +logger.LogInformation("Using {DatabaseProvider} database for module metadata", + config["DatabaseProvider"] ?? "sqlite"); +logger.LogInformation("Using {StorageProvider} storage for module storage", config["StorageProvider"] ?? "local"); + +var authToken = app.Configuration["AuthorizationToken"]; +if (string.IsNullOrEmpty(authToken)) + throw new InvalidOperationException( + "AuthorizationToken is missing or empty. Please set a secure token in your configuration."); +if (authToken == "default-auth-token") + logger.LogWarning( + "WARNING: The default AuthorizationToken is in use. This is not secure. Please set a secure token in your configuration."); + +app.UseHttpsRedirection(); + +// Add global exception handling middleware early in the pipeline +app.UseMiddleware(); + +var webFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "web"); +if (Directory.Exists(webFolderPath)) + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(webFolderPath), + RequestPath = "" + }); + +// Portal authentication middleware (validates JWT sessions for portal routes) +var jwtService = app.Services.GetRequiredService(); +app.UseMiddleware(jwtService); + +// API key authentication middleware (for /v1/* routes used by Terraform CLI) +// Supports both static token and JWT session authentication +app.UseMiddleware(authToken, jwtService); + +app.UseAuthentication(); +app.UseAuthorization(); + +if (enableSwagger) +{ + app.UseOpenApi(); + app.UseSwaggerUi(); +} + +var port = builder.Configuration["PORT"] ?? builder.Configuration["Port"] ?? "5131"; +if (!int.TryParse(port, out var portNumber)) + throw new InvalidOperationException($"Invalid port specified: '{port}'. Please check your configuration."); + +app.MapGet("/", async context => +{ + var indexPath = Path.Combine(webFolderPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + } + else + { + context.Response.StatusCode = 404; + } +}); + +// OIDC Authentication endpoints +var oauthService = app.Services.GetRequiredService(); + +app.MapGet("/api/auth/providers", () => AuthHandlers.GetProviders(oauthService)) + .WithTags("Authentication") + .WithDescription("Returns list of enabled OIDC providers"); + +app.MapGet("/api/auth/login/{provider}", (string provider, HttpContext context) => + AuthHandlers.Login(provider, oauthService, context)) + .WithTags("Authentication") + .WithDescription("Initiates OIDC login flow for the specified provider"); + +app.MapGet("/api/auth/callback/{provider}", async (string provider, string? code, string? state, string? error, + HttpContext context, IApiKeyService apiKeyService, ILogger authLogger) => + await AuthHandlers.Callback(provider, code, state, error, oauthService, jwtService, apiKeyService, context, authLogger)) + .WithTags("Authentication") + .WithDescription("Handles OIDC callback after provider authentication"); + +app.MapGet("/api/auth/me", (HttpContext context) => AuthHandlers.GetCurrentUser(jwtService, context)) + .WithTags("Authentication") + .WithDescription("Returns current user info from session"); + +app.MapPost("/api/auth/logout", (HttpContext context) => AuthHandlers.Logout(context)) + .WithTags("Authentication") + .WithDescription("Logs out the current user"); + +app.MapDelete("/api/auth/me", (HttpContext context, IApiKeyService apiKeyService, IDatabaseService dbService) => + AuthHandlers.DeleteAccount(context, apiKeyService, dbService)) + .WithTags("Authentication") + .WithDescription("Deletes the current user account") + .RequireAuthorization(); + +app.MapGet("/api/auth/session", (HttpContext context) => AuthHandlers.CheckSession(jwtService, context)) + .WithTags("Authentication") + .WithDescription("Checks if user has a valid session"); + +app.MapGet("/.well-known/terraform.json", ServiceDiscoveryHandlers.GetServiceDiscovery) + .WithTags("Service Discovery") + .WithDescription("Terraform service discovery endpoint") + .Produces(); + +app.MapGet("/v1/modules", + (IModuleService moduleService, string? q, string? @namespace, string? provider, int offset = 0, int limit = 10) => + ModuleHandlers.ListModules(moduleService, q, @namespace, provider, offset, limit)) + .WithTags("Modules") + .WithDescription("Lists or searches modules") + .Produces(); + +app.MapGet("/v1/modules/{namespace}/{name}/{provider}/{version}", (string @namespace, string name, string provider, + string version, IModuleService moduleService) => + ModuleHandlers.GetModule(@namespace, name, provider, version, moduleService)) + .WithTags("Modules") + .WithDescription("Gets a specific module") + .Produces() + .ProducesProblem(404); + +app.MapGet("/v1/modules/{namespace}/{name}/{provider}/versions", + (string @namespace, string name, string provider, IModuleService moduleService) => + ModuleHandlers.GetModuleVersions(@namespace, name, provider, moduleService)) + .WithTags("Modules") + .WithDescription("Gets all versions of a specific module") + .Produces(); + +app.MapGet("/v1/modules/{namespace}/{name}/{provider}/{version}/download", (string @namespace, string name, + string provider, string version, IModuleService moduleService, HttpContext context) => + ModuleHandlers.DownloadModule(@namespace, name, provider, version, moduleService, context)) + .WithTags("Modules") + .WithDescription("Downloads a specific module version") + .Produces(200, contentType: "application/zip") + .ProducesProblem(404); + +app.MapGet("/v1/modules/{namespace}/{name}/{provider}/download", + (string @namespace, string name, string provider, IModuleService moduleService, HttpContext context) => + ModuleHandlers.DownloadLatestModule(@namespace, name, provider, moduleService, context)) + .WithTags("Modules") + .WithDescription("Downloads the latest version of a module for a provider") + .Produces(302) + .ProducesProblem(404); + +app.MapPost("/v1/modules/{namespace}/{name}/{provider}/{version}", async (string @namespace, string name, + string provider, string version, HttpRequest request, IModuleService moduleService) => + await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, moduleService)) + .WithTags("Modules") + .WithDescription("Uploads a new module version") + .Accepts("multipart/form-data") + .ProducesProblem(400) + .ProducesProblem(409) + .Produces(201); + +app.MapGet("/module/download", async context => +{ + var token = context.Request.Query["token"].ToString(); + if (string.IsNullOrEmpty(token) || !LocalModuleService.TryGetFilePathFromToken(token, out var filePath)) + { + context.Response.StatusCode = 404; + await context.Response.WriteAsync("Invalid or expired download link."); + return; + } + + if (!File.Exists(filePath)) + { + context.Response.StatusCode = 404; + await context.Response.WriteAsync("File not found."); + return; + } + + context.Response.ContentType = "application/zip"; + context.Response.Headers["Content-Disposition"] = $"attachment; filename=\"{Path.GetFileName(filePath)}\""; + await context.Response.SendFileAsync(filePath); +}); + +app.MapControllers(); + +app.MapFallback(async context => +{ + // If path starts with /v1/ or /api/, return problem JSON (API routes) + if (context.Request.Path.StartsWithSegments("/v1") || context.Request.Path.StartsWithSegments("/api")) + { + context.Response.StatusCode = 404; + context.Response.ContentType = "application/problem+json"; + var problem = new ProblemDetails + { + Type = "404", + Title = "Not Found", + Status = 404, + Detail = "The requested resource was not found." + }; + await context.Response.WriteAsJsonAsync(problem); + return; + } + + // For all other paths, serve index.html (SPA fallback) + var indexPath = Path.Combine(webFolderPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + return; + } + + // If no index.html exists, return 404 + context.Response.StatusCode = 404; +}); + +app.Run($"http://0.0.0.0:{portNumber}"); + +public partial class Program; \ No newline at end of file diff --git a/TerraformRegistry/Properties/launchSettings.json b/TerraformRegistry/Properties/launchSettings.json new file mode 100644 index 0000000..9fdf867 --- /dev/null +++ b/TerraformRegistry/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5131", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7241;http://localhost:5131", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/TerraformRegistry/Services/ApiKeyService.cs b/TerraformRegistry/Services/ApiKeyService.cs new file mode 100644 index 0000000..5c41211 --- /dev/null +++ b/TerraformRegistry/Services/ApiKeyService.cs @@ -0,0 +1,198 @@ +using System.Security.Cryptography; +using System.Text; +using Konscious.Security.Cryptography; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +public class ApiKeyService(IDatabaseService dbService, ILogger logger) : IApiKeyService +{ + private const int TokenLength = 32; + // private const string TokenPrefix = "tf-"; // Removed prefix requirement + + public async Task<(string RawToken, ApiKey Key)> CreateApiKeyAsync(string userId, string description, bool isShared = false) + { + // Generate random token + var randomBytes = RandomNumberGenerator.GetBytes(TokenLength); + var tokenCore = Convert.ToBase64String(randomBytes) + .Replace("+", "-").Replace("/", "_").Replace("=", ""); // URL-safe base64 + var rawToken = tokenCore; // No prefix + + // Hash token using Argon2id + var tokenHash = HashToken(rawToken); + + var apiKey = new ApiKey + { + Id = Guid.NewGuid(), + UserId = userId, + Description = description, + TokenHash = tokenHash, + Prefix = rawToken.Substring(0, 8), + IsShared = isShared, + CreatedAt = DateTime.UtcNow + }; + + await dbService.AddApiKeyAsync(apiKey); + + logger.LogInformation("Created new API key {KeyId} for user {UserId}", apiKey.Id, userId); + + return (rawToken, apiKey); + } + + public async Task ValidateApiKeyAsync(string rawToken) + { + if (string.IsNullOrWhiteSpace(rawToken)) + { + return null; + } + + var prefix = rawToken.Length >= 8 ? rawToken.Substring(0, 8) : rawToken; + + // Find keys with matching prefix to minimize Argon2 checks (expensive) + var candidates = await dbService.GetApiKeysByPrefixAsync(prefix); + + foreach (var key in candidates) + { + if (VerifyHash(rawToken, key.TokenHash)) + { + key.LastUsedAt = DateTime.UtcNow; + await dbService.UpdateApiKeyAsync(key); + return key; + } + } + + return null; + } + + public async Task GetApiKeyAsync(Guid id) + { + return await dbService.GetApiKeyAsync(id); + } + + public async Task> ListApiKeysAsync(string userId) + { + return await dbService.GetApiKeysByUserAsync(userId); + } + + public async Task> ListSharedApiKeysAsync() + { + return await dbService.GetSharedApiKeysAsync(); + } + + public async Task RevokeApiKeyAsync(Guid keyId, string userId) + { + var key = await dbService.GetApiKeyAsync(keyId); + if (key == null) return false; + + // User can only delete their own keys + if (key.UserId != userId) + { + // TODO: Allow admin override when implemented + logger.LogWarning("User {UserId} attempted to revoke key {KeyId} owned by {OwnerId}", userId, keyId, key.UserId); + return false; + } + + await dbService.DeleteApiKeyAsync(key); + return true; + } + + public async Task UpdateApiKeyAsync(Guid keyId, string requestingUserId, string description, + bool isShared) + { + var key = await dbService.GetApiKeyAsync(keyId); + if (key == null) return new ApiKeyUpdateResult(ApiKeyUpdateStatus.NotFound, null); + + if (key.UserId != requestingUserId) + { + logger.LogWarning("User {UserId} attempted to update key {KeyId} owned by {OwnerId}", requestingUserId, + keyId, key.UserId); + return new ApiKeyUpdateResult(ApiKeyUpdateStatus.Forbidden, null); + } + + key.Description = description; + key.IsShared = isShared; + + await dbService.UpdateApiKeyAsync(key); + + return new ApiKeyUpdateResult(ApiKeyUpdateStatus.Updated, key); + } + + public async Task GetOrCreateUserAsync(string email, string provider, string providerId) + { + var user = await dbService.GetUserByEmailAsync(email); + if (user == null) + { + user = new User + { + Id = Guid.NewGuid().ToString(), + Email = email, + Provider = provider, + ProviderId = providerId, + CreatedAt = DateTime.UtcNow, + UpdatedAt = DateTime.UtcNow + }; + await dbService.AddUserAsync(user); + } + return user; // Return existing or new + } + + public async Task GetUserByIdAsync(string id) + { + return await dbService.GetUserByIdAsync(id); + } + + private string HashToken(string password) + { + // Salt is randomly generated, but for stateless verification we usually store salt with hash. + // Simpler Argon2 wrappers often handle "$argon2id$..." format strings containing params, salt, and hash. + // Konscious.Security.Cryptography is low level. + // Let's use a standard format: SALT(16b) + HASH(32b) -> Base64 + + var salt = RandomNumberGenerator.GetBytes(16); + using var argon2 = new Argon2id(Encoding.UTF8.GetBytes(password)); + argon2.Salt = salt; + argon2.DegreeOfParallelism = 2; // Core count + argon2.MemorySize = 65536; // 64 MB + argon2.Iterations = 4; + + var hash = argon2.GetBytes(32); + + // Return format: {salt_base64}${hash_base64} + return $"{Convert.ToBase64String(salt)}${Convert.ToBase64String(hash)}"; + } + + private bool VerifyHash(string password, string storedHash) + { + try + { + var parts = storedHash.Split('$'); + if (parts.Length != 2) return false; + + var salt = Convert.FromBase64String(parts[0]); + var hash = Convert.FromBase64String(parts[1]); + + using var argon2 = new Argon2id(Encoding.UTF8.GetBytes(password)); + argon2.Salt = salt; + argon2.DegreeOfParallelism = 2; + argon2.MemorySize = 65536; + argon2.Iterations = 4; + + var newHash = argon2.GetBytes(32); + return CryptographicOperations.FixedTimeEquals(hash, newHash); + } + catch + { + return false; + } + } +} + +public enum ApiKeyUpdateStatus +{ + Updated, + NotFound, + Forbidden +} + +public record ApiKeyUpdateResult(ApiKeyUpdateStatus Status, ApiKey? Key); diff --git a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs new file mode 100644 index 0000000..294cf79 --- /dev/null +++ b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs @@ -0,0 +1,76 @@ +using Microsoft.Extensions.Options; +using Polly; +using Polly.Retry; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +/// +/// Hosted service to initialize the database at application startup. +/// Includes configurable retry logic with exponential backoff for handling +/// transient connection failures (e.g., when database is still starting up). +/// +public class DatabaseInitializerHostedService : IHostedService +{ + private readonly IInitializableDb? _initializableDb; + private readonly ILogger _logger; + private readonly DatabaseRetryOptions _retryOptions; + + public DatabaseInitializerHostedService( + IServiceProvider serviceProvider, + IOptions retryOptions, + ILogger logger) + { + _initializableDb = serviceProvider.GetService(typeof(IInitializableDb)) as IInitializableDb; + _retryOptions = retryOptions.Value; + _logger = logger; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + if (_initializableDb == null) + { + _logger.LogWarning("No IInitializableDb service found. Skipping database initialization."); + return; + } + + var pipeline = CreateRetryPipeline(); + + await pipeline.ExecuteAsync(async token => + { + _logger.LogInformation("Attempting to initialize database..."); + await _initializableDb.InitializeDatabase(); + _logger.LogInformation("Database initialization completed successfully."); + }, cancellationToken); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + private ResiliencePipeline CreateRetryPipeline() + { + return new ResiliencePipelineBuilder() + .AddRetry(new RetryStrategyOptions + { + MaxRetryAttempts = _retryOptions.MaxRetryAttempts, + BackoffType = DelayBackoffType.Exponential, + Delay = TimeSpan.FromSeconds(_retryOptions.InitialDelaySeconds), + MaxDelay = TimeSpan.FromSeconds(_retryOptions.MaxDelaySeconds), + UseJitter = true, + OnRetry = args => + { + _logger.LogWarning( + args.Outcome.Exception, + "Database connection attempt {AttemptNumber} of {MaxAttempts} failed. Retrying in {Delay}...", + args.AttemptNumber + 1, + _retryOptions.MaxRetryAttempts, + args.RetryDelay); + return ValueTask.CompletedTask; + } + }) + .Build(); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Services/IApiKeyService.cs b/TerraformRegistry/Services/IApiKeyService.cs new file mode 100644 index 0000000..d8d0fc1 --- /dev/null +++ b/TerraformRegistry/Services/IApiKeyService.cs @@ -0,0 +1,54 @@ +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +public interface IApiKeyService +{ + /// + /// Creates a new API key for the specified user. + /// Returns the raw token string (only shown once) and the created ApiKey entity. + /// + Task<(string RawToken, ApiKey Key)> CreateApiKeyAsync(string userId, string description, bool isShared = false); + + /// + /// Validates a raw token and returns the key details if valid. + /// Also updates the LastUsedAt timestamp. + /// + Task ValidateApiKeyAsync(string rawToken); + + /// + /// Gets a single API key by identifier. + /// + Task GetApiKeyAsync(Guid id); + + /// + /// Lists all API keys for a user. + /// + Task> ListApiKeysAsync(string userId); + + /// + /// Lists all globally shared API keys. + /// + Task> ListSharedApiKeysAsync(); + + /// + /// Revokes (deletes) an API key. + /// Users can revoke their own keys. Admins/System can revoke any. + /// + Task RevokeApiKeyAsync(Guid keyId, string userId); + + /// + /// Updates an API key's metadata (description/shared) enforcing owner-only permission. + /// + Task UpdateApiKeyAsync(Guid keyId, string requestingUserId, string description, bool isShared); + + /// + /// Ensures a User record exists for the given external details. + /// + Task GetOrCreateUserAsync(string email, string provider, string providerId); + + /// + /// Retrieves a user by id. + /// + Task GetUserByIdAsync(string id); +} diff --git a/TerraformRegistry/Services/JwtService.cs b/TerraformRegistry/Services/JwtService.cs new file mode 100644 index 0000000..4d1f353 --- /dev/null +++ b/TerraformRegistry/Services/JwtService.cs @@ -0,0 +1,123 @@ +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using Microsoft.IdentityModel.Tokens; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +/// +/// Service for generating and validating JWT tokens for portal sessions. +/// +public class JwtService +{ + private readonly string _secretKey; + private readonly int _expiryHours; + private readonly ILogger _logger; + + public JwtService(OidcOptions options, ILogger logger) + { + _secretKey = options.JwtSecretKey; + _expiryHours = options.JwtExpiryHours; + _logger = logger; + + if (string.IsNullOrEmpty(_secretKey) || _secretKey.Length < 32) + { + throw new InvalidOperationException( + "JWT secret key must be at least 32 characters. Set 'Oidc:JwtSecretKey' in configuration."); + } + } + + /// + /// Generates a JWT token for a successfully authenticated user. + /// + public string GenerateToken(string userId, string email, string name, string provider, string? avatarUrl = null) + { + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); + var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + + var claims = new List + { + new(JwtRegisteredClaimNames.Sub, userId), + new(JwtRegisteredClaimNames.Email, email), + new(JwtRegisteredClaimNames.Name, name), + new(ClaimTypes.Name, name), // Map to standard .NET identity name + new("provider", provider), + new(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), + new(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), + ClaimValueTypes.Integer64) + }; + + if (!string.IsNullOrEmpty(avatarUrl)) + { + claims.Add(new Claim("avatar_url", avatarUrl)); + } + + var token = new JwtSecurityToken( + issuer: "terraform-registry", + audience: "terraform-registry-portal", + claims: claims, + expires: DateTime.UtcNow.AddHours(_expiryHours), + signingCredentials: credentials + ); + + return new JwtSecurityTokenHandler().WriteToken(token); + } + + /// + /// Validates a JWT token and returns the claims principal if valid. + /// + public ClaimsPrincipal? ValidateToken(string token) + { + try + { + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); + var handler = new JwtSecurityTokenHandler(); + + var validationParameters = new TokenValidationParameters + { + ValidateIssuer = true, + ValidIssuer = "terraform-registry", + ValidateAudience = true, + ValidAudience = "terraform-registry-portal", + ValidateIssuerSigningKey = true, + IssuerSigningKey = key, + ValidateLifetime = true, + ClockSkew = TimeSpan.FromMinutes(5) + }; + + var principal = handler.ValidateToken(token, validationParameters, out _); + + // Explicitly ensure the identity has an AuthenticationType so IsAuthenticated is true + if (principal.Identity is ClaimsIdentity identity && string.IsNullOrEmpty(identity.AuthenticationType)) + { + var newIdentity = new ClaimsIdentity(identity.Claims, "Jwt"); + return new ClaimsPrincipal(newIdentity); + } + + return principal; + } + catch (Exception ex) + { + _logger.LogError("JWT validation failed: {Message}. Token: {TokenPrefix}...", ex.Message, token.Substring(0, Math.Min(10, token.Length))); + return null; + } + } + + /// + /// Extracts user info from a validated claims principal. + /// + public static UserInfo? GetUserInfoFromPrincipal(ClaimsPrincipal? principal) + { + if (principal == null) return null; + + return new UserInfo + { + Id = principal.FindFirstValue(JwtRegisteredClaimNames.Sub) ?? string.Empty, + Email = principal.FindFirstValue(JwtRegisteredClaimNames.Email) ?? string.Empty, + Name = principal.FindFirstValue(JwtRegisteredClaimNames.Name) ?? string.Empty, + Provider = principal.FindFirstValue("provider") ?? string.Empty, + AvatarUrl = principal.FindFirstValue("avatar_url") ?? string.Empty + }; + } +} diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs new file mode 100644 index 0000000..29427e4 --- /dev/null +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -0,0 +1,310 @@ +using System.Collections.Concurrent; +using System.IO.Compression; +using System.Text.Json; +using TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +/// +/// Implementation of a module service with local file system storage +/// +public class LocalModuleService : ModuleService +{ + // Token storage for download links + private static readonly ConcurrentDictionary DownloadTokens = new(); + private static readonly TimeSpan TokenLifetime = TimeSpan.FromMinutes(10); + private readonly IDatabaseService _databaseService; + private readonly ILogger _logger; + private readonly string _moduleStoragePath; + + public LocalModuleService(IConfiguration configuration, IDatabaseService databaseService, + ILogger logger) + { + _databaseService = databaseService; + _logger = logger; + + // Get storage path from configuration, with a reasonable default if not specified + _moduleStoragePath = configuration["ModuleStoragePath"] ?? + Path.Combine(Directory.GetCurrentDirectory(), "modules"); + + // Log the storage path being used + _logger.LogInformation("Using local module storage path: {Path}", _moduleStoragePath); + + // Ensure module storage directory exists + if (!Directory.Exists(_moduleStoragePath)) Directory.CreateDirectory(_moduleStoragePath); + + // Load existing modules from disk + LoadExistingModules(); + } + + /// + /// Scans the module storage directory and loads existing modules into memory + /// + private void LoadExistingModules() + { + try + { + // Check if the directory exists + if (!Directory.Exists(_moduleStoragePath)) return; + + // Scan namespace directories + foreach (var namespaceDir in Directory.GetDirectories(_moduleStoragePath)) + { + var namespaceName = Path.GetFileName(namespaceDir); + + // Scan for module zip files + foreach (var zipFile in Directory.GetFiles(namespaceDir, "*.zip")) + try + { + LoadModuleFromZip(zipFile, namespaceName); + } + catch (Exception ex) + { + // Log the error but continue processing other files + _logger.LogError(ex, "Error loading module from {ZipFile}", zipFile); + } + } + + _logger.LogInformation("Loaded modules from disk."); + } + catch (Exception ex) + { + // Log any errors during initialization + _logger.LogError(ex, "Error scanning module directory"); + } + } + + /// + /// Loads a module from a zip file into memory + /// + private void LoadModuleFromZip(string zipFilePath, string namespaceName) + { + // Extract module information from filename + // Expected format: name-provider-version.zip + var fileName = Path.GetFileNameWithoutExtension(zipFilePath); + var parts = fileName.Split('-'); + + if (parts.Length < 3) + { + _logger.LogWarning("Invalid module filename format: {FileName}", fileName); + return; + } + + // Last part is version + var version = parts[^1]; + // The second last part is provider + var provider = parts[^2]; + // All remaining parts (if multiple) form the name + var name = string.Join("-", parts.Take(parts.Length - 2)); + + // Validate the version string against SemVer 2.0.0 specification + if (!SemVerValidator.IsValid(version)) + { + _logger.LogWarning( + "Skipping module {FileName}: Version '{Version}' is not a valid Semantic Version (SemVer 2.0.0)", + fileName, version); + return; + } + + // Try to extract the description from the zip file + var description = ""; + try + { + using (var archive = ZipFile.OpenRead(zipFilePath)) + { + // Look for module metadata in various common files + var metadataFile = archive.Entries.FirstOrDefault(e => + e.Name.Equals("module.json", StringComparison.OrdinalIgnoreCase) || + e.Name.Equals("metadata.json", StringComparison.OrdinalIgnoreCase)); + + if (metadataFile != null) + { + using var stream = metadataFile.Open(); + using var reader = new StreamReader(stream); + var content = reader.ReadToEnd(); + + var metadata = JsonSerializer.Deserialize(content); + + if (metadata != null && !string.IsNullOrEmpty(metadata.Description)) + description = metadata.Description; + } + } + } + catch + { + // If we can't extract the description, use a default + description = $"Module {name} for {provider}"; + } + + // Create module storage object + var module = new ModuleStorage + { + Namespace = namespaceName, + Name = name, + Provider = provider, + Version = version, + Description = description, + FilePath = zipFilePath, + PublishedAt = File.GetCreationTimeUtc(zipFilePath), + Dependencies = [] }; + + _databaseService.AddModuleAsync(module).Wait(); + } + + /// + /// Lists all modules based on search criteria + /// + public override Task ListModulesAsync(ModuleSearchRequest request) + { + return _databaseService.ListModulesAsync(request); + } + + /// + /// Gets detailed information about a specific module + /// + public override Task GetModuleAsync(string @namespace, string name, string provider, string version) + { + return _databaseService.GetModuleAsync(@namespace, name, provider, version); + } + + /// + /// Gets all versions of a specific module + /// + public override Task GetModuleVersionsAsync(string @namespace, string name, string provider) + { + return _databaseService.GetModuleVersionsAsync(@namespace, name, provider); + } + + /// + /// Gets the download path for a specific module version + /// + public override async Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, + string version) + { + var moduleStorage = await _databaseService.GetModuleStorageAsync(@namespace, name, provider, version); + if (moduleStorage == null) + return null; + + // Generate a unique token + var token = Guid.NewGuid().ToString("N"); + var expiry = DateTime.UtcNow.Add(TokenLifetime); + DownloadTokens[token] = (moduleStorage.FilePath, expiry); + + // Return the download link (adjust the base path as needed) + return $"/module/download?token={token}"; + } + + // Helper for endpoint to validate and retrieve the file path + public static bool TryGetFilePathFromToken(string token, out string filePath) + { + filePath = string.Empty; + if (!DownloadTokens.TryGetValue(token, out var entry)) return false; + if (entry.Expiry > DateTime.UtcNow) + { + filePath = entry.FilePath; + return true; + } + + // Expired, remove + DownloadTokens.TryRemove(token, out _); + + return false; + } + + /// + /// Implementation-specific method to upload a module after validation + /// + protected override async Task UploadModuleAsyncImpl(string @namespace, string name, string provider, + string version, Stream moduleContent, string description, bool replace) + { + var namespaceDir = Path.Combine(_moduleStoragePath, @namespace); + if (!Directory.Exists(namespaceDir)) Directory.CreateDirectory(namespaceDir); + + var fileName = $"{name}-{provider}-{version}.zip"; + var tempFileName = $"{fileName}.tmp"; + var tempFilePath = Path.Combine(namespaceDir, tempFileName); + var finalFilePath = Path.Combine(namespaceDir, fileName); + + try + { + await using (var fileStream = File.Create(tempFilePath)) + { + await moduleContent.CopyToAsync(fileStream); + } + + var module = new ModuleStorage + { + Namespace = @namespace, + Name = name, + Provider = provider, + Version = version, + Description = description, + FilePath = finalFilePath, + PublishedAt = DateTime.UtcNow, + Dependencies = [] + }; + + if (replace) + { + try + { + await _databaseService.RemoveModuleAsync(module); + } + catch + { + // ignore DB remove failures here; Add will handle existence + } + try + { + if (File.Exists(finalFilePath)) File.Delete(finalFilePath); + } + catch + { + // ignore file delete errors; we'll overwrite if possible + } + } + + var dbResult = await _databaseService.AddModuleAsync(module); + if (dbResult) + try + { + if (File.Exists(finalFilePath)) File.Delete(finalFilePath); + File.Move(tempFilePath, finalFilePath); + return true; + } + catch (Exception fileMoveEx) + { + try + { + await _databaseService.RemoveModuleAsync(module); + } + catch (Exception dbRollbackEx) + { + _logger.LogError(dbRollbackEx, + "Failed to rollback DB entry after file move failure for {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + } + + _logger.LogError(fileMoveEx, + "Failed to move file, rolled back DB entry for {Namespace}/{Name}/{Provider}/{Version}", + @namespace, name, provider, version); + if (File.Exists(tempFilePath)) File.Delete(tempFilePath); + return false; + } + + File.Delete(tempFilePath); + return false; + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to upload module {Namespace}/{Name}/{Provider}/{Version}", @namespace, name, + provider, version); + if (File.Exists(tempFilePath)) File.Delete(tempFilePath); + return false; + } + } +} + diff --git a/TerraformRegistry/Services/OAuthService.cs b/TerraformRegistry/Services/OAuthService.cs new file mode 100644 index 0000000..4cebecd --- /dev/null +++ b/TerraformRegistry/Services/OAuthService.cs @@ -0,0 +1,269 @@ +using System.Net.Http.Headers; +using System.Text.Json; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +/// +/// Service for handling OAuth2 flows with GitHub and Azure AD. +/// +public class OAuthService +{ + private readonly OidcOptions _options; + private readonly IHttpClientFactory _httpClientFactory; + private readonly ILogger _logger; + private readonly string _baseUrl; + + public OAuthService( + OidcOptions options, + IHttpClientFactory httpClientFactory, + IConfiguration configuration, + ILogger logger) + { + _options = options; + _httpClientFactory = httpClientFactory; + _logger = logger; + _baseUrl = configuration["BaseUrl"] ?? "http://localhost:5131"; + } + + /// + /// Returns list of enabled OIDC providers. + /// + public IEnumerable GetEnabledProviders() + { + var providers = new List(); + + foreach (var (name, config) in _options.Providers) + { + if (!config.Enabled || string.IsNullOrEmpty(config.ClientId)) + continue; + + var normalizedName = name.ToLowerInvariant(); + providers.Add(new OidcProviderInfo + { + Name = normalizedName, + DisplayName = normalizedName switch + { + "github" => "GitHub", + "azuread" => "Azure AD", + _ => name + }, + Icon = normalizedName switch + { + "github" => "i-simple-icons-github", + "azuread" => "i-simple-icons-microsoft", + _ => "i-lucide-key" + } + }); + } + + return providers; + } + + /// + /// Generates the authorization URL for the specified provider. + /// + public string GetAuthorizationUrl(string provider, string state) + { + var providerKey = GetProviderKey(provider); + if (providerKey == null || !_options.Providers.TryGetValue(providerKey, out var config)) + throw new ArgumentException($"Unknown or disabled provider: {provider}"); + + if (!config.Enabled) + throw new ArgumentException($"Provider {provider} is not enabled"); + + var redirectUri = $"{_baseUrl}/api/auth/callback/{provider.ToLowerInvariant()}"; + var scopes = string.Join(" ", config.Scopes); + + return provider.ToLowerInvariant() switch + { + "github" => $"{config.AuthorizationEndpoint}?client_id={config.ClientId}&redirect_uri={Uri.EscapeDataString(redirectUri)}&scope={Uri.EscapeDataString(scopes)}&state={state}", + "azuread" => $"{config.AuthorizationEndpoint}?client_id={config.ClientId}&redirect_uri={Uri.EscapeDataString(redirectUri)}&scope={Uri.EscapeDataString(scopes)}&state={state}&response_type=code&response_mode=query", + _ => throw new ArgumentException($"Unknown provider: {provider}") + }; + } + + /// + /// Exchanges an authorization code for user information. + /// + public async Task ExchangeCodeForUserInfoAsync(string provider, string code) + { + var providerKey = GetProviderKey(provider); + if (providerKey == null || !_options.Providers.TryGetValue(providerKey, out var config)) + return null; + + var redirectUri = $"{_baseUrl}/api/auth/callback/{provider.ToLowerInvariant()}"; + + return provider.ToLowerInvariant() switch + { + "github" => await ExchangeGitHubCodeAsync(config, code, redirectUri), + "azuread" => await ExchangeAzureAdCodeAsync(config, code, redirectUri), + _ => null + }; + } + + private async Task ExchangeGitHubCodeAsync(OidcProviderOptions config, string code, string redirectUri) + { + var client = _httpClientFactory.CreateClient(); + + // Exchange code for access token + var tokenRequest = new HttpRequestMessage(HttpMethod.Post, config.TokenEndpoint); + tokenRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + tokenRequest.Content = new FormUrlEncodedContent(new Dictionary + { + ["client_id"] = config.ClientId, + ["client_secret"] = config.ClientSecret, + ["code"] = code, + ["redirect_uri"] = redirectUri + }); + + var tokenResponse = await client.SendAsync(tokenRequest); + if (!tokenResponse.IsSuccessStatusCode) + { + _logger.LogError("GitHub token exchange failed: {Status}", tokenResponse.StatusCode); + return null; + } + + var tokenJson = await tokenResponse.Content.ReadAsStringAsync(); + using var tokenDoc = JsonDocument.Parse(tokenJson); + var accessToken = tokenDoc.RootElement.GetProperty("access_token").GetString(); + + if (string.IsNullOrEmpty(accessToken)) + { + _logger.LogError("GitHub did not return an access token"); + return null; + } + + // Get user info + var userRequest = new HttpRequestMessage(HttpMethod.Get, config.UserInfoEndpoint); + userRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); + userRequest.Headers.Add("User-Agent", "TerraformRegistry"); + + var userResponse = await client.SendAsync(userRequest); + if (!userResponse.IsSuccessStatusCode) + { + _logger.LogError("GitHub user info request failed: {Status}", userResponse.StatusCode); + return null; + } + + var userJson = await userResponse.Content.ReadAsStringAsync(); + using var userDoc = JsonDocument.Parse(userJson); + var root = userDoc.RootElement; + + // Get email (might need separate API call if email is private) + var email = root.TryGetProperty("email", out var emailProp) ? emailProp.GetString() : null; + if (string.IsNullOrEmpty(email)) + { + email = await GetGitHubPrimaryEmailAsync(client, accessToken); + } + + return new UserInfo + { + Id = root.GetProperty("id").GetInt64().ToString(), + Email = email ?? "", + Name = root.TryGetProperty("name", out var nameProp) ? nameProp.GetString() ?? root.GetProperty("login").GetString() ?? "" : root.GetProperty("login").GetString() ?? "", + Provider = "github", + AvatarUrl = root.TryGetProperty("avatar_url", out var avatarProp) ? avatarProp.GetString() ?? "" : "" + }; + } + + private async Task GetGitHubPrimaryEmailAsync(HttpClient client, string accessToken) + { + try + { + var emailRequest = new HttpRequestMessage(HttpMethod.Get, "https://api.github.com/user/emails"); + emailRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); + emailRequest.Headers.Add("User-Agent", "TerraformRegistry"); + + var emailResponse = await client.SendAsync(emailRequest); + if (!emailResponse.IsSuccessStatusCode) return null; + + var emailJson = await emailResponse.Content.ReadAsStringAsync(); + using var emailDoc = JsonDocument.Parse(emailJson); + + foreach (var emailEntry in emailDoc.RootElement.EnumerateArray()) + { + if (emailEntry.TryGetProperty("primary", out var primaryProp) && primaryProp.GetBoolean()) + { + return emailEntry.GetProperty("email").GetString(); + } + } + } + catch (Exception ex) + { + _logger.LogWarning("Failed to get GitHub primary email: {Message}", ex.Message); + } + + return null; + } + + private async Task ExchangeAzureAdCodeAsync(OidcProviderOptions config, string code, string redirectUri) + { + var client = _httpClientFactory.CreateClient(); + + // Exchange code for access token + var tokenRequest = new HttpRequestMessage(HttpMethod.Post, config.TokenEndpoint); + tokenRequest.Content = new FormUrlEncodedContent(new Dictionary + { + ["client_id"] = config.ClientId, + ["client_secret"] = config.ClientSecret, + ["code"] = code, + ["redirect_uri"] = redirectUri, + ["grant_type"] = "authorization_code" + }); + + var tokenResponse = await client.SendAsync(tokenRequest); + if (!tokenResponse.IsSuccessStatusCode) + { + _logger.LogError("Azure AD token exchange failed: {Status}", tokenResponse.StatusCode); + return null; + } + + var tokenJson = await tokenResponse.Content.ReadAsStringAsync(); + using var tokenDoc = JsonDocument.Parse(tokenJson); + var accessToken = tokenDoc.RootElement.GetProperty("access_token").GetString(); + + if (string.IsNullOrEmpty(accessToken)) + { + _logger.LogError("Azure AD did not return an access token"); + return null; + } + + // Get user info from Microsoft Graph + var userRequest = new HttpRequestMessage(HttpMethod.Get, config.UserInfoEndpoint); + userRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); + + var userResponse = await client.SendAsync(userRequest); + if (!userResponse.IsSuccessStatusCode) + { + _logger.LogError("Azure AD user info request failed: {Status}", userResponse.StatusCode); + return null; + } + + var userJson = await userResponse.Content.ReadAsStringAsync(); + using var userDoc = JsonDocument.Parse(userJson); + var root = userDoc.RootElement; + + return new UserInfo + { + Id = root.TryGetProperty("id", out var idProp) ? idProp.GetString() ?? "" : "", + Email = root.TryGetProperty("mail", out var mailProp) ? mailProp.GetString() ?? "" : + root.TryGetProperty("userPrincipalName", out var upnProp) ? upnProp.GetString() ?? "" : "", + Name = root.TryGetProperty("displayName", out var nameProp) ? nameProp.GetString() ?? "" : "", + Provider = "azuread", + AvatarUrl = "" // Azure doesn't provide avatar in basic profile + }; + } + + private string? GetProviderKey(string provider) + { + return provider.ToLowerInvariant() switch + { + "github" => "GitHub", + "azuread" => "AzureAD", + "azure" => "AzureAD", + "microsoft" => "AzureAD", + _ => null + }; + } +} diff --git a/TerraformRegistry/Services/SqliteDatabaseService.cs b/TerraformRegistry/Services/SqliteDatabaseService.cs new file mode 100644 index 0000000..54176d9 --- /dev/null +++ b/TerraformRegistry/Services/SqliteDatabaseService.cs @@ -0,0 +1,582 @@ +using System.Text.Json; +using Microsoft.Data.Sqlite; +using Microsoft.Extensions.Logging; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Services; + +/// +/// Lightweight SQLite implementation for local development/storage. +/// Stores dependencies as JSON TEXT and published_at as ISO-8601 TEXT. +/// +public class SqliteDatabaseService : IDatabaseService, IInitializableDb +{ + private readonly string _connectionString; + private readonly string _baseUrl; + private readonly ILogger _logger; + + public SqliteDatabaseService(string connectionString, string baseUrl, ILogger logger) + { + _connectionString = connectionString; + _baseUrl = baseUrl; + _logger = logger; + } + + public async Task InitializeDatabase() + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + var createSql = @" + CREATE TABLE IF NOT EXISTS modules ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + namespace TEXT NOT NULL, + name TEXT NOT NULL, + provider TEXT NOT NULL, + version TEXT NOT NULL, + description TEXT NOT NULL, + storage_path TEXT NOT NULL, + published_at TEXT NOT NULL, + dependencies TEXT NOT NULL, + UNIQUE(namespace, name, provider, version) + );"; + + await using var cmd = connection.CreateCommand(); + cmd.CommandText = createSql; + await cmd.ExecuteNonQueryAsync(); + + // Helpful index for lookups + var indexSql = "CREATE INDEX IF NOT EXISTS idx_modules_lookup ON modules(namespace, name, provider);"; + await using var idx = connection.CreateCommand(); + idx.CommandText = indexSql; + await idx.ExecuteNonQueryAsync(); + + var createUsersSql = @" + CREATE TABLE IF NOT EXISTS users ( + id TEXT PRIMARY KEY, + email TEXT NOT NULL, + provider TEXT NOT NULL, + provider_id TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + UNIQUE(email) + );"; + + await using var cmdUsers = connection.CreateCommand(); + cmdUsers.CommandText = createUsersSql; + await cmdUsers.ExecuteNonQueryAsync(); + + var createApiKeysSql = @" + CREATE TABLE IF NOT EXISTS api_keys ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + description TEXT NOT NULL, + token_hash TEXT NOT NULL, + prefix TEXT NOT NULL, + is_shared INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL, + expires_at TEXT, + last_used_at TEXT, + FOREIGN KEY(user_id) REFERENCES users(id) + );"; + + await using var cmdApiKeys = connection.CreateCommand(); + cmdApiKeys.CommandText = createApiKeysSql; + await cmdApiKeys.ExecuteNonQueryAsync(); + + var indexApiKeysSql = "CREATE INDEX IF NOT EXISTS idx_api_keys_prefix ON api_keys(prefix);"; + await using var idxApiKeys = connection.CreateCommand(); + idxApiKeys.CommandText = indexApiKeysSql; + await idxApiKeys.ExecuteNonQueryAsync(); + } + + public async Task ListModulesAsync(ModuleSearchRequest request) + { + var modules = new List(); + + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + // Get latest version per (namespace,name,provider) + var sql = @" + WITH latest AS ( + SELECT namespace, name, provider, MAX(version) AS latest_version + FROM modules + GROUP BY namespace, name, provider + ) + SELECT m.namespace, m.name, m.provider, m.version, m.description, m.published_at + FROM modules m + INNER JOIN latest l ON m.namespace = l.namespace AND m.name = l.name AND m.provider = l.provider AND m.version = l.latest_version + WHERE 1=1"; + + var conditions = new List(); + var parameters = new List(); + + if (!string.IsNullOrWhiteSpace(request.Q)) + { + conditions.Add(" AND (lower(m.name) LIKE lower($q) OR lower(m.description) LIKE lower($q))"); + parameters.Add(new SqliteParameter("$q", $"%{request.Q}%")); + } + if (!string.IsNullOrWhiteSpace(request.Namespace)) + { + conditions.Add(" AND m.namespace = $ns"); + parameters.Add(new SqliteParameter("$ns", request.Namespace)); + } + if (!string.IsNullOrWhiteSpace(request.Provider)) + { + conditions.Add(" AND m.provider = $prov"); + parameters.Add(new SqliteParameter("$prov", request.Provider)); + } + + sql += string.Join("", conditions); + sql += " ORDER BY m.namespace, m.name, m.provider LIMIT $limit OFFSET $offset"; + parameters.Add(new SqliteParameter("$limit", request.Limit)); + parameters.Add(new SqliteParameter("$offset", request.Offset)); + + await using var command = connection.CreateCommand(); + command.CommandText = sql; + foreach (var p in parameters) command.Parameters.Add(p); + + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + var ns = reader.GetString(0); + var name = reader.GetString(1); + var provider = reader.GetString(2); + var version = reader.GetString(3); + var description = reader.GetString(4); + var publishedAtIso = reader.GetString(5); + + // Fetch all versions for this module tuple + var versions = await GetVersionsInternal(connection, ns, name, provider); + + modules.Add(new ModuleListItem + { + Id = $"{ns}/{name}/{provider}", + Owner = ns, + Namespace = ns, + Name = name, + Version = version, + Provider = provider, + Description = description, + PublishedAt = publishedAtIso, + Versions = versions, + DownloadUrl = $"{_baseUrl}/v1/modules/{ns}/{name}/{provider}/{version}/download" + }); + } + + return new ModuleList + { + Modules = modules, + Meta = new Dictionary + { + { "limit", request.Limit.ToString() }, + { "current_offset", request.Offset.ToString() } + } + }; + } + + public async Task GetModuleAsync(string @namespace, string name, string provider, string version) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + var sql = @" + SELECT namespace, name, provider, version, description, storage_path, published_at, dependencies + FROM modules + WHERE namespace = $ns AND name = $name AND provider = $prov AND version = $ver"; + + await using var cmd = connection.CreateCommand(); + cmd.CommandText = sql; + cmd.Parameters.AddWithValue("$ns", @namespace); + cmd.Parameters.AddWithValue("$name", name); + cmd.Parameters.AddWithValue("$prov", provider); + cmd.Parameters.AddWithValue("$ver", version); + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + var publishedAtIso = reader.GetString(6); + var versions = await GetVersionsInternal(connection, @namespace, name, provider); + + return new Module + { + Id = $"{@namespace}/{name}/{provider}/{version}", + Owner = @namespace, + Namespace = @namespace, + Name = name, + Version = version, + Provider = provider, + Description = reader.GetString(4), + Source = $"{_baseUrl}/{@namespace}/{name}", + PublishedAt = publishedAtIso, + DownloadUrl = $"{_baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download", + Versions = versions, + Root = "main", + Submodules = new List(), + Providers = new Dictionary { { provider, "*" } } + }; + } + + public async Task GetModuleVersionsAsync(string @namespace, string name, string provider) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + var versions = await GetVersionsInternal(connection, @namespace, name, provider); + return new ModuleVersions + { + Modules = new List + { + new() + { + Versions = versions.Select(v => new VersionInfo { Version = v }).ToList() + } + } + }; + } + + public async Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + var sql = @" + SELECT namespace, name, provider, version, description, storage_path, published_at, dependencies + FROM modules + WHERE namespace = $ns AND name = $name AND provider = $prov AND version = $ver"; + + await using var cmd = connection.CreateCommand(); + cmd.CommandText = sql; + cmd.Parameters.AddWithValue("$ns", @namespace); + cmd.Parameters.AddWithValue("$name", name); + cmd.Parameters.AddWithValue("$prov", provider); + cmd.Parameters.AddWithValue("$ver", version); + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + var depsJson = reader.GetString(7); + var deps = string.IsNullOrWhiteSpace(depsJson) + ? new List() + : (JsonSerializer.Deserialize>(depsJson) ?? new List()); + + return new ModuleStorage + { + Namespace = reader.GetString(0), + Name = reader.GetString(1), + Provider = reader.GetString(2), + Version = reader.GetString(3), + Description = reader.GetString(4), + FilePath = reader.GetString(5), + PublishedAt = DateTime.Parse(reader.GetString(6)), + Dependencies = deps + }; + } + + public async Task AddModuleAsync(ModuleStorage module) + { + var sql = @" + INSERT INTO modules ( + namespace, name, provider, version, description, storage_path, published_at, dependencies + ) VALUES ( + $ns, $name, $prov, $ver, $desc, $path, $published, $deps + ) + ON CONFLICT(namespace, name, provider, version) DO UPDATE SET + description = excluded.description, + storage_path = excluded.storage_path, + dependencies = excluded.dependencies"; + + try + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + + await using var cmd = connection.CreateCommand(); + cmd.CommandText = sql; + cmd.Parameters.AddWithValue("$ns", module.Namespace); + cmd.Parameters.AddWithValue("$name", module.Name); + cmd.Parameters.AddWithValue("$prov", module.Provider); + cmd.Parameters.AddWithValue("$ver", module.Version); + cmd.Parameters.AddWithValue("$desc", module.Description); + cmd.Parameters.AddWithValue("$path", module.FilePath); + cmd.Parameters.AddWithValue("$published", module.PublishedAt.ToString("o")); + cmd.Parameters.AddWithValue("$deps", + module.Dependencies == null ? "[]" : JsonSerializer.Serialize(module.Dependencies)); + + var rows = await cmd.ExecuteNonQueryAsync(); + return rows > 0; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error adding module {Namespace}/{Name}/{Provider}/{Version} to SQLite", + module.Namespace, module.Name, module.Provider, module.Version); + return false; + } + } + + public async Task RemoveModuleAsync(ModuleStorage module) + { + var sql = @" + DELETE FROM modules + WHERE namespace = $ns AND name = $name AND provider = $prov AND version = $ver"; + try + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = sql; + cmd.Parameters.AddWithValue("$ns", module.Namespace); + cmd.Parameters.AddWithValue("$name", module.Name); + cmd.Parameters.AddWithValue("$prov", module.Provider); + cmd.Parameters.AddWithValue("$ver", module.Version); + var rows = await cmd.ExecuteNonQueryAsync(); + return rows > 0; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error removing module {Namespace}/{Name}/{Provider}/{Version} from SQLite", + module.Namespace, module.Name, module.Provider, module.Version); + return false; + } + } + + private static async Task> GetVersionsInternal(SqliteConnection connection, string @namespace, string name, string provider) + { + var versions = new List(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = @"SELECT version FROM modules WHERE namespace = $ns AND name = $name AND provider = $prov ORDER BY version DESC"; + cmd.Parameters.AddWithValue("$ns", @namespace); + cmd.Parameters.AddWithValue("$name", name); + cmd.Parameters.AddWithValue("$prov", provider); + await using var r = await cmd.ExecuteReaderAsync(); + while (await r.ReadAsync()) versions.Add(r.GetString(0)); + return versions; + } + + // User & API Key methods + public async Task GetUserByEmailAsync(string email) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, email, provider, provider_id, created_at, updated_at FROM users WHERE email = $email"; + cmd.Parameters.AddWithValue("$email", email); + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return new User + { + Id = reader.GetString(0), + Email = reader.GetString(1), + Provider = reader.GetString(2), + ProviderId = reader.GetString(3), + CreatedAt = DateTime.Parse(reader.GetString(4)), + UpdatedAt = DateTime.Parse(reader.GetString(5)) + }; + } + + public async Task GetUserByIdAsync(string id) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, email, provider, provider_id, created_at, updated_at FROM users WHERE id = $id"; + cmd.Parameters.AddWithValue("$id", id); + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return new User + { + Id = reader.GetString(0), + Email = reader.GetString(1), + Provider = reader.GetString(2), + ProviderId = reader.GetString(3), + CreatedAt = DateTime.Parse(reader.GetString(4)), + UpdatedAt = DateTime.Parse(reader.GetString(5)) + }; + } + + public async Task AddUserAsync(User user) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = @" + INSERT INTO users (id, email, provider, provider_id, created_at, updated_at) + VALUES ($id, $email, $prov, $provId, $created, $updated)"; + + cmd.Parameters.AddWithValue("$id", user.Id); + cmd.Parameters.AddWithValue("$email", user.Email); + cmd.Parameters.AddWithValue("$prov", user.Provider); + cmd.Parameters.AddWithValue("$provId", user.ProviderId); + cmd.Parameters.AddWithValue("$created", user.CreatedAt.ToString("o")); + cmd.Parameters.AddWithValue("$updated", user.UpdatedAt.ToString("o")); + + await cmd.ExecuteNonQueryAsync(); + } + + public async Task UpdateUserAsync(User user) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = @" + UPDATE users SET + email = $email, provider = $prov, provider_id = $provId, + updated_at = $updated + WHERE id = $id"; + + cmd.Parameters.AddWithValue("$id", user.Id); + cmd.Parameters.AddWithValue("$email", user.Email); + cmd.Parameters.AddWithValue("$prov", user.Provider); + cmd.Parameters.AddWithValue("$provId", user.ProviderId); + cmd.Parameters.AddWithValue("$updated", user.UpdatedAt.ToString("o")); + + await cmd.ExecuteNonQueryAsync(); + } + + public async Task DeleteUserAsync(string userId) + { + const string sql = "DELETE FROM users WHERE id = $id"; + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var command = connection.CreateCommand(); + command.CommandText = sql; + command.Parameters.AddWithValue("$id", userId); + await command.ExecuteNonQueryAsync(); + } + + public async Task AddApiKeyAsync(ApiKey apiKey) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = @" + INSERT INTO api_keys (id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at) + VALUES ($id, $uid, $desc, $hash, $prefix, $shared, $created, $expires, $lastUsed)"; + + cmd.Parameters.AddWithValue("$id", apiKey.Id.ToString()); + cmd.Parameters.AddWithValue("$uid", apiKey.UserId); + cmd.Parameters.AddWithValue("$desc", apiKey.Description); + cmd.Parameters.AddWithValue("$hash", apiKey.TokenHash); + cmd.Parameters.AddWithValue("$prefix", apiKey.Prefix); + cmd.Parameters.AddWithValue("$shared", apiKey.IsShared ? 1 : 0); + cmd.Parameters.AddWithValue("$created", apiKey.CreatedAt.ToString("o")); + cmd.Parameters.AddWithValue("$expires", apiKey.ExpiresAt.HasValue ? apiKey.ExpiresAt.Value.ToString("o") : DBNull.Value); + cmd.Parameters.AddWithValue("$lastUsed", apiKey.LastUsedAt.HasValue ? apiKey.LastUsedAt.Value.ToString("o") : DBNull.Value); + + await cmd.ExecuteNonQueryAsync(); + } + + public async Task GetApiKeyAsync(Guid id) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE id = $id"; + cmd.Parameters.AddWithValue("$id", id.ToString()); + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return MapApiKey(reader); + } + + public async Task> GetApiKeysByUserAsync(string userId) + { + var keys = new List(); + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE user_id = $uid ORDER BY created_at DESC"; + cmd.Parameters.AddWithValue("$uid", userId); + + await using var reader = await cmd.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapApiKey(reader)); + } + return keys; + } + + public async Task> GetSharedApiKeysAsync() + { + var keys = new List(); + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE is_shared = 1 ORDER BY created_at DESC"; + + await using var reader = await cmd.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapApiKey(reader)); + } + return keys; + } + + public async Task> GetApiKeysByPrefixAsync(string prefix) + { + var keys = new List(); + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "SELECT id, user_id, description, token_hash, prefix, is_shared, created_at, expires_at, last_used_at FROM api_keys WHERE prefix = $prefix"; + cmd.Parameters.AddWithValue("$prefix", prefix); + + await using var reader = await cmd.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + keys.Add(MapApiKey(reader)); + } + return keys; + } + + public async Task UpdateApiKeyAsync(ApiKey apiKey) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = @" + UPDATE api_keys + SET description = $desc, is_shared = $shared, last_used_at = $lastUsed + WHERE id = $id"; + cmd.Parameters.AddWithValue("$id", apiKey.Id.ToString()); + cmd.Parameters.AddWithValue("$desc", apiKey.Description); + cmd.Parameters.AddWithValue("$shared", apiKey.IsShared ? 1 : 0); + cmd.Parameters.AddWithValue("$lastUsed", apiKey.LastUsedAt.HasValue ? apiKey.LastUsedAt.Value.ToString("o") : DBNull.Value); + + await cmd.ExecuteNonQueryAsync(); + } + + public async Task DeleteApiKeyAsync(ApiKey apiKey) + { + await using var connection = new SqliteConnection(_connectionString); + await connection.OpenAsync(); + await using var cmd = connection.CreateCommand(); + cmd.CommandText = "DELETE FROM api_keys WHERE id = $id"; + cmd.Parameters.AddWithValue("$id", apiKey.Id.ToString()); + + await cmd.ExecuteNonQueryAsync(); + } + + private static ApiKey MapApiKey(SqliteDataReader reader) + { + return new ApiKey + { + Id = Guid.Parse(reader.GetString(0)), + UserId = reader.GetString(1), + Description = reader.GetString(2), + TokenHash = reader.GetString(3), + Prefix = reader.GetString(4), + IsShared = reader.GetInt32(5) == 1, + CreatedAt = DateTime.Parse(reader.GetString(6)), + ExpiresAt = reader.IsDBNull(7) ? null : DateTime.Parse(reader.GetString(7)), + LastUsedAt = reader.IsDBNull(8) ? null : DateTime.Parse(reader.GetString(8)) + }; + } +} diff --git a/TerraformRegistry/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj new file mode 100644 index 0000000..89903f3 --- /dev/null +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -0,0 +1,54 @@ + + + + net10.0 + enable + enable + + + + Debug;Release + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry/appsettings.Development.json b/TerraformRegistry/appsettings.Development.json new file mode 100644 index 0000000..8fd1161 --- /dev/null +++ b/TerraformRegistry/appsettings.Development.json @@ -0,0 +1,32 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "BaseUrl": "http://localhost:5131", + "ModuleStoragePath": "modules", + "StorageProvider": "local", + "DatabaseProvider": "sqlite", + "AzureStorage": { + "ConnectionString": "UseDevelopmentStorage=true", + "ContainerName": "modules", + "SasTokenExpiryMinutes": 5 + }, + "PostgreSQL": { + "ConnectionString": "Host=localhost;Database=terraform_registry_dev;Username=postgres;Password=postgres" + }, + "EnvironmentVariables": { + "Comment": "The following environment variables can be used for configuration:", + "TF_REG_BaseUrl": "Base URL for the Terraform Registry", + "TF_REG_ModuleStoragePath": "Local path to store modules (only required when StorageProvider is 'local')", + "TF_REG_StorageProvider": "Storage provider (local or azure)", + "TF_REG_DatabaseProvider": "Database provider (sqlite or postgres)", + "TF_REG_Sqlite__ConnectionString": "SQLite database connection string (e.g., Data Source=terraform.db)", + "TF_REG_AzureStorage__ConnectionString": "Azure Storage connection string", + "TF_REG_AzureStorage__ContainerName": "Azure Storage container name", + "TF_REG_AzureStorage__SasTokenExpiryMinutes": "Expiry time in minutes for SAS tokens", + "TF_REG_PostgreSQL__ConnectionString": "PostgreSQL database connection string" + } +} diff --git a/TerraformRegistry/appsettings.json b/TerraformRegistry/appsettings.json new file mode 100644 index 0000000..7c2070e --- /dev/null +++ b/TerraformRegistry/appsettings.json @@ -0,0 +1,75 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "BaseUrl": "http://localhost:5131", + "ModuleStoragePath": "modules", + "StorageProvider": "local", + "DatabaseProvider": "sqlite", + "Sqlite": { + "ConnectionString": "Data Source=terraform.db" + }, + "AzureStorage": { + "ConnectionString": "", + "ContainerName": "modules", + "SasTokenExpiryMinutes": 5 + }, + "PostgreSQL": { + "ConnectionString": "Host=localhost;Database=terraform_registry;Username=postgres;Password=postgres" + }, + "DatabaseRetry": { + "MaxRetryAttempts": 5, + "InitialDelaySeconds": 2, + "MaxDelaySeconds": 30 + }, + "Oidc": { + "JwtSecretKey": "your-256-bit-secret-key-here-minimum-32-chars", + "JwtExpiryHours": 24, + "Providers": { + "GitHub": { + "ClientId": "", + "ClientSecret": "", + "AuthorizationEndpoint": "https://github.com/login/oauth/authorize", + "TokenEndpoint": "https://github.com/login/oauth/access_token", + "UserInfoEndpoint": "https://api.github.com/user", + "Scopes": ["read:user", "user:email"], + "Enabled": false + }, + "AzureAD": { + "ClientId": "", + "ClientSecret": "", + "AuthorizationEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", + "TokenEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token", + "UserInfoEndpoint": "https://graph.microsoft.com/v1.0/me", + "Scopes": ["openid", "profile", "email"], + "Enabled": false + } + } + }, + "EnvironmentVariables": { + "Comment": "The following environment variables can be used for configuration:", + "TF_REG_BaseUrl": "Base URL for the Terraform Registry", + "TF_REG_ModuleStoragePath": "Local path to store modules (only required when StorageProvider is 'local')", + "TF_REG_StorageProvider": "Storage provider (local or azure)", + "TF_REG_DatabaseProvider": "Database provider (sqlite or postgres)", + "TF_REG_Sqlite__ConnectionString": "SQLite database connection string (e.g., Data Source=terraform.db)", + "TF_REG_AzureStorage__ConnectionString": "Azure Storage connection string", + "TF_REG_AzureStorage__ContainerName": "Azure Storage container name", + "TF_REG_AzureStorage__SasTokenExpiryMinutes": "Expiry time in minutes for SAS tokens (default: 5 minutes)", + "TF_REG_PostgreSQL__ConnectionString": "PostgreSQL database connection string", + "TF_REG_DatabaseRetry__MaxRetryAttempts": "Maximum number of database connection retry attempts (default: 5)", + "TF_REG_DatabaseRetry__InitialDelaySeconds": "Initial delay in seconds before first retry (default: 2)", + "TF_REG_DatabaseRetry__MaxDelaySeconds": "Maximum delay in seconds between retries (default: 30)", + "TF_REG_Oidc__JwtSecretKey": "Secret key for signing JWT tokens (minimum 32 characters)", + "TF_REG_Oidc__Providers__GitHub__ClientId": "GitHub OAuth App Client ID", + "TF_REG_Oidc__Providers__GitHub__ClientSecret": "GitHub OAuth App Client Secret", + "TF_REG_Oidc__Providers__GitHub__Enabled": "Enable GitHub OIDC provider (true/false)", + "TF_REG_Oidc__Providers__AzureAD__ClientId": "Azure AD App Client ID", + "TF_REG_Oidc__Providers__AzureAD__ClientSecret": "Azure AD App Client Secret", + "TF_REG_Oidc__Providers__AzureAD__Enabled": "Enable Azure AD OIDC provider (true/false)" + } +} diff --git a/TerraformRegistry/web-src/.gitignore b/TerraformRegistry/web-src/.gitignore new file mode 100644 index 0000000..4a7f73a --- /dev/null +++ b/TerraformRegistry/web-src/.gitignore @@ -0,0 +1,24 @@ +# Nuxt dev/build outputs +.output +.data +.nuxt +.nitro +.cache +dist + +# Node dependencies +node_modules + +# Logs +logs +*.log + +# Misc +.DS_Store +.fleet +.idea + +# Local env files +.env +.env.* +!.env.example diff --git a/TerraformRegistry/web-src/README.md b/TerraformRegistry/web-src/README.md new file mode 100644 index 0000000..25b5821 --- /dev/null +++ b/TerraformRegistry/web-src/README.md @@ -0,0 +1,75 @@ +# Nuxt Minimal Starter + +Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. + +## Setup + +Make sure to install dependencies: + +```bash +# npm +npm install + +# pnpm +pnpm install + +# yarn +yarn install + +# bun +bun install +``` + +## Development Server + +Start the development server on `http://localhost:3000`: + +```bash +# npm +npm run dev + +# pnpm +pnpm dev + +# yarn +yarn dev + +# bun +bun run dev +``` + +## Production + +Build the application for production: + +```bash +# npm +npm run build + +# pnpm +pnpm build + +# yarn +yarn build + +# bun +bun run build +``` + +Locally preview production build: + +```bash +# npm +npm run preview + +# pnpm +pnpm preview + +# yarn +yarn preview + +# bun +bun run preview +``` + +Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. diff --git a/TerraformRegistry/web-src/app.config.ts b/TerraformRegistry/web-src/app.config.ts new file mode 100644 index 0000000..684931a --- /dev/null +++ b/TerraformRegistry/web-src/app.config.ts @@ -0,0 +1,8 @@ +export default defineAppConfig({ + ui: { + colors: { + primary: "blue", + neutral: "zinc", + }, + }, +}); diff --git a/TerraformRegistry/web-src/app.vue b/TerraformRegistry/web-src/app.vue new file mode 100644 index 0000000..3b168df --- /dev/null +++ b/TerraformRegistry/web-src/app.vue @@ -0,0 +1,39 @@ + + + diff --git a/TerraformRegistry/web-src/assets/css/main.css b/TerraformRegistry/web-src/assets/css/main.css new file mode 100644 index 0000000..4a6a5a9 --- /dev/null +++ b/TerraformRegistry/web-src/assets/css/main.css @@ -0,0 +1,16 @@ +@import "tailwindcss" theme(static); +@import "@nuxt/ui"; + +/* Font configuration */ +@theme static { + --font-sans: "Public Sans", sans-serif; +} + +/* Smooth transitions for theme changes */ +* { + transition: background-color 0.2s ease, border-color 0.2s ease; +} + +body { + @apply bg-neutral-50 dark:bg-neutral-950; +} diff --git a/TerraformRegistry/web-src/components/UserMenu.vue b/TerraformRegistry/web-src/components/UserMenu.vue new file mode 100644 index 0000000..0da4f29 --- /dev/null +++ b/TerraformRegistry/web-src/components/UserMenu.vue @@ -0,0 +1,56 @@ + + + diff --git a/TerraformRegistry/web-src/composables/useAuth.ts b/TerraformRegistry/web-src/composables/useAuth.ts new file mode 100644 index 0000000..9f7e62e --- /dev/null +++ b/TerraformRegistry/web-src/composables/useAuth.ts @@ -0,0 +1,122 @@ +// User info type returned from /api/auth/me +export interface UserInfo { + id: string; + email: string; + name: string; + provider: string; + avatarUrl: string; +} + +// OIDC provider info from /api/auth/providers +export interface OidcProvider { + name: string; + displayName: string; + icon: string; +} + +export const useAuth = () => { + // Session-based auth (OIDC) - checked via cookie on server + const isAuthenticated = useState("auth-authenticated", () => false); + const user = useState("auth-user", () => null); + const providers = useState("auth-providers", () => []); + const isLoading = useState("auth-loading", () => true); + + // API token for Terraform CLI operations (stored in cookie) + const apiToken = useCookie("auth-token", { + default: () => null, + secure: true, + sameSite: "strict", + }); + + // Check session status on init + const checkSession = async () => { + isLoading.value = true; + try { + const response = await $fetch<{ authenticated: boolean }>( + "/api/auth/session" + ); + isAuthenticated.value = response.authenticated; + + if (response.authenticated) { + await fetchUser(); + } + } catch { + isAuthenticated.value = false; + user.value = null; + } finally { + isLoading.value = false; + } + }; + + // Fetch current user info + const fetchUser = async () => { + try { + const userInfo = await $fetch("/api/auth/me"); + user.value = userInfo; + } catch { + user.value = null; + } + }; + + // Fetch available OIDC providers + const fetchProviders = async () => { + try { + const providerList = await $fetch("/api/auth/providers"); + providers.value = providerList; + } catch { + providers.value = []; + } + }; + + // Initiate OIDC login flow + const loginWithOidc = (provider: string) => { + window.location.href = `/api/auth/login/${provider}`; + }; + + // Legacy API token login (for admin/fallback) + const loginWithToken = (token: string) => { + apiToken.value = token; + }; + + // Logout (clears session cookie) + const logout = async () => { + try { + await $fetch("/api/auth/logout", { method: "POST" }); + } catch { + // Ignore errors + } + user.value = null; + isAuthenticated.value = false; + apiToken.value = null; + navigateTo("/login"); + }; + + // Get auth headers for API calls (uses API token, not session) + const getAuthHeaders = () => { + return { + Authorization: `Bearer ${apiToken.value}`, + }; + }; + + // Check if any OIDC providers are available + const hasOidcProviders = computed(() => providers.value.length > 0); + + return { + // State + isAuthenticated: readonly(isAuthenticated), + user: readonly(user), + providers: readonly(providers), + isLoading: readonly(isLoading), + apiToken: readonly(apiToken), + hasOidcProviders, + + // Actions + checkSession, + fetchUser, + fetchProviders, + loginWithOidc, + loginWithToken, + logout, + getAuthHeaders, + }; +}; diff --git a/TerraformRegistry/web-src/composables/useDashboard.ts b/TerraformRegistry/web-src/composables/useDashboard.ts new file mode 100644 index 0000000..d7cb1cc --- /dev/null +++ b/TerraformRegistry/web-src/composables/useDashboard.ts @@ -0,0 +1,22 @@ +import { createSharedComposable } from "@vueuse/core"; + +const _useDashboard = () => { + const route = useRoute(); + + // Sidebar open state for mobile + const isSidebarOpen = ref(false); + + // Close sidebar on route change + watch( + () => route.fullPath, + () => { + isSidebarOpen.value = false; + } + ); + + return { + isSidebarOpen, + }; +}; + +export const useDashboard = createSharedComposable(_useDashboard); diff --git a/TerraformRegistry/web-src/layouts/default.vue b/TerraformRegistry/web-src/layouts/default.vue new file mode 100644 index 0000000..2d2664e --- /dev/null +++ b/TerraformRegistry/web-src/layouts/default.vue @@ -0,0 +1,102 @@ + + + diff --git a/TerraformRegistry/web-src/middleware/auth.ts b/TerraformRegistry/web-src/middleware/auth.ts new file mode 100644 index 0000000..a6e1d9d --- /dev/null +++ b/TerraformRegistry/web-src/middleware/auth.ts @@ -0,0 +1,7 @@ +export default defineNuxtRouteMiddleware((to) => { + const { isAuthenticated } = useAuth() + + if (!isAuthenticated.value) { + return navigateTo('/login') + } +}) diff --git a/TerraformRegistry/web-src/middleware/global-auth.global.ts b/TerraformRegistry/web-src/middleware/global-auth.global.ts new file mode 100644 index 0000000..c4e17c7 --- /dev/null +++ b/TerraformRegistry/web-src/middleware/global-auth.global.ts @@ -0,0 +1,22 @@ +export default defineNuxtRouteMiddleware(async (to) => { + // Skip middleware for login and callback pages + if (to.path === "/login" || to.path === "/callback") { + return; + } + + const { checkSession, isAuthenticated, apiToken, isLoading } = useAuth(); + + // Wait for loading to complete if on client side + if (import.meta.client && isLoading.value) { + await checkSession(); + } + + // Check for either OIDC session or API token + const hasSession = isAuthenticated.value; + const hasApiToken = !!apiToken.value; + + // If not authenticated, redirect to login + if (!hasSession && !hasApiToken) { + return navigateTo("/login"); + } +}); diff --git a/TerraformRegistry/web-src/nuxt.config.ts b/TerraformRegistry/web-src/nuxt.config.ts new file mode 100644 index 0000000..b888d02 --- /dev/null +++ b/TerraformRegistry/web-src/nuxt.config.ts @@ -0,0 +1,16 @@ +// https://nuxt.com/docs/api/configuration/nuxt-config +export default defineNuxtConfig({ + compatibilityDate: "2025-05-15", + devtools: { enabled: true }, + modules: ["@nuxt/icon", "@nuxt/ui", "@nuxt/fonts", "@vueuse/nuxt"], + css: ["~/assets/css/main.css"], + nitro: { + prerender: { + routes: ["/"], + }, + }, + ssr: false, + colorMode: { + preference: "dark", // default to dark, ready for light theme toggle + }, +}); diff --git a/TerraformRegistry/web-src/package-lock.json b/TerraformRegistry/web-src/package-lock.json new file mode 100644 index 0000000..a204f20 --- /dev/null +++ b/TerraformRegistry/web-src/package-lock.json @@ -0,0 +1,13076 @@ +{ + "name": "nuxt-app", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nuxt-app", + "hasInstallScript": true, + "dependencies": { + "@nuxt/fonts": "^0.11.4", + "@nuxt/icon": "^1.13.0", + "@nuxt/ui": "^3.1.3", + "@vueuse/nuxt": "^12.0.0", + "nuxt": "^3.17.4", + "typescript": "^5.8.3", + "vue": "^3.5.15", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@iconify-json/lucide": "^1.2.0", + "@iconify-json/simple-icons": "^1.2.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", + "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", + "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.3", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", + "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", + "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", + "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/metrics": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@capsizecss/metrics/-/metrics-3.5.0.tgz", + "integrity": "sha512-Ju2I/Qn3c1OaU8FgeW4Tc22D4C9NwyVfKzNmzst59bvxBjPoLYNZMqFYn+HvCtn4MpXwiaDtCE8fNuQLpdi9yA==", + "license": "MIT" + }, + "node_modules/@capsizecss/unpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", + "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", + "license": "MIT", + "dependencies": { + "blob-to-buffer": "^1.2.8", + "cross-fetch": "^3.0.4", + "fontkit": "^2.0.2" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", + "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@dependents/detective-less": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", + "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", + "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", + "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.6.tgz", + "integrity": "sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0", + "@floating-ui/utils": "^0.2.9", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@floating-ui/vue/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@iconify-json/lucide": { + "version": "1.2.79", + "resolved": "https://registry.npmjs.org/@iconify-json/lucide/-/lucide-1.2.79.tgz", + "integrity": "sha512-CcwoXfC2Y7UVW0PXopmXtB4Do/eUJkhAqQqOnVENEiw3FwU707TK4uyIUqdo9tlvBaFBl95wnJf3smqsTnSyKA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.61", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.61.tgz", + "integrity": "sha512-DG6z3VEAxtDEw/SuZssZ/E8EvhjBhFQqxpEo3uckRKiia3LfZHmM4cx4RsaO2qX1Bqo9uadR5c/hYavvUQVuHw==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/collections": { + "version": "1.0.553", + "resolved": "https://registry.npmjs.org/@iconify/collections/-/collections-1.0.553.tgz", + "integrity": "sha512-tlqeyeiatkhrC8iF95mwfGGNTSSAMHihRjIsX/mGIIxnm9E6z4vOZtoNHng3qcYjR9Q6Ix+bGSivS858FfpA7A==", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@iconify/vue": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@iconify/vue/-/vue-5.0.0.tgz", + "integrity": "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "vue": ">=3" + } + }, + "node_modules/@internationalized/date": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.1.tgz", + "integrity": "sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.2.tgz", + "integrity": "sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz", + "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@netlify/binary-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz", + "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==", + "license": "Apache 2" + }, + "node_modules/@netlify/dev-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-2.2.0.tgz", + "integrity": "sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==", + "license": "MIT", + "dependencies": { + "@whatwg-node/server": "^0.9.60", + "chokidar": "^4.0.1", + "decache": "^4.6.2", + "dot-prop": "9.0.0", + "env-paths": "^3.0.0", + "find-up": "7.0.0", + "lodash.debounce": "^4.0.8", + "netlify": "^13.3.5", + "parse-gitignore": "^2.0.0", + "uuid": "^11.1.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/functions": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-3.1.10.tgz", + "integrity": "sha512-sI93kcJ2cUoMgDRPnrEm0lZhuiDVDqM6ngS/UbHTApIH3+eg3yZM5p/0SDFQQq9Bad0/srFmgBmTdXushzY5kg==", + "license": "MIT", + "dependencies": { + "@netlify/blobs": "9.1.2", + "@netlify/dev-utils": "2.2.0", + "@netlify/serverless-functions-api": "1.41.2", + "@netlify/zip-it-and-ship-it": "^12.1.0", + "cron-parser": "^4.9.0", + "decache": "^4.6.2", + "extract-zip": "^2.0.1", + "is-stream": "^4.0.1", + "jwt-decode": "^4.0.0", + "lambda-local": "^2.2.0", + "read-package-up": "^11.0.0", + "source-map-support": "^0.5.21" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@netlify/functions/node_modules/@netlify/blobs": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-9.1.2.tgz", + "integrity": "sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==", + "license": "MIT", + "dependencies": { + "@netlify/dev-utils": "2.2.0", + "@netlify/runtime-utils": "1.3.1" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/functions/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/open-api": { + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.37.0.tgz", + "integrity": "sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==", + "license": "MIT", + "engines": { + "node": ">=14.8.0" + } + }, + "node_modules/@netlify/runtime-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@netlify/runtime-utils/-/runtime-utils-1.3.1.tgz", + "integrity": "sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@netlify/serverless-functions-api": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.41.2.tgz", + "integrity": "sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@netlify/zip-it-and-ship-it": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-12.1.1.tgz", + "integrity": "sha512-cgOkbMmAUTnaO0Ne8N1UQaU+mf9+17Kk3FihtC+Kzyw83fc5cjBnYe6Z3mnsiJU26xWhej2mAbXAc9p2IseIJA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.27.3", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.41.2", + "@vercel/nft": "0.29.3", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "copy-file": "^11.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.25.4", + "execa": "^8.0.0", + "fast-glob": "^3.3.2", + "filter-obj": "^6.0.0", + "find-up": "^7.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^12.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + }, + "bin": { + "zip-it-and-ship-it": "bin.js" + }, + "engines": { + "node": ">=18.14.0" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft": { + "version": "0.29.3", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.3.tgz", + "integrity": "sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA==", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^10.4.5", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/cli": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-3.25.1.tgz", + "integrity": "sha512-7+Ut7IvAD4b5piikJFSgIqSPbHKFT5gq05JvCsEHRM0MPA5QR9QHkicklyMqSj0D/oEkDohen8qRgdxRie3oUA==", + "license": "MIT", + "dependencies": { + "c12": "^3.0.3", + "chokidar": "^4.0.3", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.4.2", + "defu": "^6.1.4", + "fuse.js": "^7.1.0", + "giget": "^2.0.0", + "h3": "^1.15.3", + "httpxy": "^0.1.7", + "jiti": "^2.4.2", + "listhen": "^1.9.0", + "nypm": "^0.6.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "semver": "^7.7.1", + "std-env": "^3.9.0", + "tinyexec": "^1.0.1", + "ufo": "^1.6.1", + "youch": "^4.1.0-beta.7" + }, + "bin": { + "nuxi": "bin/nuxi.mjs", + "nuxi-ng": "bin/nuxi.mjs", + "nuxt": "bin/nuxi.mjs", + "nuxt-cli": "bin/nuxi.mjs" + }, + "engines": { + "node": "^16.10.0 || >=18.0.0" + } + }, + "node_modules/@nuxt/devalue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", + "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==", + "license": "MIT" + }, + "node_modules/@nuxt/devtools": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-2.4.1.tgz", + "integrity": "sha512-2gwjUF1J1Bp/V9ZTsYJe8sS9O3eg80gdf01fT8aEBcilR3wf0PSIxjEyYk+YENtrHPLXcnnUko89jHGq23MHPQ==", + "license": "MIT", + "dependencies": { + "@nuxt/devtools-kit": "2.4.1", + "@nuxt/devtools-wizard": "2.4.1", + "@nuxt/kit": "^3.17.3", + "@vue/devtools-core": "^7.7.6", + "@vue/devtools-kit": "^7.7.6", + "birpc": "^2.3.0", + "consola": "^3.4.2", + "destr": "^2.0.5", + "error-stack-parser-es": "^1.0.5", + "execa": "^8.0.1", + "fast-npm-meta": "^0.4.2", + "get-port-please": "^3.1.2", + "hookable": "^5.5.3", + "image-meta": "^0.2.1", + "is-installed-globally": "^1.0.0", + "launch-editor": "^2.10.0", + "local-pkg": "^1.1.1", + "magicast": "^0.3.5", + "nypm": "^0.6.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "semver": "^7.7.2", + "simple-git": "^3.27.0", + "sirv": "^3.0.1", + "structured-clone-es": "^1.0.0", + "tinyglobby": "^0.2.13", + "vite-plugin-inspect": "^11.0.1", + "vite-plugin-vue-tracer": "^0.1.3", + "which": "^5.0.0", + "ws": "^8.18.2" + }, + "bin": { + "devtools": "cli.mjs" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-kit": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-2.4.1.tgz", + "integrity": "sha512-taA2Nm03JiV3I+SEYS/u1AfjvLm3V9PO8lh0xLsUk/2mlUnL6GZ9xLXrp8VRg11HHt7EPXERGQh8h4iSPU2bSQ==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.17.3", + "@nuxt/schema": "^3.17.3", + "execa": "^8.0.1" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-wizard": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-2.4.1.tgz", + "integrity": "sha512-2BaryhfribzQ95UxR7vLLV17Pk1Otxg9ryqH71M1Yp0mybBFs6Z3b0v+RXfCb4BwA10s/tXBhfF13DHSSJF1+A==", + "license": "MIT", + "dependencies": { + "consola": "^3.4.2", + "diff": "^7.0.0", + "execa": "^8.0.1", + "magicast": "^0.3.5", + "pathe": "^2.0.3", + "pkg-types": "^2.1.0", + "prompts": "^2.4.2", + "semver": "^7.7.2" + }, + "bin": { + "devtools-wizard": "cli.mjs" + } + }, + "node_modules/@nuxt/fonts": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@nuxt/fonts/-/fonts-0.11.4.tgz", + "integrity": "sha512-GbLavsC+9FejVwY+KU4/wonJsKhcwOZx/eo4EuV57C4osnF/AtEmev8xqI0DNlebMEhEGZbu1MGwDDDYbeR7Bw==", + "license": "MIT", + "dependencies": { + "@nuxt/devtools-kit": "^2.4.0", + "@nuxt/kit": "^3.17.3", + "consola": "^3.4.2", + "css-tree": "^3.1.0", + "defu": "^6.1.4", + "esbuild": "^0.25.4", + "fontaine": "^0.6.0", + "h3": "^1.15.3", + "jiti": "^2.4.2", + "magic-regexp": "^0.10.0", + "magic-string": "^0.30.17", + "node-fetch-native": "^1.6.6", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "sirv": "^3.0.1", + "tinyglobby": "^0.2.13", + "ufo": "^1.6.1", + "unifont": "^0.4.1", + "unplugin": "^2.3.3", + "unstorage": "^1.16.0" + } + }, + "node_modules/@nuxt/fonts/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/@nuxt/fonts/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/@nuxt/icon": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@nuxt/icon/-/icon-1.13.0.tgz", + "integrity": "sha512-Sft1DZj/U5Up60DMnhp+hRDNDXRkMhwHocxgDkDkAPBxqR8PRyvzxcMIy3rjGMu0s+fB6ZdLs6vtaWzjWuerQQ==", + "license": "MIT", + "dependencies": { + "@iconify/collections": "^1.0.548", + "@iconify/types": "^2.0.0", + "@iconify/utils": "^2.3.0", + "@iconify/vue": "^5.0.0", + "@nuxt/devtools-kit": "^2.4.1", + "@nuxt/kit": "^3.17.3", + "consola": "^3.4.2", + "local-pkg": "^1.1.1", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinyglobby": "^0.2.13" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.17.4.tgz", + "integrity": "sha512-l+hY8sy2XFfg3PigZj+PTu6+KIJzmbACTRimn1ew/gtCz+F38f6KTF4sMRTN5CUxiB8TRENgEonASmkAWfpO9Q==", + "license": "MIT", + "dependencies": { + "c12": "^3.0.4", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.5", + "ignore": "^7.0.4", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "semver": "^7.7.2", + "std-env": "^3.9.0", + "tinyglobby": "^0.2.13", + "ufo": "^1.6.1", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/schema": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.17.4.tgz", + "integrity": "sha512-bsfJdWjKNYLkVQt7Ykr9YsAql1u8Tuo6iecSUOltTIhsvAIYsknRFPHoNKNmaiv/L6FgCQgUgQppPTPUAXiJQQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "^3.5.14", + "consola": "^3.4.2", + "defu": "^6.1.4", + "pathe": "^2.0.3", + "std-env": "^3.9.0" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/telemetry": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.6.tgz", + "integrity": "sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.15.4", + "citty": "^0.1.6", + "consola": "^3.4.2", + "destr": "^2.0.3", + "dotenv": "^16.4.7", + "git-url-parse": "^16.0.1", + "is-docker": "^3.0.0", + "ofetch": "^1.4.1", + "package-manager-detector": "^1.1.0", + "pathe": "^2.0.3", + "rc9": "^2.1.2", + "std-env": "^3.8.1" + }, + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/ui": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nuxt/ui/-/ui-3.1.3.tgz", + "integrity": "sha512-mhoYyXrRf1JAWj3RZ3htGup9N/IbNgNLn4jWHBxOilEFUk7af6qGUVqawv/EiPRa8iP2kK3tkxmzZ0wf2wt/KQ==", + "license": "MIT", + "dependencies": { + "@iconify/vue": "^5.0.0", + "@internationalized/date": "^3.8.1", + "@internationalized/number": "^3.6.2", + "@nuxt/fonts": "^0.11.4", + "@nuxt/icon": "^1.13.0", + "@nuxt/kit": "^3.17.4", + "@nuxt/schema": "^3.17.4", + "@nuxtjs/color-mode": "^3.5.2", + "@standard-schema/spec": "^1.0.0", + "@tailwindcss/postcss": "^4.1.7", + "@tailwindcss/vite": "^4.1.7", + "@tanstack/vue-table": "^8.21.3", + "@unhead/vue": "^2.0.10", + "@vueuse/core": "^13.2.0", + "@vueuse/integrations": "^13.2.0", + "colortranslator": "^4.1.0", + "consola": "^3.4.2", + "defu": "^6.1.4", + "embla-carousel-auto-height": "^8.6.0", + "embla-carousel-auto-scroll": "^8.6.0", + "embla-carousel-autoplay": "^8.6.0", + "embla-carousel-class-names": "^8.6.0", + "embla-carousel-fade": "^8.6.0", + "embla-carousel-vue": "^8.6.0", + "embla-carousel-wheel-gestures": "^8.0.2", + "fuse.js": "^7.1.0", + "hookable": "^5.5.3", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "reka-ui": "^2.2.1", + "scule": "^1.3.0", + "tailwind-variants": "^1.0.0", + "tailwindcss": "^4.1.7", + "tinyglobby": "^0.2.14", + "unplugin": "^2.3.4", + "unplugin-auto-import": "^19.3.0", + "unplugin-vue-components": "^28.7.0", + "vaul-vue": "^0.4.1", + "vue-component-type-helpers": "^2.2.10" + }, + "bin": { + "nuxt-ui": "cli/index.mjs" + }, + "peerDependencies": { + "@inertiajs/vue3": "^2.0.7", + "joi": "^17.13.0", + "superstruct": "^2.0.0", + "typescript": "^5.6.3", + "valibot": "^1.0.0", + "vue-router": "^4.5.0", + "yup": "^1.6.0", + "zod": "^3.24.0" + }, + "peerDependenciesMeta": { + "@inertiajs/vue3": { + "optional": true + }, + "joi": { + "optional": true + }, + "superstruct": { + "optional": true + }, + "valibot": { + "optional": true + }, + "vue-router": { + "optional": true + }, + "yup": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@nuxt/ui/node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/@nuxt/vite-builder": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.17.4.tgz", + "integrity": "sha512-MRcGe02nEDpu+MnRJcmgVfHdzgt9tWvxVdJbhfd6oyX19plw/CANjgHedlpUNUxqeWXC6CQfGvoVJXn3bQlEqA==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "3.17.4", + "@rollup/plugin-replace": "^6.0.2", + "@vitejs/plugin-vue": "^5.2.4", + "@vitejs/plugin-vue-jsx": "^4.2.0", + "autoprefixer": "^10.4.21", + "consola": "^3.4.2", + "cssnano": "^7.0.7", + "defu": "^6.1.4", + "esbuild": "^0.25.4", + "escape-string-regexp": "^5.0.0", + "exsolve": "^1.0.5", + "externality": "^1.0.2", + "get-port-please": "^3.1.2", + "h3": "^1.15.3", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "mocked-exports": "^0.1.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "postcss": "^8.5.3", + "rollup-plugin-visualizer": "^5.14.0", + "std-env": "^3.9.0", + "ufo": "^1.6.1", + "unenv": "^2.0.0-rc.17", + "unplugin": "^2.3.4", + "vite": "^6.3.5", + "vite-node": "^3.1.4", + "vite-plugin-checker": "^0.9.3", + "vue-bundle-renderer": "^2.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" + }, + "peerDependencies": { + "vue": "^3.3.4" + } + }, + "node_modules/@nuxtjs/color-mode": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/color-mode/-/color-mode-3.5.2.tgz", + "integrity": "sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.13.2", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "semver": "^7.6.3" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/@nuxtjs/color-mode/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/@nuxtjs/color-mode/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.71.0.tgz", + "integrity": "sha512-7R7TuHWL2hZ8BbRdxXlVJTE0os7TM6LL2EX2OkIz41B3421JeIU+2YH+IV55spIUy5E5ynesLk0IdpSSPVZ25Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.71.0.tgz", + "integrity": "sha512-Q7QshRy7cDvpvWAH+qy2U8O9PKo5yEKFqPruD2OSOM8igy/GLIC21dAd6iCcqXRZxaqzN9c4DaXFtEZfq4NWsw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.71.0.tgz", + "integrity": "sha512-z8NNBBseLriz2p+eJ8HWC+A8P+MsO8HCtXie9zaVlVcXSiUuBroRWeXopvHN4r+tLzmN2iLXlXprJdNhXNgobQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.71.0.tgz", + "integrity": "sha512-QZQcWMduFRWddqvjgLvsWoeellFjvWqvdI0O1m5hoMEykv2/Ag8d7IZbBwRwFqKBuK4UzpBNt4jZaYzRsv1irg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.71.0.tgz", + "integrity": "sha512-lTDc2WCzllVFXugUHQGR904CksA5BiHc35mcH6nJm6h0FCdoyn9zefW8Pelku5ET39JgO1OENEm/AyNvf/FzIw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.71.0.tgz", + "integrity": "sha512-mAA6JGS+MB+gbN5y/KuQ095EHYGF7a/FaznM7klk5CaCap/UdiRWCVinVV6xXmejOPZMnrkr6R5Kqi6dHRsm2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.71.0.tgz", + "integrity": "sha512-PaPmIEM0yldXSrO1Icrx6/DwnMXpEOv0bDVa0LFtwy2I+aiTiX7OVRB3pJCg8FEV9P+L48s9XW0Oaz+Dz3o3sQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.71.0.tgz", + "integrity": "sha512-+AEGO6gOSSEqWTrCCYayNMMPe/qi83o1czQ5bytEFQtyvWdgLwliqqShpJtgSLj1SNWi94HiA/VOfqqZnGE1AQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.71.0.tgz", + "integrity": "sha512-zqFnheBACFzrRl401ylXufNl1YsOdVa8jwS2iSCwJFx4/JdQhE6Y4YWoEjQ/pzeRZXwI5FX4C607rQe2YdhggQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.71.0.tgz", + "integrity": "sha512-steSQTwv3W+/hpES4/9E3vNohou1FXJLNWLDbYHDaBI9gZdYJp6zwALC8EShCz0NoQvCu4THD3IBsTBHvFBNyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.71.0.tgz", + "integrity": "sha512-mV8j/haQBZRU2QnwZe0UIpnhpPBL9dFk1tgNVSH9tV7cV4xUZPn7pFDqMriAmpD7GLfmxbZMInDkujokd63M7Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.71.0.tgz", + "integrity": "sha512-P8ScINpuihkkBX8BrN/4x4ka2+izncHh7/hHxxuPZDZTVMyNNnL1uSoI80tN9yN7NUtUKoi9aQUaF4h22RQcIA==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.10" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.71.0.tgz", + "integrity": "sha512-4jrJSdBXHmLYaghi1jvbuJmWu117wxqCpzHHgpEV9xFiRSngtClqZkNqyvcD4907e/VriEwluZ3PO3Mlp0y9cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.71.0.tgz", + "integrity": "sha512-zF7xF19DOoANym/xwVClYH1tiW3S70W8ZDrMHdrEB7gZiTYLCIKIRMrpLVKaRia6LwEo7X0eduwdBa5QFawxOw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.71.0.tgz", + "integrity": "sha512-5CwQ4MI+P4MQbjLWXgNurA+igGwu/opNetIE13LBs9+V93R64MLvDKOOLZIXSzEfovU3Zef3q3GjPnMTgJTn2w==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.1.tgz", + "integrity": "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@poppinss/colors": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.4.tgz", + "integrity": "sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==", + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/@poppinss/colors/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.3.tgz", + "integrity": "sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.4", + "@sindresorhus/is": "^7.0.1", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.1.tgz", + "integrity": "sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.10.tgz", + "integrity": "sha512-FeISF1RUTod5Kvt3yUXByrAPk5EfDWo/1BPv1ARBZ07weqx888SziPuWS6HUJU0YroGyQURjdIrkjWJP2zBFDQ==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-alias": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", + "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", + "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz", + "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", + "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.7.tgz", + "integrity": "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==", + "license": "CC0-1.0" + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.8.tgz", + "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.8" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.8.tgz", + "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.8", + "@tailwindcss/oxide-darwin-arm64": "4.1.8", + "@tailwindcss/oxide-darwin-x64": "4.1.8", + "@tailwindcss/oxide-freebsd-x64": "4.1.8", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.8", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.8", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.8", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.8", + "@tailwindcss/oxide-linux-x64-musl": "4.1.8", + "@tailwindcss/oxide-wasm32-wasi": "4.1.8", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.8", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.8" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.8.tgz", + "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.8.tgz", + "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.8.tgz", + "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.8.tgz", + "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.8.tgz", + "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.8.tgz", + "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.8.tgz", + "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.8.tgz", + "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.8.tgz", + "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.8.tgz", + "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.10", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.8.tgz", + "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.8.tgz", + "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.8.tgz", + "integrity": "sha512-vB/vlf7rIky+w94aWMw34bWW1ka6g6C3xIOdICKX2GC0VcLtL6fhlLiafF0DVIwa9V6EHz8kbWMkS2s2QvvNlw==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.8", + "@tailwindcss/oxide": "4.1.8", + "postcss": "^8.4.41", + "tailwindcss": "4.1.8" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.8.tgz", + "integrity": "sha512-CQ+I8yxNV5/6uGaJjiuymgw0kEQiNKRinYbZXPdx1fk5WgiyReG0VaUx/Xq6aVNSUNJFzxm6o8FNKS5aMaim5A==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.8", + "@tailwindcss/oxide": "4.1.8", + "tailwindcss": "4.1.8" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.9", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.9.tgz", + "integrity": "sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/vue-table/-/vue-table-8.21.3.tgz", + "integrity": "sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": ">=3.2" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.9", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.9.tgz", + "integrity": "sha512-HsvHaOo+o52cVcPhomKDZ3CMpTF/B2qg+BhPHIQJwzn4VIqDyt/rRVqtIomG6jE83IFsE2vlr6cmx7h3dHA0SA==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.9" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", + "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "license": "MIT" + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unhead/vue": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.0.10.tgz", + "integrity": "sha512-lV7E1sXX6/te8+IiUwlMysBAyJT/WM5Je47cRnpU5hsvDRziSIGfim9qMWbsTouH+paavRJz1i8gk5hRzjvkcw==", + "license": "MIT", + "dependencies": { + "hookable": "^5.5.3", + "unhead": "2.0.10" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.13" + } + }, + "node_modules/@vercel/nft": { + "version": "0.29.4", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz", + "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^10.4.5", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vercel/nft/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@vercel/nft/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz", + "integrity": "sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1", + "@rolldown/pluginutils": "^1.0.0-beta.9", + "@vue/babel-plugin-jsx": "^1.4.0" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@vue-macros/common": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", + "integrity": "sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.13", + "ast-kit": "^1.4.0", + "local-pkg": "^1.0.0", + "magic-string-ast": "^0.7.0", + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.14.0" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", + "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.16", + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.6.tgz", + "integrity": "sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.6", + "@vue/devtools-shared": "^7.7.6", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz", + "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.6", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz", + "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.16.tgz", + "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz", + "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz", + "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/runtime-core": "3.5.16", + "@vue/shared": "3.5.16", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz", + "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "vue": "3.5.16" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.3.0.tgz", + "integrity": "sha512-uYRz5oEfebHCoRhK4moXFM3NSCd5vu2XMLOq/Riz5FdqZMy2RvBtazdtL3gEcmDyqkztDe9ZP/zymObMIbiYSg==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.3.0", + "@vueuse/shared": "13.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/integrations": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-13.3.0.tgz", + "integrity": "sha512-h5mGRYPbiTZTFP/AKELLPGnUDBly7z7Qd1pgEQlT3ItQ0NlZM0vB+8SOQycpSBOBlgg72Zgw+mi2r+4O/G8RuQ==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "13.3.0", + "@vueuse/shared": "13.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.3.0.tgz", + "integrity": "sha512-42IzJIOYCKIb0Yjv1JfaKpx8JlCiTmtCWrPxt7Ja6Wzoq0h79+YVXmBV03N966KEmDEESTbp5R/qO3AB5BDnGw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/nuxt": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/nuxt/-/nuxt-12.8.2.tgz", + "integrity": "sha512-jDsMli+MmxlhzaMwu8a2varKlkiBTPCdb+I457F7bTb1GazC6HDbGbLmhkpVQ8bNA1FzqfhwhAsOEsESF7wOkw==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.15.4", + "@vueuse/core": "12.8.2", + "@vueuse/metadata": "12.8.2", + "local-pkg": "^1.1.1", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "nuxt": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vueuse/nuxt/node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/nuxt/node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/nuxt/node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.3.0.tgz", + "integrity": "sha512-L1QKsF0Eg9tiZSFXTgodYnu0Rsa2P0En2LuLrIs/jgrkyiDuJSsPZK+tx+wU0mMsYHUYEjNsuE41uqqkuR8VhA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.8.tgz", + "integrity": "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==", + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.7.21", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "license": "MIT" + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz", + "integrity": "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/server": { + "version": "0.9.71", + "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.9.71.tgz", + "integrity": "sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==", + "license": "MIT", + "dependencies": { + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/fetch": "^0.10.5", + "@whatwg-node/promise-helpers": "^1.2.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ast-kit": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.3.tgz", + "integrity": "sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-module-types": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", + "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", + "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "ast-kit": "^1.0.1" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/birpc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", + "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/blob-to-buffer": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", + "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.0.4.tgz", + "integrity": "sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.5.0", + "exsolve": "^1.0.5", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001720", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "license": "MIT", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/colortranslator": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/colortranslator/-/colortranslator-4.1.0.tgz", + "integrity": "sha512-bwa5awaMnQ6dpm9D3nbsFwUr6x6FrTKmxPdolNtSYfxCNR7ZM93GG1OF5Y3Sy1LvYdalb3riKC9uTn0X5NB36g==", + "license": "Apache-2.0" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compatx": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.2.0.tgz", + "integrity": "sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==", + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-file": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz", + "integrity": "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.11", + "p-event": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/croner": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.0.0.tgz", + "integrity": "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==", + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.7.tgz", + "integrity": "sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.7", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.7.tgz", + "integrity": "sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.3", + "postcss-convert-values": "^7.0.5", + "postcss-discard-comments": "^7.0.4", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.5", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.3", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.3", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.3", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.0.2", + "postcss-unique-selectors": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/db0": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.2.tgz", + "integrity": "sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==", + "license": "MIT", + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "license": "MIT", + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detective-amd": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", + "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", + "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "escodegen": "^2.1.0", + "get-amd-module-type": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-cjs": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", + "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", + "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-es6": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", + "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", + "license": "MIT", + "dependencies": { + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-postcss": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", + "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", + "license": "MIT", + "dependencies": { + "is-url": "^1.2.4", + "postcss-values-parser": "^6.0.2" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.47" + } + }, + "node_modules/detective-sass": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", + "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-scss": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", + "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-stylus": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", + "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/detective-typescript": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", + "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "^8.23.0", + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" + } + }, + "node_modules/detective-vue2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", + "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", + "license": "MIT", + "dependencies": { + "@dependents/detective-less": "^5.0.1", + "@vue/compiler-sfc": "^3.5.13", + "detective-es6": "^5.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" + } + }, + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "license": "MIT" + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT" + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-auto-height": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-auto-height/-/embla-carousel-auto-height-8.6.0.tgz", + "integrity": "sha512-/HrJQOEM6aol/oF33gd2QlINcXy3e19fJWvHDuHWp2bpyTa+2dm9tVVJak30m2Qy6QyQ6Fc8DkImtv7pxWOJUQ==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-auto-scroll": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-auto-scroll/-/embla-carousel-auto-scroll-8.6.0.tgz", + "integrity": "sha512-WT9fWhNXFpbQ6kP+aS07oF5IHYLZ1Dx4DkwgCY8Hv2ZyYd2KMCPfMV1q/cA3wFGuLO7GMgKiySLX90/pQkcOdQ==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-autoplay": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz", + "integrity": "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-class-names": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-class-names/-/embla-carousel-class-names-8.6.0.tgz", + "integrity": "sha512-l1hm1+7GxQ+zwdU2sea/LhD946on7XO2qk3Xq2XWSwBaWfdgchXdK567yzLtYSHn4sWYdiX+x4nnaj+saKnJkw==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-fade": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.6.0.tgz", + "integrity": "sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-vue": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-vue/-/embla-carousel-vue-8.6.0.tgz", + "integrity": "sha512-v8UO5UsyLocZnu/LbfQA7Dn2QHuZKurJY93VUmZYP//QRWoCWOsionmvLLAlibkET3pGPs7++03VhJKbWD7vhQ==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "vue": "^3.2.37" + } + }, + "node_modules/embla-carousel-wheel-gestures": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/embla-carousel-wheel-gestures/-/embla-carousel-wheel-gestures-8.0.2.tgz", + "integrity": "sha512-gtE8xHRwMGsfsMAgco/QoYhvcxNoMLmFF0DaWH7FXJJWk8RlEZyiZHZRZL6TZVCgooo9/hKyYWITLaSZLIvkbQ==", + "license": "MIT", + "dependencies": { + "wheel-gestures": "^2.2.5" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "embla-carousel": "^8.0.0 || ~8.0.0-rc03" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", + "license": "MIT" + }, + "node_modules/externality": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz", + "integrity": "sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.14.1", + "mlly": "^1.3.0", + "pathe": "^1.1.1", + "ufo": "^1.1.2" + } + }, + "node_modules/externality/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-npm-meta": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.4.3.tgz", + "integrity": "sha512-eUzR/uVx61fqlHBjG/eQx5mQs7SQObehMTTdq8FAkdCB4KuZSQ6DiZMIrAq4kcibB3WFLQ9c4dT26Vwkix1RKg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz", + "integrity": "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/fontaine": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/fontaine/-/fontaine-0.6.0.tgz", + "integrity": "sha512-cfKqzB62GmztJhwJ0YXtzNsmpqKAcFzTqsakJ//5COTzbou90LU7So18U+4D8z+lDXr4uztaAUZBonSoPDcj1w==", + "license": "MIT", + "dependencies": { + "@capsizecss/metrics": "^3.5.0", + "@capsizecss/unpack": "^2.4.0", + "css-tree": "^3.1.0", + "magic-regexp": "^0.10.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "ufo": "^1.6.1", + "unplugin": "^2.3.2" + } + }, + "node_modules/fontaine/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/fontaine/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-amd-module-type": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", + "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", + "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "license": "MIT" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" + } + }, + "node_modules/git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "license": "MIT", + "dependencies": { + "git-up": "^8.1.0" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gzip-size": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", + "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/h3/node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/httpxy": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", + "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-meta": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", + "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==", + "license": "MIT" + }, + "node_modules/impound": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/impound/-/impound-1.0.0.tgz", + "integrity": "sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==", + "license": "MIT", + "dependencies": { + "exsolve": "^1.0.5", + "mocked-exports": "^0.1.1", + "pathe": "^2.0.3", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", + "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, + "node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "license": "MIT", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", + "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==", + "license": "MIT" + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/lambda-local": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz", + "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==", + "license": "MIT", + "dependencies": { + "commander": "^10.0.1", + "dotenv": "^16.3.1", + "winston": "^3.10.0" + }, + "bin": { + "lambda-local": "build/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/listhen/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/magic-regexp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/magic-regexp/-/magic-regexp-0.10.0.tgz", + "integrity": "sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12", + "mlly": "^1.7.2", + "regexp-tree": "^0.1.27", + "type-level-regexp": "~0.1.17", + "ufo": "^1.5.4", + "unplugin": "^2.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magic-string-ast": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.7.1.tgz", + "integrity": "sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-api-client": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", + "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==", + "license": "ISC" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz", + "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mocked-exports": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mocked-exports/-/mocked-exports-0.1.1.tgz", + "integrity": "sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==", + "license": "MIT" + }, + "node_modules/module-definition": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", + "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", + "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/nanotar": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.2.0.tgz", + "integrity": "sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==", + "license": "MIT" + }, + "node_modules/netlify": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/netlify/-/netlify-13.3.5.tgz", + "integrity": "sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==", + "license": "MIT", + "dependencies": { + "@netlify/open-api": "^2.37.0", + "lodash-es": "^4.17.21", + "micro-api-client": "^3.3.0", + "node-fetch": "^3.0.0", + "p-wait-for": "^5.0.0", + "qs": "^6.9.6" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/nitropack": { + "version": "2.11.12", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.11.12.tgz", + "integrity": "sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==", + "license": "MIT", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.4.0", + "@netlify/functions": "^3.1.8", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-replace": "^6.0.2", + "@rollup/plugin-terser": "^0.4.4", + "@vercel/nft": "^0.29.2", + "archiver": "^7.0.1", + "c12": "^3.0.3", + "chokidar": "^4.0.3", + "citty": "^0.1.6", + "compatx": "^0.2.0", + "confbox": "^0.2.2", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "croner": "^9.0.0", + "crossws": "^0.3.5", + "db0": "^0.3.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "dot-prop": "^9.0.0", + "esbuild": "^0.25.4", + "escape-string-regexp": "^5.0.0", + "etag": "^1.8.1", + "exsolve": "^1.0.5", + "globby": "^14.1.0", + "gzip-size": "^7.0.0", + "h3": "^1.15.3", + "hookable": "^5.5.3", + "httpxy": "^0.1.7", + "ioredis": "^5.6.1", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "listhen": "^1.9.0", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "mime": "^4.0.7", + "mlly": "^1.7.4", + "node-fetch-native": "^1.6.6", + "node-mock-http": "^1.0.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "pretty-bytes": "^6.1.1", + "radix3": "^1.1.2", + "rollup": "^4.40.2", + "rollup-plugin-visualizer": "^5.14.0", + "scule": "^1.3.0", + "semver": "^7.7.2", + "serve-placeholder": "^2.0.2", + "serve-static": "^2.2.0", + "source-map": "^0.7.4", + "std-env": "^3.9.0", + "ufo": "^1.6.1", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.4.1", + "unenv": "^2.0.0-rc.17", + "unimport": "^5.0.1", + "unplugin-utils": "^0.2.4", + "unstorage": "^1.16.0", + "untyped": "^2.0.0", + "unwasm": "^0.3.9", + "youch": "^4.1.0-beta.7", + "youch-core": "^0.3.2" + }, + "bin": { + "nitro": "dist/cli/index.mjs", + "nitropack": "dist/cli/index.mjs" + }, + "engines": { + "node": "^16.11.0 || >=17.0.0" + }, + "peerDependencies": { + "xml2js": "^0.6.2" + }, + "peerDependenciesMeta": { + "xml2js": { + "optional": true + } + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", + "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-source-walk": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", + "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nuxt": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.17.4.tgz", + "integrity": "sha512-49tkp7/+QVhuEOFoTDVvNV6Pc5+aI7wWjZHXzLUrt3tlWLPFh0yYbNXOc3kaxir1FuhRQHHyHZ7azCPmGukfFg==", + "license": "MIT", + "dependencies": { + "@nuxt/cli": "^3.25.1", + "@nuxt/devalue": "^2.0.2", + "@nuxt/devtools": "^2.4.1", + "@nuxt/kit": "3.17.4", + "@nuxt/schema": "3.17.4", + "@nuxt/telemetry": "^2.6.6", + "@nuxt/vite-builder": "3.17.4", + "@unhead/vue": "^2.0.9", + "@vue/shared": "^3.5.14", + "c12": "^3.0.4", + "chokidar": "^4.0.3", + "compatx": "^0.2.0", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "defu": "^6.1.4", + "destr": "^2.0.5", + "devalue": "^5.1.1", + "errx": "^0.1.0", + "esbuild": "^0.25.4", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "exsolve": "^1.0.5", + "globby": "^14.1.0", + "h3": "^1.15.3", + "hookable": "^5.5.3", + "ignore": "^7.0.4", + "impound": "^1.0.0", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "mocked-exports": "^0.1.1", + "nanotar": "^0.2.0", + "nitropack": "^2.11.12", + "nypm": "^0.6.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.11", + "on-change": "^5.0.1", + "oxc-parser": "^0.71.0", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "radix3": "^1.1.2", + "scule": "^1.3.0", + "semver": "^7.7.2", + "std-env": "^3.9.0", + "strip-literal": "^3.0.0", + "tinyglobby": "0.2.13", + "ufo": "^1.6.1", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "unplugin": "^2.3.4", + "unplugin-vue-router": "^0.12.0", + "unstorage": "^1.16.0", + "untyped": "^2.0.0", + "vue": "^3.5.14", + "vue-bundle-renderer": "^2.1.1", + "vue-devtools-stub": "^0.1.0", + "vue-router": "^4.5.1" + }, + "bin": { + "nuxi": "bin/nuxt.mjs", + "nuxt": "bin/nuxt.mjs" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" + }, + "peerDependencies": { + "@parcel/watcher": "^2.1.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + }, + "@types/node": { + "optional": true + } + } + }, + "node_modules/nypm": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", + "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.3", + "pkg-types": "^2.0.0", + "tinyexec": "^0.3.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/nypm/node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/on-change": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/on-change/-/on-change-5.0.1.tgz", + "integrity": "sha512-n7THCP7RkyReRSLkJb8kUWoNsxUIBxTkIp3JKno+sEz6o/9AJ3w3P9fzQkITEkMwyTKJjZciF3v/pVoouxZZMg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/on-change?sponsor=1" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/oxc-parser": { + "version": "0.71.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.71.0.tgz", + "integrity": "sha512-RXmu7qi+67RJ8E5UhKZJdliTI+AqD3gncsJecjujcYvjsCZV9KNIfu42fQAnAfLaYZuzOMRdUYh7LzV3F1C0Gw==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.71.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-darwin-arm64": "0.71.0", + "@oxc-parser/binding-darwin-x64": "0.71.0", + "@oxc-parser/binding-freebsd-x64": "0.71.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.71.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.71.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.71.0", + "@oxc-parser/binding-linux-arm64-musl": "0.71.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.71.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.71.0", + "@oxc-parser/binding-linux-x64-gnu": "0.71.0", + "@oxc-parser/binding-linux-x64-musl": "0.71.0", + "@oxc-parser/binding-wasm32-wasi": "0.71.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.71.0", + "@oxc-parser/binding-win32-x64-msvc": "0.71.0" + } + }, + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-wait-for": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", + "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "license": "MIT" + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parse-gitignore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", + "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "license": "MIT", + "dependencies": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.3.tgz", + "integrity": "sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.5.tgz", + "integrity": "sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz", + "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.5.tgz", + "integrity": "sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.3.tgz", + "integrity": "sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.3.tgz", + "integrity": "sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.3.tgz", + "integrity": "sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.2.tgz", + "integrity": "sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "license": "MPL-2.0", + "dependencies": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/precinct": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", + "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", + "license": "MIT", + "dependencies": { + "@dependents/detective-less": "^5.0.1", + "commander": "^12.1.0", + "detective-amd": "^6.0.1", + "detective-cjs": "^6.0.1", + "detective-es6": "^5.0.1", + "detective-postcss": "^7.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0", + "detective-vue2": "^2.2.0", + "module-definition": "^6.0.1", + "node-source-walk": "^7.0.1", + "postcss": "^8.5.1", + "typescript": "^5.7.3" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/precinct/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/reka-ui": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.3.0.tgz", + "integrity": "sha512-HKvJej9Sc0KYEvTAbsGHgOxpEWL4FWSR70Q6Ld+bVNuaCxK6LP3jyTtyTWS+A44hHA9/aYfOBZ1Q8WkgZsGZpA==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "@floating-ui/vue": "^1.1.6", + "@internationalized/date": "^3.5.0", + "@internationalized/number": "^3.5.0", + "@tanstack/vue-virtual": "^3.12.0", + "@vueuse/core": "^12.5.0", + "@vueuse/shared": "^12.5.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "ohash": "^2.0.11" + }, + "peerDependencies": { + "vue": ">= 3.2.0" + } + }, + "node_modules/reka-ui/node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/reka-ui/node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/reka-ui/node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", + "license": "MIT" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "license": "MIT", + "dependencies": { + "open": "^8.4.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-git": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", + "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "license": "CC0-1.0" + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "license": "MIT" + }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "license": "MIT" + }, + "node_modules/structured-clone-es": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/structured-clone-es/-/structured-clone-es-1.0.0.tgz", + "integrity": "sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==", + "license": "ISC" + }, + "node_modules/stylehacks": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.5.tgz", + "integrity": "sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", + "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-merge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", + "integrity": "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-1.0.0.tgz", + "integrity": "sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==", + "license": "MIT", + "dependencies": { + "tailwind-merge": "3.0.2" + }, + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwindcss": "*" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.8.tgz", + "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/terser": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz", + "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-level-regexp": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/type-level-regexp/-/type-level-regexp-0.1.17.tgz", + "integrity": "sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", + "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17", + "unplugin": "^2.1.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT", + "optional": true + }, + "node_modules/unenv": { + "version": "2.0.0-rc.17", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.17.tgz", + "integrity": "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "exsolve": "^1.0.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "ufo": "^1.6.1" + } + }, + "node_modules/unhead": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.0.10.tgz", + "integrity": "sha512-GT188rzTCeSKt55tYyQlHHKfUTtZvgubrXiwzGeXg6UjcKO3FsagaMzQp6TVDrpDY++3i7Qt0t3pnCc/ebg5yQ==", + "license": "MIT", + "dependencies": { + "hookable": "^5.5.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unifont": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.4.1.tgz", + "integrity": "sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0", + "ohash": "^2.0.0" + } + }, + "node_modules/unifont/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/unifont/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/unimport": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-5.0.1.tgz", + "integrity": "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.13", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "license": "MIT", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unplugin": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.5.tgz", + "integrity": "sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "picomatch": "^4.0.2", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-19.3.0.tgz", + "integrity": "sha512-iIi0u4Gq2uGkAOGqlPJOAMI8vocvjh1clGTfSK4SOrJKrt+tirrixo/FjgBwXQNNdS7ofcr7OxzmOb/RjWxeEQ==", + "license": "MIT", + "dependencies": { + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "picomatch": "^4.0.2", + "unimport": "^4.2.0", + "unplugin": "^2.3.4", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/unimport": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.2.0.tgz", + "integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.12", + "unplugin": "^2.2.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", + "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "28.7.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-28.7.0.tgz", + "integrity": "sha512-3SuWAHlTjOiZckqRBGXRdN/k6IMmKyt2Ch5/+DKwYaT321H0ItdZDvW4r8/YkEKQpN9TN3F/SZ0W342gQROC3Q==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.6.0", + "debug": "^4.4.1", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "tinyglobby": "^0.2.14", + "unplugin": "^2.3.4", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/unplugin-vue-components/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/unplugin-vue-components/node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unplugin-vue-components/node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/unplugin-vue-router": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.12.0.tgz", + "integrity": "sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.8", + "@vue-macros/common": "^1.16.1", + "ast-walker-scope": "^0.6.2", + "chokidar": "^4.0.3", + "fast-glob": "^3.3.3", + "json5": "^2.2.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "micromatch": "^4.0.8", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "scule": "^1.3.0", + "unplugin": "^2.2.0", + "unplugin-utils": "^0.2.3", + "yaml": "^2.7.0" + }, + "peerDependencies": { + "vue-router": "^4.4.0" + }, + "peerDependenciesMeta": { + "vue-router": { + "optional": true + } + } + }, + "node_modules/unstorage": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", + "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.2", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.6", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/untyped": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz", + "integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/unwasm": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.3.9.tgz", + "integrity": "sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==", + "license": "MIT", + "dependencies": { + "knitwork": "^1.0.0", + "magic-string": "^0.30.8", + "mlly": "^1.6.1", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "unplugin": "^1.10.0" + } + }, + "node_modules/unwasm/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/unwasm/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/unwasm/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/unwasm/node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/unwasm/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "license": "MIT" + }, + "node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vaul-vue": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/vaul-vue/-/vaul-vue-0.4.1.tgz", + "integrity": "sha512-A6jOWOZX5yvyo1qMn7IveoWN91mJI5L3BUKsIwkg6qrTGgHs1Sb1JF/vyLJgnbN1rH4OOOxFbtqL9A46bOyGUQ==", + "dependencies": { + "@vueuse/core": "^10.8.0", + "reka-ui": "^2.0.0", + "vue": "^3.4.5" + }, + "peerDependencies": { + "reka-ui": "^2.0.0", + "vue": "^3.3.0" + } + }, + "node_modules/vaul-vue/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/vaul-vue/node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-dev-rpc": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.0.7.tgz", + "integrity": "sha512-FxSTEofDbUi2XXujCA+hdzCDkXFG1PXktMjSk1efq9Qb5lOYaaM9zNSvKvPPF7645Bak79kSp1PTooMW2wktcA==", + "license": "MIT", + "dependencies": { + "birpc": "^2.0.19", + "vite-hot-client": "^2.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1" + } + }, + "node_modules/vite-hot-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.0.4.tgz", + "integrity": "sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.4.tgz", + "integrity": "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==", + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.9.3.tgz", + "integrity": "sha512-Tf7QBjeBtG7q11zG0lvoF38/2AVUzzhMNu+Wk+mcsJ00Rk/FpJ4rmUviVJpzWkagbU13cGXvKpt7CMiqtxVTbQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "chokidar": "^4.0.3", + "npm-run-path": "^6.0.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.2", + "strip-ansi": "^7.1.0", + "tiny-invariant": "^1.3.3", + "tinyglobby": "^0.2.13", + "vscode-uri": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "@biomejs/biome": ">=1.7", + "eslint": ">=7", + "meow": "^13.2.0", + "optionator": "^0.9.4", + "stylelint": ">=16", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "~2.2.10" + }, + "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.1.0.tgz", + "integrity": "sha512-r3Nx8xGQ08bSoNu7gJGfP5H/wNOROHtv0z3tWspplyHZJlABwNoPOdFEmcVh+lVMDyk/Be4yt8oS596ZHoYhOg==", + "license": "MIT", + "dependencies": { + "ansis": "^3.17.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.1.2", + "perfect-debounce": "^1.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.2.4", + "vite-dev-rpc": "^1.0.7" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-vue-tracer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-0.1.3.tgz", + "integrity": "sha512-+fN6oo0//dwZP9Ax9gRKeUroCqpQ43P57qlWgL0ljCIxAs+Rpqn/L4anIPZPgjDPga5dZH+ZJsshbF0PNJbm3Q==", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "exsolve": "^1.0.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "source-map-js": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0", + "vue": "^3.5.0" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz", + "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-sfc": "3.5.16", + "@vue/runtime-dom": "3.5.16", + "@vue/server-renderer": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-bundle-renderer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.1.1.tgz", + "integrity": "sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==", + "license": "MIT", + "dependencies": { + "ufo": "^1.5.4" + } + }, + "node_modules/vue-component-type-helpers": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.10.tgz", + "integrity": "sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==", + "license": "MIT" + }, + "node_modules/vue-devtools-stub": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", + "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wheel-gestures": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/wheel-gestures/-/wheel-gestures-2.2.48.tgz", + "integrity": "sha512-f+Gy33Oa5Z14XY9679Zze+7VFhbsQfBFXodnU2x589l4kxGM9L5Y8zETTmcMR5pWOPQyRv4Z0lNax6xCO0NSlA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", + "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yauzl/node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "4.1.0-beta.8", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.8.tgz", + "integrity": "sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.4", + "@poppinss/dumper": "^0.6.3", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/youch-core": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.2.tgz", + "integrity": "sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==", + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.0", + "error-stack-parser-es": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zod": { + "version": "3.25.42", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.42.tgz", + "integrity": "sha512-PcALTLskaucbeHc41tU/xfjfhcz8z0GdhhDcSgrCTmSazUuqnYqiXO63M0QUBVwpBlsLsNVn5qHSC5Dw3KZvaQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/TerraformRegistry/web-src/package.json b/TerraformRegistry/web-src/package.json new file mode 100644 index 0000000..8ac8a78 --- /dev/null +++ b/TerraformRegistry/web-src/package.json @@ -0,0 +1,26 @@ +{ + "name": "nuxt-app", + "private": true, + "type": "module", + "scripts": { + "build": "nuxt build", + "dev": "nuxt dev", + "generate": "nuxt generate", + "preview": "nuxt preview", + "postinstall": "nuxt prepare" + }, + "dependencies": { + "@nuxt/fonts": "^0.11.4", + "@nuxt/icon": "^1.13.0", + "@nuxt/ui": "^3.1.3", + "@vueuse/nuxt": "^12.0.0", + "nuxt": "^3.17.4", + "typescript": "^5.8.3", + "vue": "^3.5.15", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@iconify-json/lucide": "^1.2.0", + "@iconify-json/simple-icons": "^1.2.0" + } +} diff --git a/TerraformRegistry/web-src/pages/callback.vue b/TerraformRegistry/web-src/pages/callback.vue new file mode 100644 index 0000000..1636446 --- /dev/null +++ b/TerraformRegistry/web-src/pages/callback.vue @@ -0,0 +1,58 @@ + + + diff --git a/TerraformRegistry/web-src/pages/index.vue b/TerraformRegistry/web-src/pages/index.vue new file mode 100644 index 0000000..2a4f9ad --- /dev/null +++ b/TerraformRegistry/web-src/pages/index.vue @@ -0,0 +1,263 @@ + + + diff --git a/TerraformRegistry/web-src/pages/login.vue b/TerraformRegistry/web-src/pages/login.vue new file mode 100644 index 0000000..34d2fd7 --- /dev/null +++ b/TerraformRegistry/web-src/pages/login.vue @@ -0,0 +1,116 @@ + + + diff --git a/TerraformRegistry/web-src/pages/settings.vue b/TerraformRegistry/web-src/pages/settings.vue new file mode 100644 index 0000000..7fa138b --- /dev/null +++ b/TerraformRegistry/web-src/pages/settings.vue @@ -0,0 +1,561 @@ + + + diff --git a/TerraformRegistry/web-src/public/favicon.ico b/TerraformRegistry/web-src/public/favicon.ico new file mode 100644 index 0000000..18993ad Binary files /dev/null and b/TerraformRegistry/web-src/public/favicon.ico differ diff --git a/TerraformRegistry/web-src/public/robots.txt b/TerraformRegistry/web-src/public/robots.txt new file mode 100644 index 0000000..0ad279c --- /dev/null +++ b/TerraformRegistry/web-src/public/robots.txt @@ -0,0 +1,2 @@ +User-Agent: * +Disallow: diff --git a/TerraformRegistry/web-src/server/tsconfig.json b/TerraformRegistry/web-src/server/tsconfig.json new file mode 100644 index 0000000..b9ed69c --- /dev/null +++ b/TerraformRegistry/web-src/server/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../.nuxt/tsconfig.server.json" +} diff --git a/TerraformRegistry/web-src/tsconfig.json b/TerraformRegistry/web-src/tsconfig.json new file mode 100644 index 0000000..a746f2a --- /dev/null +++ b/TerraformRegistry/web-src/tsconfig.json @@ -0,0 +1,4 @@ +{ + // https://nuxt.com/docs/guide/concepts/typescript + "extends": "./.nuxt/tsconfig.json" +} diff --git a/TerraformRegistry/web/200.html b/TerraformRegistry/web/200.html new file mode 100644 index 0000000..d5aa770 --- /dev/null +++ b/TerraformRegistry/web/200.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/TerraformRegistry/web/404.html b/TerraformRegistry/web/404.html new file mode 100644 index 0000000..d5aa770 --- /dev/null +++ b/TerraformRegistry/web/404.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff new file mode 100644 index 0000000..d33ee75 Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff new file mode 100644 index 0000000..43f6dcf Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff new file mode 100644 index 0000000..b06e98c Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff new file mode 100644 index 0000000..7c83d4c Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff new file mode 100644 index 0000000..a45de2b Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff new file mode 100644 index 0000000..7c1d636 Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff new file mode 100644 index 0000000..d51d4a0 Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff differ diff --git a/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff new file mode 100644 index 0000000..52bdf5a Binary files /dev/null and b/TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff differ diff --git a/TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 b/TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 new file mode 100644 index 0000000..44f707a Binary files /dev/null and b/TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 differ diff --git a/TerraformRegistry/web/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 b/TerraformRegistry/web/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 new file mode 100644 index 0000000..e73a897 Binary files /dev/null and b/TerraformRegistry/web/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 differ diff --git a/TerraformRegistry/web/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 b/TerraformRegistry/web/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 new file mode 100644 index 0000000..6631ea4 Binary files /dev/null and b/TerraformRegistry/web/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 differ diff --git a/TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 b/TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 new file mode 100644 index 0000000..962a4bd Binary files /dev/null and b/TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 differ diff --git a/TerraformRegistry/web/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 b/TerraformRegistry/web/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 new file mode 100644 index 0000000..3f03477 Binary files /dev/null and b/TerraformRegistry/web/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 differ diff --git a/TerraformRegistry/web/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 b/TerraformRegistry/web/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 new file mode 100644 index 0000000..4928932 Binary files /dev/null and b/TerraformRegistry/web/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 differ diff --git a/TerraformRegistry/web/_nuxt/BB080qx0.js b/TerraformRegistry/web/_nuxt/BB080qx0.js new file mode 100644 index 0000000..e5ecda4 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/BB080qx0.js @@ -0,0 +1 @@ +import{aG as e,q as o,r,Z as t}from"./BnS3deBy.js";const u=()=>{const s=o(),a=r(!1);return t(()=>s.fullPath,()=>{a.value=!1}),{isSidebarOpen:a}},l=e(u);export{l as u}; diff --git a/TerraformRegistry/web/_nuxt/BRMY5sEW.js b/TerraformRegistry/web/_nuxt/BRMY5sEW.js new file mode 100644 index 0000000..ea5694f --- /dev/null +++ b/TerraformRegistry/web/_nuxt/BRMY5sEW.js @@ -0,0 +1 @@ +import{R as w,v as ie,S as ae,y as se,T as ne,U as le,V as te,g as F,z as M,r as re,h as oe,l as c,o as r,w as ue,a as ge,A as v,c as N,m as d,C as $,j as a,D as u,n as G,B as ce,P as de,W as pe}from"./BnS3deBy.js";const fe={slots:{root:"relative inline-flex items-center",base:["w-full rounded-md border-0 placeholder:text-dimmed focus:outline-none disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leading:"absolute inset-y-0 start-0 flex items-center",leadingIcon:"shrink-0 text-dimmed",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailing:"absolute inset-y-0 end-0 flex items-center",trailingIcon:"shrink-0 text-dimmed"},variants:{buttonGroup:{horizontal:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-e-none group-not-only:group-last:rounded-s-none group-not-last:group-not-first:rounded-none"},vertical:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-b-none group-not-only:group-last:rounded-t-none group-not-last:group-not-first:rounded-none"}},size:{xs:{base:"px-2 py-1 text-xs gap-1",leading:"ps-2",trailing:"pe-2",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},sm:{base:"px-2.5 py-1.5 text-xs gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},md:{base:"px-2.5 py-1.5 text-sm gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},lg:{base:"px-3 py-2 text-sm gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"px-3 py-2 text-base gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6"}},variant:{outline:"text-highlighted bg-default ring ring-inset ring-accented",soft:"text-highlighted bg-elevated/50 hover:bg-elevated focus:bg-elevated disabled:bg-elevated/50",subtle:"text-highlighted bg-elevated ring ring-inset ring-accented",ghost:"text-highlighted bg-transparent hover:bg-elevated focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent",none:"text-highlighted bg-transparent"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},leading:{true:""},trailing:{true:""},loading:{true:""},highlight:{true:""},type:{file:"file:me-1.5 file:font-medium file:text-muted file:outline-none"}},compoundVariants:[{color:"primary",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary"},{color:"secondary",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary"},{color:"success",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success"},{color:"info",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info"},{color:"warning",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning"},{color:"error",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error"},{color:"primary",highlight:!0,class:"ring ring-inset ring-primary"},{color:"secondary",highlight:!0,class:"ring ring-inset ring-secondary"},{color:"success",highlight:!0,class:"ring ring-inset ring-success"},{color:"info",highlight:!0,class:"ring ring-inset ring-info"},{color:"warning",highlight:!0,class:"ring ring-inset ring-warning"},{color:"error",highlight:!0,class:"ring ring-inset ring-error"},{color:"neutral",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-inverted"},{color:"neutral",highlight:!0,class:"ring ring-inset ring-inverted"},{leading:!0,size:"xs",class:"ps-7"},{leading:!0,size:"sm",class:"ps-8"},{leading:!0,size:"md",class:"ps-9"},{leading:!0,size:"lg",class:"ps-10"},{leading:!0,size:"xl",class:"ps-11"},{trailing:!0,size:"xs",class:"pe-7"},{trailing:!0,size:"sm",class:"pe-8"},{trailing:!0,size:"md",class:"pe-9"},{trailing:!0,size:"lg",class:"pe-10"},{trailing:!0,size:"xl",class:"pe-11"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}}],defaultVariants:{size:"md",color:"primary",variant:"outline"}},me=["id","type","value","name","placeholder","disabled","required","autocomplete"],be=Object.assign({inheritAttrs:!1},{__name:"Input",props:w({as:{type:null,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},type:{type:null,required:!1,default:"text"},placeholder:{type:String,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},autocomplete:{type:null,required:!1,default:"off"},autofocus:{type:Boolean,required:!1},autofocusDelay:{type:Number,required:!1,default:0},disabled:{type:Boolean,required:!1},highlight:{type:Boolean,required:!1},modelModifiers:{type:Object,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1},icon:{type:String,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:String,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:String,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:String,required:!1}},{modelValue:{type:null},modelModifiers:{}}),emits:w(["update:modelValue","blur","change"],["update:modelValue"]),setup(s,{expose:j,emit:T}){const i=s,b=T,g=ie(),[h,t]=ae(s,"modelValue"),D=se(),{emitFormBlur:O,emitFormInput:P,emitFormChange:R,size:E,color:L,id:U,name:W,highlight:H,disabled:J,emitFormFocus:y,ariaAttrs:K}=ne(i,{}),{orientation:Q,size:X}=le(i),{isLeading:p,isTrailing:z,leadingIconName:x,trailingIconName:q}=te(i),f=F(()=>X.value||E.value),n=F(()=>{var e;return M({extend:M(fe),...((e=D.ui)==null?void 0:e.input)||{}})({type:i.type,color:L.value,variant:i.variant,size:f==null?void 0:f.value,loading:i.loading,highlight:H.value,leading:p.value||!!i.avatar||!!g.leading,trailing:z.value||!!g.trailing,buttonGroup:Q.value})}),m=re(null);function I(e){t.trim&&(e=(e==null?void 0:e.trim())??null),(t.number||i.type==="number")&&(e=pe(e)),t.nullify&&(e||(e=null)),h.value=e,P()}function Y(e){t.lazy||I(e.target.value)}function Z(e){const o=e.target.value;t.lazy&&I(o),t.trim&&(e.target.value=o.trim()),R(),b("change",e)}function _(e){O(),b("blur",e)}function ee(){var e;i.autofocus&&((e=m.value)==null||e.focus())}return oe(()=>{setTimeout(()=>{ee()},i.autofocusDelay)}),j({inputRef:m}),(e,o)=>{var S;return r(),c(a(de),{as:s.as,class:u(n.value.root({class:[(S=i.ui)==null?void 0:S.root,i.class]}))},{default:ue(()=>{var B,A,k;return[ge("input",$({id:a(U),ref_key:"inputRef",ref:m,type:s.type,value:a(h),name:a(W),placeholder:s.placeholder,class:n.value.base({class:(B=i.ui)==null?void 0:B.base}),disabled:a(J),required:s.required,autocomplete:s.autocomplete},{...e.$attrs,...a(K)},{onInput:Y,onBlur:_,onChange:Z,onFocus:o[0]||(o[0]=(...l)=>a(y)&&a(y)(...l))}),null,16,me),v(e.$slots,"default"),a(p)||s.avatar||g.leading?(r(),N("span",{key:0,class:u(n.value.leading({class:(A=i.ui)==null?void 0:A.leading}))},[v(e.$slots,"leading",{},()=>{var l,C,V;return[a(p)&&a(x)?(r(),c(G,{key:0,name:a(x),class:u(n.value.leadingIcon({class:(l=i.ui)==null?void 0:l.leadingIcon}))},null,8,["name","class"])):s.avatar?(r(),c(ce,$({key:1,size:((C=i.ui)==null?void 0:C.leadingAvatarSize)||n.value.leadingAvatarSize()},s.avatar,{class:n.value.leadingAvatar({class:(V=i.ui)==null?void 0:V.leadingAvatar})}),null,16,["size","class"])):d("",!0)]})],2)):d("",!0),a(z)||g.trailing?(r(),N("span",{key:1,class:u(n.value.trailing({class:(k=i.ui)==null?void 0:k.trailing}))},[v(e.$slots,"trailing",{},()=>{var l;return[a(q)?(r(),c(G,{key:0,name:a(q),class:u(n.value.trailingIcon({class:(l=i.ui)==null?void 0:l.trailingIcon}))},null,8,["name","class"])):d("",!0)]})],2)):d("",!0)]}),_:3},8,["as","class"])}}});export{be as _}; diff --git a/TerraformRegistry/web/_nuxt/BnS3deBy.js b/TerraformRegistry/web/_nuxt/BnS3deBy.js new file mode 100644 index 0000000..44b1196 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/BnS3deBy.js @@ -0,0 +1,46 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./D-iuHiwX.js","./BRMY5sEW.js","./DcGCRxN2.js","./DzDAta3s.js","./C0rx7CO6.js","./BB080qx0.js","./D5zdv4Fl.js","./D2SsjiDy.js","./DsdUjOsK.js","./ChEe6xeu.js","./YGikTPtL.js","./DlAUqK2U.js","./error-404.4oxyXxx0.css","./D6LYtxie.js","./error-500.CZqNkBuR.css"])))=>i.map(i=>d[i]); +var xh=Object.defineProperty;var Ol=e=>{throw TypeError(e)};var Eh=(e,t,n)=>t in e?xh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var dn=(e,t,n)=>Eh(e,typeof t!="symbol"?t+"":t,n),Sh=(e,t,n)=>t.has(e)||Ol("Cannot "+n);var Ir=(e,t,n)=>(Sh(e,t,"read from private field"),n?n.call(e):t.get(e)),Rl=(e,t,n)=>t.has(e)?Ol("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();/** +* @vue/shared v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ns(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const pe={},lr=[],_t=()=>{},Ch=()=>!1,mo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Na=e=>e.startsWith("onUpdate:"),Ae=Object.assign,La=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Th=Object.prototype.hasOwnProperty,ye=(e,t)=>Th.call(e,t),X=Array.isArray,cr=e=>Er(e)==="[object Map]",Jn=e=>Er(e)==="[object Set]",Il=e=>Er(e)==="[object Date]",Ph=e=>Er(e)==="[object RegExp]",ae=e=>typeof e=="function",Me=e=>typeof e=="string",Mt=e=>typeof e=="symbol",Ce=e=>e!==null&&typeof e=="object",ja=e=>(Ce(e)||ae(e))&&ae(e.then)&&ae(e.catch),Vu=Object.prototype.toString,Er=e=>Vu.call(e),Ah=e=>Er(e).slice(8,-1),Ls=e=>Er(e)==="[object Object]",Da=e=>Me(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ur=Ns(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),js=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Oh=/-(\w)/g,We=js(e=>e.replace(Oh,(t,n)=>n?n.toUpperCase():"")),Rh=/\B([A-Z])/g,dt=js(e=>e.replace(Rh,"-$1").toLowerCase()),Ds=js(e=>e.charAt(0).toUpperCase()+e.slice(1)),zr=js(e=>e?`on${Ds(e)}`:""),st=(e,t)=>!Object.is(e,t),fr=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ss=e=>{const t=parseFloat(e);return isNaN(t)?e:t},is=e=>{const t=Me(e)?Number(e):NaN;return isNaN(t)?e:t};let Ml;const Fs=()=>Ml||(Ml=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),Ih="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol",Mh=Ns(Ih);function cn(e){if(X(e)){const t={};for(let n=0;n{if(n){const r=n.split(Nh);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ke(e){let t="";if(Me(e))t=e;else if(X(e))for(let n=0;nEn(n,t))}const Ku=e=>!!(e&&e.__v_isRef===!0),qn=e=>Me(e)?e:e==null?"":X(e)||Ce(e)&&(e.toString===Vu||!ae(e.toString))?Ku(e)?qn(e.value):JSON.stringify(e,Wu,2):String(e),Wu=(e,t)=>Ku(t)?Wu(e,t.value):cr(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],s)=>(n[ii(r,s)+" =>"]=o,n),{})}:Jn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ii(n))}:Mt(t)?ii(t):Ce(t)&&!X(t)&&!Ls(t)?String(t):t,ii=(e,t="")=>{var n;return Mt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ye;class Gu{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Ye,!t&&Ye&&(this.index=(Ye.scopes||(Ye.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Ye=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(Wr){let t=Wr;for(Wr=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Kr;){let t=Kr;for(Kr=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Qu(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Xu(e){let t,n=e.depsTail,r=n;for(;r;){const o=r.prevDep;r.version===-1?(r===n&&(n=o),Ba(r),Bh(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function $i(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Zu(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Zu(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===to)||(e.globalVersion=to,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$i(e))))return;e.flags|=2;const t=e.dep,n=Re,r=It;Re=e,It=!0;try{Qu(e);const o=e.fn(e._value);(t.version===0||st(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{Re=n,It=r,Xu(e),e.flags&=-3}}function Ba(e,t=!1){const{dep:n,prevSub:r,nextSub:o}=e;if(r&&(r.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)Ba(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Bh(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function gE(e,t){e.effect instanceof as&&(e=e.effect.fn);const n=new as(e);t&&Ae(n,t);try{n.run()}catch(o){throw n.stop(),o}const r=n.run.bind(n);return r.effect=n,r}function mE(e){e.effect.stop()}let It=!0;const ef=[];function on(){ef.push(It),It=!1}function sn(){const e=ef.pop();It=e===void 0?!0:e}function $l(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Re;Re=void 0;try{t()}finally{Re=n}}}let to=0;class Uh{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Us{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!Re||!It||Re===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Re)n=this.activeLink=new Uh(Re,this),Re.deps?(n.prevDep=Re.depsTail,Re.depsTail.nextDep=n,Re.depsTail=n):Re.deps=Re.depsTail=n,tf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Re.depsTail,n.nextDep=void 0,Re.depsTail.nextDep=n,Re.depsTail=n,Re.deps===n&&(Re.deps=r)}return n}trigger(t){this.version++,to++,this.notify(t)}notify(t){Fa();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ha()}}}function tf(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)tf(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ls=new WeakMap,Dn=Symbol(""),Ni=Symbol(""),no=Symbol("");function Qe(e,t,n){if(It&&Re){let r=ls.get(e);r||ls.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new Us),o.map=r,o.key=n),o.track()}}function Zt(e,t,n,r,o,s){const i=ls.get(e);if(!i){to++;return}const a=l=>{l&&l.trigger()};if(Fa(),t==="clear")i.forEach(a);else{const l=X(e),u=l&&Da(n);if(l&&n==="length"){const c=Number(r);i.forEach((f,d)=>{(d==="length"||d===no||!Mt(d)&&d>=c)&&a(f)})}else switch((n!==void 0||i.has(void 0))&&a(i.get(n)),u&&a(i.get(no)),t){case"add":l?u&&a(i.get("length")):(a(i.get(Dn)),cr(e)&&a(i.get(Ni)));break;case"delete":l||(a(i.get(Dn)),cr(e)&&a(i.get(Ni)));break;case"set":cr(e)&&a(i.get(Dn));break}}Ha()}function Vh(e,t){const n=ls.get(e);return n&&n.get(t)}function tr(e){const t=me(e);return t===e?t:(Qe(t,"iterate",no),kt(e)?t:t.map(Ge))}function Vs(e){return Qe(e=me(e),"iterate",no),e}const qh={__proto__:null,[Symbol.iterator](){return li(this,Symbol.iterator,Ge)},concat(...e){return tr(this).concat(...e.map(t=>X(t)?tr(t):t))},entries(){return li(this,"entries",e=>(e[1]=Ge(e[1]),e))},every(e,t){return Gt(this,"every",e,t,void 0,arguments)},filter(e,t){return Gt(this,"filter",e,t,n=>n.map(Ge),arguments)},find(e,t){return Gt(this,"find",e,t,Ge,arguments)},findIndex(e,t){return Gt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Gt(this,"findLast",e,t,Ge,arguments)},findLastIndex(e,t){return Gt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Gt(this,"forEach",e,t,void 0,arguments)},includes(...e){return ci(this,"includes",e)},indexOf(...e){return ci(this,"indexOf",e)},join(e){return tr(this).join(e)},lastIndexOf(...e){return ci(this,"lastIndexOf",e)},map(e,t){return Gt(this,"map",e,t,void 0,arguments)},pop(){return Mr(this,"pop")},push(...e){return Mr(this,"push",e)},reduce(e,...t){return Nl(this,"reduce",e,t)},reduceRight(e,...t){return Nl(this,"reduceRight",e,t)},shift(){return Mr(this,"shift")},some(e,t){return Gt(this,"some",e,t,void 0,arguments)},splice(...e){return Mr(this,"splice",e)},toReversed(){return tr(this).toReversed()},toSorted(e){return tr(this).toSorted(e)},toSpliced(...e){return tr(this).toSpliced(...e)},unshift(...e){return Mr(this,"unshift",e)},values(){return li(this,"values",Ge)}};function li(e,t,n){const r=Vs(e),o=r[t]();return r!==e&&!kt(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.value&&(s.value=n(s.value)),s}),o}const zh=Array.prototype;function Gt(e,t,n,r,o,s){const i=Vs(e),a=i!==e&&!kt(e),l=i[t];if(l!==zh[t]){const f=l.apply(e,s);return a?Ge(f):f}let u=n;i!==e&&(a?u=function(f,d){return n.call(this,Ge(f),d,e)}:n.length>2&&(u=function(f,d){return n.call(this,f,d,e)}));const c=l.call(i,u,r);return a&&o?o(c):c}function Nl(e,t,n,r){const o=Vs(e);let s=n;return o!==e&&(kt(e)?n.length>3&&(s=function(i,a,l){return n.call(this,i,a,l,e)}):s=function(i,a,l){return n.call(this,i,Ge(a),l,e)}),o[t](s,...r)}function ci(e,t,n){const r=me(e);Qe(r,"iterate",no);const o=r[t](...n);return(o===-1||o===!1)&&Ua(n[0])?(n[0]=me(n[0]),r[t](...n)):o}function Mr(e,t,n=[]){on(),Fa();const r=me(e)[t].apply(e,n);return Ha(),sn(),r}const Kh=Ns("__proto__,__v_isRef,__isVue"),nf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Mt));function Wh(e){Mt(e)||(e=String(e));const t=me(this);return Qe(t,"has",e),t.hasOwnProperty(e)}class rf{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return s;if(n==="__v_raw")return r===(o?s?uf:cf:s?lf:af).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=X(t);if(!o){let l;if(i&&(l=qh[n]))return l;if(n==="hasOwnProperty")return Wh}const a=Reflect.get(t,n,Pe(t)?t:r);return(Mt(n)?nf.has(n):Kh(n))||(o||Qe(t,"get",n),s)?a:Pe(a)?i&&Da(n)?a:a.value:Ce(a)?o?bt(a):et(a):a}}class of extends rf{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];if(!this._isShallow){const l=an(s);if(!kt(r)&&!an(r)&&(s=me(s),r=me(r)),!X(t)&&Pe(s)&&!Pe(r))return l?!1:(s.value=r,!0)}const i=X(t)&&Da(n)?Number(n)e,To=e=>Reflect.getPrototypeOf(e);function Xh(e,t,n){return function(...r){const o=this.__v_raw,s=me(o),i=cr(s),a=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,u=o[e](...r),c=n?Li:t?cs:Ge;return!t&&Qe(s,"iterate",l?Ni:Dn),{next(){const{value:f,done:d}=u.next();return d?{value:f,done:d}:{value:a?[c(f[0]),c(f[1])]:c(f),done:d}},[Symbol.iterator](){return this}}}}function Po(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Zh(e,t){const n={get(o){const s=this.__v_raw,i=me(s),a=me(o);e||(st(o,a)&&Qe(i,"get",o),Qe(i,"get",a));const{has:l}=To(i),u=t?Li:e?cs:Ge;if(l.call(i,o))return u(s.get(o));if(l.call(i,a))return u(s.get(a));s!==i&&s.get(o)},get size(){const o=this.__v_raw;return!e&&Qe(me(o),"iterate",Dn),Reflect.get(o,"size",o)},has(o){const s=this.__v_raw,i=me(s),a=me(o);return e||(st(o,a)&&Qe(i,"has",o),Qe(i,"has",a)),o===a?s.has(o):s.has(o)||s.has(a)},forEach(o,s){const i=this,a=i.__v_raw,l=me(a),u=t?Li:e?cs:Ge;return!e&&Qe(l,"iterate",Dn),a.forEach((c,f)=>o.call(s,u(c),u(f),i))}};return Ae(n,e?{add:Po("add"),set:Po("set"),delete:Po("delete"),clear:Po("clear")}:{add(o){!t&&!kt(o)&&!an(o)&&(o=me(o));const s=me(this);return To(s).has.call(s,o)||(s.add(o),Zt(s,"add",o,o)),this},set(o,s){!t&&!kt(s)&&!an(s)&&(s=me(s));const i=me(this),{has:a,get:l}=To(i);let u=a.call(i,o);u||(o=me(o),u=a.call(i,o));const c=l.call(i,o);return i.set(o,s),u?st(s,c)&&Zt(i,"set",o,s):Zt(i,"add",o,s),this},delete(o){const s=me(this),{has:i,get:a}=To(s);let l=i.call(s,o);l||(o=me(o),l=i.call(s,o)),a&&a.call(s,o);const u=s.delete(o);return l&&Zt(s,"delete",o,void 0),u},clear(){const o=me(this),s=o.size!==0,i=o.clear();return s&&Zt(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=Xh(o,e,t)}),n}function qs(e,t){const n=Zh(e,t);return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ye(n,o)&&o in r?n:r,o,s)}const eg={get:qs(!1,!1)},tg={get:qs(!1,!0)},ng={get:qs(!0,!1)},rg={get:qs(!0,!0)},af=new WeakMap,lf=new WeakMap,cf=new WeakMap,uf=new WeakMap;function og(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function sg(e){return e.__v_skip||!Object.isExtensible(e)?0:og(Ah(e))}function et(e){return an(e)?e:zs(e,!1,Gh,eg,af)}function Ot(e){return zs(e,!1,Yh,tg,lf)}function bt(e){return zs(e,!0,Jh,ng,cf)}function yE(e){return zs(e,!0,Qh,rg,uf)}function zs(e,t,n,r,o){if(!Ce(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=sg(e);if(s===0)return e;const i=o.get(e);if(i)return i;const a=new Proxy(e,s===2?r:n);return o.set(e,a),a}function Fn(e){return an(e)?Fn(e.__v_raw):!!(e&&e.__v_isReactive)}function an(e){return!!(e&&e.__v_isReadonly)}function kt(e){return!!(e&&e.__v_isShallow)}function Ua(e){return e?!!e.__v_raw:!1}function me(e){const t=e&&e.__v_raw;return t?me(t):e}function Va(e){return!ye(e,"__v_skip")&&Object.isExtensible(e)&&qu(e,"__v_skip",!0),e}const Ge=e=>Ce(e)?et(e):e,cs=e=>Ce(e)?bt(e):e;function Pe(e){return e?e.__v_isRef===!0:!1}function se(e){return ff(e,!1)}function Ze(e){return ff(e,!0)}function ff(e,t){return Pe(e)?e:new ig(e,t)}class ig{constructor(t,n){this.dep=new Us,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:me(t),this._value=n?t:Ge(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||kt(t)||an(t);t=r?t:me(t),st(t,n)&&(this._rawValue=t,this._value=r?t:Ge(t),this.dep.trigger())}}function bE(e){e.dep&&e.dep.trigger()}function A(e){return Pe(e)?e.value:e}function Le(e){return ae(e)?e():A(e)}const ag={get:(e,t,n)=>t==="__v_raw"?e:A(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Pe(o)&&!Pe(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function df(e){return Fn(e)?e:new Proxy(e,ag)}class lg{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Us,{get:r,set:o}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=o}get value(){return this._value=this._get()}set value(t){this._set(t)}}function yo(e){return new lg(e)}function $t(e){const t=X(e)?new Array(e.length):{};for(const n in e)t[n]=pf(e,n);return t}class cg{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Vh(me(this._object),this._key)}}class ug{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Rt(e,t,n){return Pe(e)?e:ae(e)?new ug(e):Ce(e)&&arguments.length>1?pf(e,t,n):se(e)}function pf(e,t,n){const r=e[t];return Pe(r)?r:new cg(e,t,n)}class fg{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Us(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=to-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Re!==this)return Yu(this,!0),!0}get value(){const t=this.dep.track();return Zu(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function dg(e,t,n=!1){let r,o;return ae(e)?r=e:(r=e.get,o=e.set),new fg(r,o,n)}const vE={GET:"get",HAS:"has",ITERATE:"iterate"},wE={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},Ao={},us=new WeakMap;let mn;function _E(){return mn}function pg(e,t=!1,n=mn){if(n){let r=us.get(n);r||us.set(n,r=[]),r.push(e)}}function hg(e,t,n=pe){const{immediate:r,deep:o,once:s,scheduler:i,augmentJob:a,call:l}=n,u=b=>o?b:kt(b)||o===!1||o===0?en(b,1):en(b);let c,f,d,p,g=!1,h=!1;if(Pe(e)?(f=()=>e.value,g=kt(e)):Fn(e)?(f=()=>u(e),g=!0):X(e)?(h=!0,g=e.some(b=>Fn(b)||kt(b)),f=()=>e.map(b=>{if(Pe(b))return b.value;if(Fn(b))return u(b);if(ae(b))return l?l(b,2):b()})):ae(e)?t?f=l?()=>l(e,2):e:f=()=>{if(d){on();try{d()}finally{sn()}}const b=mn;mn=c;try{return l?l(e,3,[p]):e(p)}finally{mn=b}}:f=_t,t&&o){const b=f,_=o===!0?1/0:o;f=()=>en(b(),_)}const y=Yn(),k=()=>{c.stop(),y&&y.active&&La(y.effects,c)};if(s&&t){const b=t;t=(..._)=>{b(..._),k()}}let v=h?new Array(e.length).fill(Ao):Ao;const m=b=>{if(!(!(c.flags&1)||!c.dirty&&!b))if(t){const _=c.run();if(o||g||(h?_.some((x,S)=>st(x,v[S])):st(_,v))){d&&d();const x=mn;mn=c;try{const S=[_,v===Ao?void 0:h&&v[0]===Ao?[]:v,p];v=_,l?l(t,3,S):t(...S)}finally{mn=x}}}else c.run()};return a&&a(m),c=new as(f),c.scheduler=i?()=>i(m,!1):m,p=b=>pg(b,!1,c),d=c.onStop=()=>{const b=us.get(c);if(b){if(l)l(b,4);else for(const _ of b)_();us.delete(c)}},t?r?m(!0):v=c.run():i?i(m.bind(null,!0),!0):c.run(),k.pause=c.pause.bind(c),k.resume=c.resume.bind(c),k.stop=k,k}function en(e,t=1/0,n){if(t<=0||!Ce(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,Pe(e))en(e.value,t,n);else if(X(e))for(let r=0;r{en(r,t,n)});else if(Ls(e)){for(const r in e)en(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&en(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const hf=[];function gg(e){hf.push(e)}function mg(){hf.pop()}function kE(e,t){}const xE={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},yg={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function bo(e,t,n,r){try{return r?e(...r):e()}catch(o){Sr(o,t,n)}}function Nt(e,t,n,r){if(ae(e)){const o=bo(e,t,n,r);return o&&ja(o)&&o.catch(s=>{Sr(s,t,n)}),o}if(X(e)){const o=[];for(let s=0;s>>1,o=it[r],s=ro(o);s=ro(n)?it.push(e):it.splice(vg(t),0,e),e.flags|=1,mf()}}function mf(){fs||(fs=gf.then(yf))}function ds(e){X(e)?dr.push(...e):yn&&e.id===-1?yn.splice(or+1,0,e):e.flags&1||(dr.push(e),e.flags|=1),mf()}function Ll(e,t,n=Ut+1){for(;nro(n)-ro(r));if(dr.length=0,yn){yn.push(...t);return}for(yn=t,or=0;ore.id==null?e.flags&2?-1:1/0:e.id;function yf(e){try{for(Ut=0;Utsr.emit(o,...s)),Oo=[]):typeof window<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(s=>{bf(s,t)}),setTimeout(()=>{sr||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Oo=[])},3e3)):Oo=[]}let qe=null,Ks=null;function oo(e){const t=qe;return qe=e,Ks=e&&e.type.__scopeId||null,t}function EE(e){Ks=e}function SE(){Ks=null}const CE=e=>ce;function ce(e,t=qe,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Ql(-1);const s=oo(t);let i;try{i=e(...o)}finally{oo(s),r._d&&Ql(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function TE(e,t){if(qe===null)return e;const n=_o(qe),r=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,Gr=e=>e&&(e.disabled||e.disabled===""),jl=e=>e&&(e.defer||e.defer===""),Dl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Fl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ji=(e,t)=>{const n=e&&e.to;return Me(n)?t?t(n):null:n},_f={name:"Teleport",__isTeleport:!0,process(e,t,n,r,o,s,i,a,l,u){const{mc:c,pc:f,pbc:d,o:{insert:p,querySelector:g,createText:h,createComment:y}}=u,k=Gr(t.props);let{shapeFlag:v,children:m,dynamicChildren:b}=t;if(e==null){const _=t.el=h(""),x=t.anchor=h("");p(_,n,r),p(x,n,r);const S=(O,P)=>{v&16&&(o&&o.isCE&&(o.ce._teleportTarget=O),c(m,O,P,o,s,i,a,l))},N=()=>{const O=t.target=ji(t.props,g),P=xf(O,t,h,p);O&&(i!=="svg"&&Dl(O)?i="svg":i!=="mathml"&&Fl(O)&&(i="mathml"),k||(S(O,P),Jo(t,!1)))};k&&(S(n,x),Jo(t,!0)),jl(t.props)?(t.el.__isMounted=!1,Be(()=>{N(),delete t.el.__isMounted},s)):N()}else{if(jl(t.props)&&e.el.__isMounted===!1){Be(()=>{_f.process(e,t,n,r,o,s,i,a,l,u)},s);return}t.el=e.el,t.targetStart=e.targetStart;const _=t.anchor=e.anchor,x=t.target=e.target,S=t.targetAnchor=e.targetAnchor,N=Gr(e.props),O=N?n:x,P=N?_:S;if(i==="svg"||Dl(x)?i="svg":(i==="mathml"||Fl(x))&&(i="mathml"),b?(d(e.dynamicChildren,b,O,o,s,i,a),el(e,t,!0)):l||f(e,t,O,P,o,s,i,a,!1),k)N?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ro(t,n,_,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const q=t.target=ji(t.props,g);q&&Ro(t,q,null,u,0)}else N&&Ro(t,x,S,u,1);Jo(t,k)}},remove(e,t,n,{um:r,o:{remove:o}},s){const{shapeFlag:i,children:a,anchor:l,targetStart:u,targetAnchor:c,target:f,props:d}=e;if(f&&(o(u),o(c)),s&&o(l),i&16){const p=s||!Gr(d);for(let g=0;g{e.isMounted=!0}),Qn(()=>{e.isUnmounting=!0}),e}const vt=[Function,Array],Sf={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:vt,onEnter:vt,onAfterEnter:vt,onEnterCancelled:vt,onBeforeLeave:vt,onLeave:vt,onAfterLeave:vt,onLeaveCancelled:vt,onBeforeAppear:vt,onAppear:vt,onAfterAppear:vt,onAppearCancelled:vt},Cf=e=>{const t=e.subTree;return t.component?Cf(t.component):t},_g={name:"BaseTransition",props:Sf,setup(e,{slots:t}){const n=Fe(),r=Ef();return()=>{const o=t.default&&za(t.default(),!0);if(!o||!o.length)return;const s=Tf(o),i=me(e),{mode:a}=i;if(r.isLeaving)return ui(s);const l=Hl(s);if(!l)return ui(s);let u=so(l,i,r,n,f=>u=f);l.type!==je&&Sn(l,u);let c=n.subTree&&Hl(n.subTree);if(c&&c.type!==je&&!At(l,c)&&Cf(n).type!==je){let f=so(c,i,r,n);if(Sn(c,f),a==="out-in"&&l.type!==je)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},ui(s);a==="in-out"&&l.type!==je?f.delayLeave=(d,p,g)=>{const h=Pf(r,c);h[String(c.key)]=c,d[bn]=()=>{p(),d[bn]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{g(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return s}}};function Tf(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==je){t=n;break}}return t}const kg=_g;function Pf(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function so(e,t,n,r,o){const{appear:s,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:d,onLeave:p,onAfterLeave:g,onLeaveCancelled:h,onBeforeAppear:y,onAppear:k,onAfterAppear:v,onAppearCancelled:m}=t,b=String(e.key),_=Pf(n,e),x=(O,P)=>{O&&Nt(O,r,9,P)},S=(O,P)=>{const q=P[1];x(O,P),X(O)?O.every(T=>T.length<=1)&&q():O.length<=1&&q()},N={mode:i,persisted:a,beforeEnter(O){let P=l;if(!n.isMounted)if(s)P=y||l;else return;O[bn]&&O[bn](!0);const q=_[b];q&&At(e,q)&&q.el[bn]&&q.el[bn](),x(P,[O])},enter(O){let P=u,q=c,T=f;if(!n.isMounted)if(s)P=k||u,q=v||c,T=m||f;else return;let $=!1;const B=O[Io]=W=>{$||($=!0,W?x(T,[O]):x(q,[O]),N.delayedLeave&&N.delayedLeave(),O[Io]=void 0)};P?S(P,[O,B]):B()},leave(O,P){const q=String(e.key);if(O[Io]&&O[Io](!0),n.isUnmounting)return P();x(d,[O]);let T=!1;const $=O[bn]=B=>{T||(T=!0,P(),B?x(h,[O]):x(g,[O]),O[bn]=void 0,_[q]===e&&delete _[q])};_[q]=e,p?S(p,[O,$]):$()},clone(O){const P=so(O,t,n,r,o);return o&&o(P),P}};return N}function ui(e){if(vo(e))return e=zt(e),e.children=null,e}function Hl(e){if(!vo(e))return wf(e.type)&&e.children?Tf(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ae(n.default))return n.default()}}function Sn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Sn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function za(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sn.value,set:s=>n.value=s})}return n}function io(e,t,n,r,o=!1){if(X(e)){e.forEach((g,h)=>io(g,t&&(X(t)?t[h]:t),n,r,o));return}if(xn(r)&&!o){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&io(e,t,n,r.component.subTree);return}const s=r.shapeFlag&4?_o(r.component):r.el,i=o?null:s,{i:a,r:l}=e,u=t&&t.r,c=a.refs===pe?a.refs={}:a.refs,f=a.setupState,d=me(f),p=f===pe?()=>!1:g=>ye(d,g);if(u!=null&&u!==l&&(Me(u)?(c[u]=null,p(u)&&(f[u]=null)):Pe(u)&&(u.value=null)),ae(l))bo(l,a,12,[i,c]);else{const g=Me(l),h=Pe(l);if(g||h){const y=()=>{if(e.f){const k=g?p(l)?f[l]:c[l]:l.value;o?X(k)&&La(k,s):X(k)?k.includes(s)||k.push(s):g?(c[l]=[s],p(l)&&(f[l]=c[l])):(l.value=[s],e.k&&(c[e.k]=l.value))}else g?(c[l]=i,p(l)&&(f[l]=i)):h&&(l.value=i,e.k&&(c[e.k]=i))};i?(y.id=-1,Be(y,n)):y()}}}let Bl=!1;const nr=()=>{Bl||(console.error("Hydration completed but contains mismatches."),Bl=!0)},Eg=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Sg=e=>e.namespaceURI.includes("MathML"),Mo=e=>{if(e.nodeType===1){if(Eg(e))return"svg";if(Sg(e))return"mathml"}},ar=e=>e.nodeType===8;function Cg(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:a,insert:l,createComment:u}}=e,c=(m,b)=>{if(!b.hasChildNodes()){n(null,m,b),ps(),b._vnode=m;return}f(b.firstChild,m,null,null,null),ps(),b._vnode=m},f=(m,b,_,x,S,N=!1)=>{N=N||!!b.dynamicChildren;const O=ar(m)&&m.data==="[",P=()=>h(m,b,_,x,S,O),{type:q,ref:T,shapeFlag:$,patchFlag:B}=b;let W=m.nodeType;b.el=m,B===-2&&(N=!1,b.dynamicChildren=null);let R=null;switch(q){case Bn:W!==3?b.children===""?(l(b.el=o(""),i(m),m),R=m):R=P():(m.data!==b.children&&(nr(),m.data=b.children),R=s(m));break;case je:v(m)?(R=s(m),k(b.el=m.content.firstChild,m,_)):W!==8||O?R=P():R=s(m);break;case hr:if(O&&(m=s(m),W=m.nodeType),W===1||W===3){R=m;const z=!b.children.length;for(let L=0;L{N=N||!!b.dynamicChildren;const{type:O,props:P,patchFlag:q,shapeFlag:T,dirs:$,transition:B}=b,W=O==="input"||O==="option";if(W||q!==-1){$&&Vt(b,null,_,"created");let R=!1;if(v(m)){R=Gf(null,B)&&_&&_.vnode.props&&_.vnode.props.appear;const L=m.content.firstChild;if(R){const oe=L.getAttribute("class");oe&&(L.$cls=oe),B.beforeEnter(L)}k(L,m,_),b.el=m=L}if(T&16&&!(P&&(P.innerHTML||P.textContent))){let L=p(m.firstChild,b,m,_,x,S,N);for(;L;){$o(m,1)||nr();const oe=L;L=L.nextSibling,a(oe)}}else if(T&8){let L=b.children;L[0]===` +`&&(m.tagName==="PRE"||m.tagName==="TEXTAREA")&&(L=L.slice(1)),m.textContent!==L&&($o(m,0)||nr(),m.textContent=b.children)}if(P){if(W||!N||q&48){const L=m.tagName.includes("-");for(const oe in P)(W&&(oe.endsWith("value")||oe==="indeterminate")||mo(oe)&&!ur(oe)||oe[0]==="."||L)&&r(m,oe,null,P[oe],void 0,_)}else if(P.onClick)r(m,"onClick",null,P.onClick,void 0,_);else if(q&4&&Fn(P.style))for(const L in P.style)P.style[L]}let z;(z=P&&P.onVnodeBeforeMount)&&ut(z,_,b),$&&Vt(b,null,_,"beforeMount"),((z=P&&P.onVnodeMounted)||$||R)&&ed(()=>{z&&ut(z,_,b),R&&B.enter(m),$&&Vt(b,null,_,"mounted")},x)}return m.nextSibling},p=(m,b,_,x,S,N,O)=>{O=O||!!b.dynamicChildren;const P=b.children,q=P.length;for(let T=0;T{const{slotScopeIds:O}=b;O&&(S=S?S.concat(O):O);const P=i(m),q=p(s(m),b,P,_,x,S,N);return q&&ar(q)&&q.data==="]"?s(b.anchor=q):(nr(),l(b.anchor=u("]"),P,q),q)},h=(m,b,_,x,S,N)=>{if($o(m.parentElement,1)||nr(),b.el=null,N){const q=y(m);for(;;){const T=s(m);if(T&&T!==q)a(T);else break}}const O=s(m),P=i(m);return a(m),n(null,b,P,O,_,x,Mo(P),S),_&&(_.vnode.el=b.el,Ys(_,b.el)),O},y=(m,b="[",_="]")=>{let x=0;for(;m;)if(m=s(m),m&&ar(m)&&(m.data===b&&x++,m.data===_)){if(x===0)return s(m);x--}return m},k=(m,b,_)=>{const x=b.parentNode;x&&x.replaceChild(m,b);let S=_;for(;S;)S.vnode.el===b&&(S.vnode.el=S.subTree.el=m),S=S.parent},v=m=>m.nodeType===1&&m.tagName==="TEMPLATE";return[c,f]}const Ul="data-allow-mismatch",Tg={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function $o(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Ul);)e=e.parentElement;const n=e&&e.getAttribute(Ul);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(Tg[t])}}const Pg=Fs().requestIdleCallback||(e=>setTimeout(e,1)),Ag=Fs().cancelIdleCallback||(e=>clearTimeout(e)),AE=(e=1e4)=>t=>{const n=Pg(t,{timeout:e});return()=>Ag(n)};function Og(e){const{top:t,left:n,bottom:r,right:o}=e.getBoundingClientRect(),{innerHeight:s,innerWidth:i}=window;return(t>0&&t0&&r0&&n0&&o(t,n)=>{const r=new IntersectionObserver(o=>{for(const s of o)if(s.isIntersecting){r.disconnect(),t();break}},e);return n(o=>{if(o instanceof Element){if(Og(o))return t(),r.disconnect(),!1;r.observe(o)}}),()=>r.disconnect()},RE=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},IE=(e=[])=>(t,n)=>{Me(e)&&(e=[e]);let r=!1;const o=i=>{r||(r=!0,s(),t(),i.target.dispatchEvent(new i.constructor(i.type,i)))},s=()=>{n(i=>{for(const a of e)i.removeEventListener(a,o)})};return n(i=>{for(const a of e)i.addEventListener(a,o,{once:!0})}),s};function Rg(e,t){if(ar(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(ar(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const xn=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function hs(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,hydrate:s,timeout:i,suspensible:a=!0,onError:l}=e;let u=null,c,f=0;const d=()=>(f++,u=null,p()),p=()=>{let g;return u||(g=u=t().catch(h=>{if(h=h instanceof Error?h:new Error(String(h)),l)return new Promise((y,k)=>{l(h,()=>y(d()),()=>k(h),f+1)});throw h}).then(h=>g!==u&&u?u:(h&&(h.__esModule||h[Symbol.toStringTag]==="Module")&&(h=h.default),c=h,h)))};return fe({name:"AsyncComponentWrapper",__asyncLoader:p,__asyncHydrate(g,h,y){const k=s?()=>{const m=s(()=>{y()},b=>Rg(g,b));m&&(h.bum||(h.bum=[])).push(m),(h.u||(h.u=[])).push(()=>!0)}:y;c?k():p().then(()=>!h.isUnmounted&&k())},get __asyncResolved(){return c},setup(){const g=Ve;if(Ka(g),c)return()=>fi(c,g);const h=m=>{u=null,Sr(m,g,13,!r)};if(a&&g.suspense||yr)return p().then(m=>()=>fi(m,g)).catch(m=>(h(m),()=>r?ue(r,{error:m}):null));const y=se(!1),k=se(),v=se(!!o);return o&&setTimeout(()=>{v.value=!1},o),i!=null&&setTimeout(()=>{if(!y.value&&!k.value){const m=new Error(`Async component timed out after ${i}ms.`);h(m),k.value=m}},i),p().then(()=>{y.value=!0,g.parent&&vo(g.parent.vnode)&&g.parent.update()}).catch(m=>{h(m),k.value=m}),()=>{if(y.value&&c)return fi(c,g);if(k.value&&r)return ue(r,{error:k.value});if(n&&!v.value)return ue(n)}}})}function fi(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=ue(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const vo=e=>e.type.__isKeepAlive,Ig={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Fe(),r=n.ctx;if(!r.renderer)return()=>{const v=t.default&&t.default();return v&&v.length===1?v[0]:v};const o=new Map,s=new Set;let i=null;const a=n.suspense,{renderer:{p:l,m:u,um:c,o:{createElement:f}}}=r,d=f("div");r.activate=(v,m,b,_,x)=>{const S=v.component;u(v,m,b,0,a),l(S.vnode,v,m,b,S,a,_,v.slotScopeIds,x),Be(()=>{S.isDeactivated=!1,S.a&&fr(S.a);const N=v.props&&v.props.onVnodeMounted;N&&ut(N,S.parent,v)},a)},r.deactivate=v=>{const m=v.component;ys(m.m),ys(m.a),u(v,d,null,1,a),Be(()=>{m.da&&fr(m.da);const b=v.props&&v.props.onVnodeUnmounted;b&&ut(b,m.parent,v),m.isDeactivated=!0},a)};function p(v){di(v),c(v,n,a,!0)}function g(v){o.forEach((m,b)=>{const _=Gi(m.type);_&&!v(_)&&h(b)})}function h(v){const m=o.get(v);m&&(!i||!At(m,i))?p(m):i&&di(i),o.delete(v),s.delete(v)}Ne(()=>[e.include,e.exclude],([v,m])=>{v&&g(b=>Ur(v,b)),m&&g(b=>!Ur(m,b))},{flush:"post",deep:!0});let y=null;const k=()=>{y!=null&&(bs(n.subTree.type)?Be(()=>{o.set(y,No(n.subTree))},n.subTree.suspense):o.set(y,No(n.subTree)))};return jt(k),Wa(k),Qn(()=>{o.forEach(v=>{const{subTree:m,suspense:b}=n,_=No(m);if(v.type===_.type&&v.key===_.key){di(_);const x=_.component.da;x&&Be(x,b);return}p(v)})}),()=>{if(y=null,!t.default)return i=null;const v=t.default(),m=v[0];if(v.length>1)return i=null,v;if(!Cn(m)||!(m.shapeFlag&4)&&!(m.shapeFlag&128))return i=null,m;let b=No(m);if(b.type===je)return i=null,b;const _=b.type,x=Gi(xn(b)?b.type.__asyncResolved||{}:_),{include:S,exclude:N,max:O}=e;if(S&&(!x||!Ur(S,x))||N&&x&&Ur(N,x))return b.shapeFlag&=-257,i=b,m;const P=b.key==null?_:b.key,q=o.get(P);return b.el&&(b=zt(b),m.shapeFlag&128&&(m.ssContent=b)),y=P,q?(b.el=q.el,b.component=q.component,b.transition&&Sn(b,b.transition),b.shapeFlag|=512,s.delete(P),s.add(P)):(s.add(P),O&&s.size>parseInt(O,10)&&h(s.values().next().value)),b.shapeFlag|=256,i=b,bs(m.type)?m:b}}},Mg=Ig;function Ur(e,t){return X(e)?e.some(n=>Ur(n,t)):Me(e)?e.split(",").includes(t):Ph(e)?(e.lastIndex=0,e.test(t)):!1}function Af(e,t){Rf(e,"a",t)}function Of(e,t){Rf(e,"da",t)}function Rf(e,t,n=Ve){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Ws(t,r,n),n){let o=n.parent;for(;o&&o.parent;)vo(o.parent.vnode)&&$g(r,t,n,o),o=o.parent}}function $g(e,t,n,r){const o=Ws(t,e,r,!0);Xn(()=>{La(r[t],o)},n)}function di(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function No(e){return e.shapeFlag&128?e.ssContent:e}function Ws(e,t,n=Ve,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{on();const a=Kn(n),l=Nt(t,n,e,i);return a(),sn(),l});return r?o.unshift(s):o.push(s),s}}const un=e=>(t,n=Ve)=>{(!yr||e==="sp")&&Ws(e,(...r)=>t(...r),n)},Ng=un("bm"),jt=un("m"),If=un("bu"),Wa=un("u"),Qn=un("bum"),Xn=un("um"),Lg=un("sp"),jg=un("rtg"),Dg=un("rtc");function Mf(e,t=Ve){Ws("ec",e,t)}const Ga="components",Fg="directives";function Vl(e,t){return Ja(Ga,e,!0,t)||e}const $f=Symbol.for("v-ndc");function Ln(e){return Me(e)?Ja(Ga,e,!1)||e:e||$f}function ME(e){return Ja(Fg,e)}function Ja(e,t,n=!0,r=!1){const o=qe||Ve;if(o){const s=o.type;if(e===Ga){const a=Gi(s,!1);if(a&&(a===t||a===We(t)||a===Ds(We(t))))return s}const i=ql(o[e]||s[e],t)||ql(o.appContext[e],t);return!i&&r?s:i}}function ql(e,t){return e&&(e[t]||e[We(t)]||e[Ds(We(t))])}function gs(e,t,n,r){let o;const s=n&&n[r],i=X(e);if(i||Me(e)){const a=i&&Fn(e);let l=!1,u=!1;a&&(l=!kt(e),u=an(e),e=Vs(e)),o=new Array(e.length);for(let c=0,f=e.length;ct(a,l,void 0,s&&s[l]));else{const a=Object.keys(e);o=new Array(a.length);for(let l=0,u=a.length;l{const s=r.fn(...o);return s&&(s.key=r.key),s}:r.fn)}return e}function ge(e,t,n={},r,o){if(qe.ce||qe.parent&&xn(qe.parent)&&qe.parent.ce)return t!=="default"&&(n.name=t),Y(),ne(Ie,null,[ue("slot",n,r&&r())],64);let s=e[t];s&&s._c&&(s._d=!1),Y();const i=s&&Ya(s(n)),a=n.key||i&&i.key,l=ne(Ie,{key:(a&&!Mt(a)?a:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&e._===1?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),s&&s._c&&(s._d=!0),l}function Ya(e){return e.some(t=>Cn(t)?!(t.type===je||t.type===Ie&&!Ya(t.children)):!0)?e:null}function NE(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:zr(r)]=e[r];return n}const Di=e=>e?sd(e)?_o(e):Di(e.parent):null,Jr=Ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Di(e.parent),$root:e=>Di(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Qa(e),$forceUpdate:e=>e.f||(e.f=()=>{qa(e.update)}),$nextTick:e=>e.n||(e.n=tt.bind(e.proxy)),$watch:e=>im.bind(e)}),pi=(e,t)=>e!==pe&&!e.__isScriptSetup&&ye(e,t),Fi={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:a,appContext:l}=e;let u;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(pi(r,t))return i[t]=1,r[t];if(o!==pe&&ye(o,t))return i[t]=2,o[t];if((u=e.propsOptions[0])&&ye(u,t))return i[t]=3,s[t];if(n!==pe&&ye(n,t))return i[t]=4,n[t];Hi&&(i[t]=0)}}const c=Jr[t];let f,d;if(c)return t==="$attrs"&&Qe(e.attrs,"get",""),c(e);if((f=a.__cssModules)&&(f=f[t]))return f;if(n!==pe&&ye(n,t))return i[t]=4,n[t];if(d=l.config.globalProperties,ye(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return pi(o,t)?(o[t]=n,!0):r!==pe&&ye(r,t)?(r[t]=n,!0):ye(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let a;return!!n[i]||e!==pe&&ye(e,i)||pi(t,i)||(a=s[0])&&ye(a,i)||ye(r,i)||ye(Jr,i)||ye(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ye(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},Hg=Ae({},Fi,{get(e,t){if(t!==Symbol.unscopables)return Fi.get(e,t,e)},has(e,t){return t[0]!=="_"&&!Mh(t)}});function LE(){return null}function jE(){return null}function DE(e){}function FE(e){}function HE(){return null}function BE(){}function UE(e,t){return null}function Nf(){return Lf().slots}function VE(){return Lf().attrs}function Lf(){const e=Fe();return e.setupContext||(e.setupContext=ld(e))}function ao(e){return X(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function qE(e,t){const n=ao(e);for(const r in t){if(r.startsWith("__skip"))continue;let o=n[r];o?X(o)||ae(o)?o=n[r]={type:o,default:t[r]}:o.default=t[r]:o===null&&(o=n[r]={default:t[r]}),o&&t[`__skip_${r}`]&&(o.skipFactory=!0)}return n}function zE(e,t){return!e||!t?e||t:X(e)&&X(t)?e.concat(t):Ae({},ao(e),ao(t))}function KE(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function WE(e){const t=Fe();let n=e();return zi(),ja(n)&&(n=n.catch(r=>{throw Kn(t),r})),[n,()=>Kn(t)]}let Hi=!0;function Bg(e){const t=Qa(e),n=e.proxy,r=e.ctx;Hi=!1,t.beforeCreate&&zl(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:a,provide:l,inject:u,created:c,beforeMount:f,mounted:d,beforeUpdate:p,updated:g,activated:h,deactivated:y,beforeDestroy:k,beforeUnmount:v,destroyed:m,unmounted:b,render:_,renderTracked:x,renderTriggered:S,errorCaptured:N,serverPrefetch:O,expose:P,inheritAttrs:q,components:T,directives:$,filters:B}=t;if(u&&Ug(u,r,null),i)for(const z in i){const L=i[z];ae(L)&&(r[z]=L.bind(n))}if(o){const z=o.call(n,n);Ce(z)&&(e.data=et(z))}if(Hi=!0,s)for(const z in s){const L=s[z],oe=ae(L)?L.bind(n,n):ae(L.get)?L.get.bind(n,n):_t,be=!ae(L)&&ae(L.set)?L.set.bind(n):_t,De=F({get:oe,set:be});Object.defineProperty(r,z,{enumerable:!0,configurable:!0,get:()=>De.value,set:ve=>De.value=ve})}if(a)for(const z in a)jf(a[z],r,n,z);if(l){const z=ae(l)?l.call(n):l;Reflect.ownKeys(z).forEach(L=>{at(L,z[L])})}c&&zl(c,e,"c");function R(z,L){X(L)?L.forEach(oe=>z(oe.bind(n))):L&&z(L.bind(n))}if(R(Ng,f),R(jt,d),R(If,p),R(Wa,g),R(Af,h),R(Of,y),R(Mf,N),R(Dg,x),R(jg,S),R(Qn,v),R(Xn,b),R(Lg,O),X(P))if(P.length){const z=e.exposed||(e.exposed={});P.forEach(L=>{Object.defineProperty(z,L,{get:()=>n[L],set:oe=>n[L]=oe})})}else e.exposed||(e.exposed={});_&&e.render===_t&&(e.render=_),q!=null&&(e.inheritAttrs=q),T&&(e.components=T),$&&(e.directives=$),O&&Ka(e)}function Ug(e,t,n=_t){X(e)&&(e=Bi(e));for(const r in e){const o=e[r];let s;Ce(o)?"default"in o?s=Se(o.from||r,o.default,!0):s=Se(o.from||r):s=Se(o),Pe(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function zl(e,t,n){Nt(X(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function jf(e,t,n,r){let o=r.includes(".")?Yf(n,r):()=>n[r];if(Me(e)){const s=t[e];ae(s)&&Ne(o,s)}else if(ae(e))Ne(o,e.bind(n));else if(Ce(e))if(X(e))e.forEach(s=>jf(s,t,n,r));else{const s=ae(e.handler)?e.handler.bind(n):t[e.handler];ae(s)&&Ne(o,s,e)}}function Qa(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,a=s.get(t);let l;return a?l=a:!o.length&&!n&&!r?l=t:(l={},o.length&&o.forEach(u=>ms(l,u,i,!0)),ms(l,t,i)),Ce(t)&&s.set(t,l),l}function ms(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&ms(e,s,n,!0),o&&o.forEach(i=>ms(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const a=Vg[i]||n&&n[i];e[i]=a?a(e[i],t[i]):t[i]}return e}const Vg={data:Kl,props:Wl,emits:Wl,methods:Vr,computed:Vr,beforeCreate:ot,created:ot,beforeMount:ot,mounted:ot,beforeUpdate:ot,updated:ot,beforeDestroy:ot,beforeUnmount:ot,destroyed:ot,unmounted:ot,activated:ot,deactivated:ot,errorCaptured:ot,serverPrefetch:ot,components:Vr,directives:Vr,watch:zg,provide:Kl,inject:qg};function Kl(e,t){return t?e?function(){return Ae(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function qg(e,t){return Vr(Bi(e),Bi(t))}function Bi(e){if(X(e)){const t={};for(let n=0;n1)return n&&ae(t)?t.call(r&&r.proxy):t}}function Gs(){return!!(Ve||qe||Hn)}const Ff={},Hf=()=>Object.create(Ff),Bf=e=>Object.getPrototypeOf(e)===Ff;function Gg(e,t,n,r=!1){const o={},s=Hf();e.propsDefaults=Object.create(null),Uf(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:Ot(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function Jg(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,a=me(o),[l]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,p]=Vf(f,t,!0);Ae(i,d),p&&a.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!s&&!l)return Ce(e)&&r.set(e,lr),lr;if(X(s))for(let c=0;ce[0]==="_"||e==="$stable",Za=e=>X(e)?e.map(ft):[ft(e)],Qg=(e,t,n)=>{if(t._n)return t;const r=ce((...o)=>Za(t(...o)),n);return r._c=!1,r},qf=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Xa(o))continue;const s=e[o];if(ae(s))t[o]=Qg(o,s,r);else if(s!=null){const i=Za(s);t[o]=()=>i}}},zf=(e,t)=>{const n=Za(t);e.slots.default=()=>n},Kf=(e,t,n)=>{for(const r in t)(n||!Xa(r))&&(e[r]=t[r])},Xg=(e,t,n)=>{const r=e.slots=Hf();if(e.vnode.shapeFlag&32){const o=t._;o?(Kf(r,t,n),n&&qu(r,"_",o,!0)):qf(t,r)}else t&&zf(e,t)},Zg=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=pe;if(r.shapeFlag&32){const a=t._;a?n&&a===1?s=!1:Kf(o,t,n):(s=!t.$stable,qf(t,o)),i=t}else t&&(zf(e,t),i={default:1});if(s)for(const a in o)!Xa(a)&&i[a]==null&&delete o[a]},Be=ed;function em(e){return Wf(e)}function tm(e){return Wf(e,Cg)}function Wf(e,t){const n=Fs();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:a,createComment:l,setText:u,setElementText:c,parentNode:f,nextSibling:d,setScopeId:p=_t,insertStaticContent:g}=e,h=(w,E,C,j=null,M=null,D=null,K=void 0,V=null,U=!!E.dynamicChildren)=>{if(w===E)return;w&&!At(w,E)&&(j=I(w),ve(w,M,D,!0),w=null),E.patchFlag===-2&&(U=!1,E.dynamicChildren=null);const{type:H,ref:ie,shapeFlag:J}=E;switch(H){case Bn:y(w,E,C,j);break;case je:k(w,E,C,j);break;case hr:w==null&&v(E,C,j,K);break;case Ie:T(w,E,C,j,M,D,K,V,U);break;default:J&1?_(w,E,C,j,M,D,K,V,U):J&6?$(w,E,C,j,M,D,K,V,U):(J&64||J&128)&&H.process(w,E,C,j,M,D,K,V,U,te)}ie!=null&&M&&io(ie,w&&w.ref,D,E||w,!E)},y=(w,E,C,j)=>{if(w==null)r(E.el=a(E.children),C,j);else{const M=E.el=w.el;E.children!==w.children&&u(M,E.children)}},k=(w,E,C,j)=>{w==null?r(E.el=l(E.children||""),C,j):E.el=w.el},v=(w,E,C,j)=>{[w.el,w.anchor]=g(w.children,E,C,j,w.el,w.anchor)},m=({el:w,anchor:E},C,j)=>{let M;for(;w&&w!==E;)M=d(w),r(w,C,j),w=M;r(E,C,j)},b=({el:w,anchor:E})=>{let C;for(;w&&w!==E;)C=d(w),o(w),w=C;o(E)},_=(w,E,C,j,M,D,K,V,U)=>{E.type==="svg"?K="svg":E.type==="math"&&(K="mathml"),w==null?x(E,C,j,M,D,K,V,U):O(w,E,M,D,K,V,U)},x=(w,E,C,j,M,D,K,V)=>{let U,H;const{props:ie,shapeFlag:J,transition:re,dirs:le}=w;if(U=w.el=i(w.type,D,ie&&ie.is,ie),J&8?c(U,w.children):J&16&&N(w.children,U,null,j,M,hi(w,D),K,V),le&&Vt(w,null,j,"created"),S(U,w,w.scopeId,K,j),ie){for(const Oe in ie)Oe!=="value"&&!ur(Oe)&&s(U,Oe,null,ie[Oe],D,j);"value"in ie&&s(U,"value",null,ie.value,D),(H=ie.onVnodeBeforeMount)&&ut(H,j,w)}le&&Vt(w,null,j,"beforeMount");const he=Gf(M,re);he&&re.beforeEnter(U),r(U,E,C),((H=ie&&ie.onVnodeMounted)||he||le)&&Be(()=>{H&&ut(H,j,w),he&&re.enter(U),le&&Vt(w,null,j,"mounted")},M)},S=(w,E,C,j,M)=>{if(C&&p(w,C),j)for(let D=0;D{for(let H=U;H{const V=E.el=w.el;let{patchFlag:U,dynamicChildren:H,dirs:ie}=E;U|=w.patchFlag&16;const J=w.props||pe,re=E.props||pe;let le;if(C&&On(C,!1),(le=re.onVnodeBeforeUpdate)&&ut(le,C,E,w),ie&&Vt(E,w,C,"beforeUpdate"),C&&On(C,!0),(J.innerHTML&&re.innerHTML==null||J.textContent&&re.textContent==null)&&c(V,""),H?P(w.dynamicChildren,H,V,C,j,hi(E,M),D):K||L(w,E,V,null,C,j,hi(E,M),D,!1),U>0){if(U&16)q(V,J,re,C,M);else if(U&2&&J.class!==re.class&&s(V,"class",null,re.class,M),U&4&&s(V,"style",J.style,re.style,M),U&8){const he=E.dynamicProps;for(let Oe=0;Oe{le&&ut(le,C,E,w),ie&&Vt(E,w,C,"updated")},j)},P=(w,E,C,j,M,D,K)=>{for(let V=0;V{if(E!==C){if(E!==pe)for(const D in E)!ur(D)&&!(D in C)&&s(w,D,E[D],null,M,j);for(const D in C){if(ur(D))continue;const K=C[D],V=E[D];K!==V&&D!=="value"&&s(w,D,V,K,M,j)}"value"in C&&s(w,"value",E.value,C.value,M)}},T=(w,E,C,j,M,D,K,V,U)=>{const H=E.el=w?w.el:a(""),ie=E.anchor=w?w.anchor:a("");let{patchFlag:J,dynamicChildren:re,slotScopeIds:le}=E;le&&(V=V?V.concat(le):le),w==null?(r(H,C,j),r(ie,C,j),N(E.children||[],C,ie,M,D,K,V,U)):J>0&&J&64&&re&&w.dynamicChildren?(P(w.dynamicChildren,re,C,M,D,K,V),(E.key!=null||M&&E===M.subTree)&&el(w,E,!0)):L(w,E,C,ie,M,D,K,V,U)},$=(w,E,C,j,M,D,K,V,U)=>{E.slotScopeIds=V,w==null?E.shapeFlag&512?M.ctx.activate(E,C,j,K,U):B(E,C,j,M,D,K,U):W(w,E,U)},B=(w,E,C,j,M,D,K)=>{const V=w.component=od(w,j,M);if(vo(w)&&(V.ctx.renderer=te),id(V,!1,K),V.asyncDep){if(M&&M.registerDep(V,R,K),!w.el){const U=V.subTree=ue(je);k(null,U,E,C)}}else R(V,w,E,C,M,D,K)},W=(w,E,C)=>{const j=E.component=w.component;if(fm(w,E,C))if(j.asyncDep&&!j.asyncResolved){z(j,E,C);return}else j.next=E,j.update();else E.el=w.el,j.vnode=E},R=(w,E,C,j,M,D,K)=>{const V=()=>{if(w.isMounted){let{next:J,bu:re,u:le,parent:he,vnode:Oe}=w;{const gt=Jf(w);if(gt){J&&(J.el=Oe.el,z(w,J,K)),gt.asyncDep.then(()=>{w.isUnmounted||V()});return}}let Ee=J,ht;On(w,!1),J?(J.el=Oe.el,z(w,J,K)):J=Oe,re&&fr(re),(ht=J.props&&J.props.onVnodeBeforeUpdate)&&ut(ht,he,J,Oe),On(w,!0);const Je=Yo(w),Ct=w.subTree;w.subTree=Je,h(Ct,Je,f(Ct.el),I(Ct),w,M,D),J.el=Je.el,Ee===null&&Ys(w,Je.el),le&&Be(le,M),(ht=J.props&&J.props.onVnodeUpdated)&&Be(()=>ut(ht,he,J,Oe),M)}else{let J;const{el:re,props:le}=E,{bm:he,m:Oe,parent:Ee,root:ht,type:Je}=w,Ct=xn(E);if(On(w,!1),he&&fr(he),!Ct&&(J=le&&le.onVnodeBeforeMount)&&ut(J,Ee,E),On(w,!0),re&&$e){const gt=()=>{w.subTree=Yo(w),$e(re,w.subTree,w,M,null)};Ct&&Je.__asyncHydrate?Je.__asyncHydrate(re,w,gt):gt()}else{ht.ce&&ht.ce._injectChildStyle(Je);const gt=w.subTree=Yo(w);h(null,gt,C,j,w,M,D),E.el=gt.el}if(Oe&&Be(Oe,M),!Ct&&(J=le&&le.onVnodeMounted)){const gt=E;Be(()=>ut(J,Ee,gt),M)}(E.shapeFlag&256||Ee&&xn(Ee.vnode)&&Ee.vnode.shapeFlag&256)&&w.a&&Be(w.a,M),w.isMounted=!0,E=C=j=null}};w.scope.on();const U=w.effect=new as(V);w.scope.off();const H=w.update=U.run.bind(U),ie=w.job=U.runIfDirty.bind(U);ie.i=w,ie.id=w.uid,U.scheduler=()=>qa(ie),On(w,!0),H()},z=(w,E,C)=>{E.component=w;const j=w.vnode.props;w.vnode=E,w.next=null,Jg(w,E.props,j,C),Zg(w,E.children,C),on(),Ll(w),sn()},L=(w,E,C,j,M,D,K,V,U=!1)=>{const H=w&&w.children,ie=w?w.shapeFlag:0,J=E.children,{patchFlag:re,shapeFlag:le}=E;if(re>0){if(re&128){be(H,J,C,j,M,D,K,V,U);return}else if(re&256){oe(H,J,C,j,M,D,K,V,U);return}}le&8?(ie&16&&He(H,M,D),J!==H&&c(C,J)):ie&16?le&16?be(H,J,C,j,M,D,K,V,U):He(H,M,D,!0):(ie&8&&c(C,""),le&16&&N(J,C,j,M,D,K,V,U))},oe=(w,E,C,j,M,D,K,V,U)=>{w=w||lr,E=E||lr;const H=w.length,ie=E.length,J=Math.min(H,ie);let re;for(re=0;reie?He(w,M,D,!0,!1,J):N(E,C,j,M,D,K,V,U,J)},be=(w,E,C,j,M,D,K,V,U)=>{let H=0;const ie=E.length;let J=w.length-1,re=ie-1;for(;H<=J&&H<=re;){const le=w[H],he=E[H]=U?vn(E[H]):ft(E[H]);if(At(le,he))h(le,he,C,null,M,D,K,V,U);else break;H++}for(;H<=J&&H<=re;){const le=w[J],he=E[re]=U?vn(E[re]):ft(E[re]);if(At(le,he))h(le,he,C,null,M,D,K,V,U);else break;J--,re--}if(H>J){if(H<=re){const le=re+1,he=lere)for(;H<=J;)ve(w[H],M,D,!0),H++;else{const le=H,he=H,Oe=new Map;for(H=he;H<=re;H++){const mt=E[H]=U?vn(E[H]):ft(E[H]);mt.key!=null&&Oe.set(mt.key,H)}let Ee,ht=0;const Je=re-he+1;let Ct=!1,gt=0;const Rr=new Array(Je);for(H=0;H=Je){ve(mt,M,D,!0);continue}let Ft;if(mt.key!=null)Ft=Oe.get(mt.key);else for(Ee=he;Ee<=re;Ee++)if(Rr[Ee-he]===0&&At(mt,E[Ee])){Ft=Ee;break}Ft===void 0?ve(mt,M,D,!0):(Rr[Ft-he]=H+1,Ft>=gt?gt=Ft:Ct=!0,h(mt,E[Ft],C,null,M,D,K,V,U),ht++)}const Pl=Ct?nm(Rr):lr;for(Ee=Pl.length-1,H=Je-1;H>=0;H--){const mt=he+H,Ft=E[mt],Al=mt+1{const{el:D,type:K,transition:V,children:U,shapeFlag:H}=w;if(H&6){De(w.component.subTree,E,C,j);return}if(H&128){w.suspense.move(E,C,j);return}if(H&64){K.move(w,E,C,te);return}if(K===Ie){r(D,E,C);for(let J=0;JV.enter(D),M);else{const{leave:J,delayLeave:re,afterLeave:le}=V,he=()=>{w.ctx.isUnmounted?o(D):r(D,E,C)},Oe=()=>{J(D,()=>{he(),le&&le()})};re?re(D,he,Oe):Oe()}else r(D,E,C)},ve=(w,E,C,j=!1,M=!1)=>{const{type:D,props:K,ref:V,children:U,dynamicChildren:H,shapeFlag:ie,patchFlag:J,dirs:re,cacheIndex:le}=w;if(J===-2&&(M=!1),V!=null&&(on(),io(V,null,C,w,!0),sn()),le!=null&&(E.renderCache[le]=void 0),ie&256){E.ctx.deactivate(w);return}const he=ie&1&&re,Oe=!xn(w);let Ee;if(Oe&&(Ee=K&&K.onVnodeBeforeUnmount)&&ut(Ee,E,w),ie&6)pt(w.component,C,j);else{if(ie&128){w.suspense.unmount(C,j);return}he&&Vt(w,null,E,"beforeUnmount"),ie&64?w.type.remove(w,E,C,te,j):H&&!H.hasOnce&&(D!==Ie||J>0&&J&64)?He(H,E,C,!1,!0):(D===Ie&&J&384||!M&&ie&16)&&He(U,E,C),j&<(w)}(Oe&&(Ee=K&&K.onVnodeUnmounted)||he)&&Be(()=>{Ee&&ut(Ee,E,w),he&&Vt(w,null,E,"unmounted")},C)},lt=w=>{const{type:E,el:C,anchor:j,transition:M}=w;if(E===Ie){rt(C,j);return}if(E===hr){b(w);return}const D=()=>{o(C),M&&!M.persisted&&M.afterLeave&&M.afterLeave()};if(w.shapeFlag&1&&M&&!M.persisted){const{leave:K,delayLeave:V}=M,U=()=>K(C,D);V?V(w.el,D,U):U()}else D()},rt=(w,E)=>{let C;for(;w!==E;)C=d(w),o(w),w=C;o(E)},pt=(w,E,C)=>{const{bum:j,scope:M,job:D,subTree:K,um:V,m:U,a:H,parent:ie,slots:{__:J}}=w;ys(U),ys(H),j&&fr(j),ie&&X(J)&&J.forEach(re=>{ie.renderCache[re]=void 0}),M.stop(),D&&(D.flags|=8,ve(K,w,E,C)),V&&Be(V,E),Be(()=>{w.isUnmounted=!0},E),E&&E.pendingBranch&&!E.isUnmounted&&w.asyncDep&&!w.asyncResolved&&w.suspenseId===E.pendingId&&(E.deps--,E.deps===0&&E.resolve())},He=(w,E,C,j=!1,M=!1,D=0)=>{for(let K=D;K{if(w.shapeFlag&6)return I(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const E=d(w.anchor||w.el),C=E&&E[vf];return C?d(C):E};let Q=!1;const G=(w,E,C)=>{w==null?E._vnode&&ve(E._vnode,null,null,!0):h(E._vnode||null,w,E,null,null,null,C),E._vnode=w,Q||(Q=!0,Ll(),ps(),Q=!1)},te={p:h,um:ve,m:De,r:lt,mt:B,mc:N,pc:L,pbc:P,n:I,o:e};let we,$e;return t&&([we,$e]=t(te)),{render:G,hydrate:we,createApp:Wg(G,we)}}function hi({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function On({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Gf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function el(e,t,n=!1){const r=e.children,o=t.children;if(X(r)&&X(o))for(let s=0;s>1,e[n[a]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}function Jf(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Jf(t)}function ys(e){if(e)for(let t=0;tSe(rm);function ln(e,t){return wo(e,null,t)}function GE(e,t){return wo(e,null,{flush:"post"})}function sm(e,t){return wo(e,null,{flush:"sync"})}function Ne(e,t,n){return wo(e,t,n)}function wo(e,t,n=pe){const{immediate:r,deep:o,flush:s,once:i}=n,a=Ae({},n),l=t&&r||!t&&s!=="post";let u;if(yr){if(s==="sync"){const p=om();u=p.__watcherHandles||(p.__watcherHandles=[])}else if(!l){const p=()=>{};return p.stop=_t,p.resume=_t,p.pause=_t,p}}const c=Ve;a.call=(p,g,h)=>Nt(p,c,g,h);let f=!1;s==="post"?a.scheduler=p=>{Be(p,c&&c.suspense)}:s!=="sync"&&(f=!0,a.scheduler=(p,g)=>{g?p():qa(p)}),a.augmentJob=p=>{t&&(p.flags|=4),f&&(p.flags|=2,c&&(p.id=c.uid,p.i=c))};const d=hg(e,t,a);return yr&&(u?u.push(d):l&&d()),d}function im(e,t,n){const r=this.proxy,o=Me(e)?e.includes(".")?Yf(r,e):()=>r[e]:e.bind(r,r);let s;ae(t)?s=t:(s=t.handler,n=t);const i=Kn(this),a=wo(o,s.bind(r),n);return i(),a}function Yf(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{let c,f=pe,d;return sm(()=>{const p=e[o];st(c,p)&&(c=p,u())}),{get(){return l(),n.get?n.get(c):c},set(p){const g=n.set?n.set(p):p;if(!st(g,c)&&!(f!==pe&&st(p,f)))return;const h=r.vnode.props;h&&(t in h||o in h||s in h)&&(`onUpdate:${t}`in h||`onUpdate:${o}`in h||`onUpdate:${s}`in h)||(c=p,u()),r.emit(`update:${t}`,g),st(p,g)&&st(p,f)&&!st(g,d)&&u(),f=p,d=g}}});return a[Symbol.iterator]=()=>{let l=0;return{next(){return l<2?{value:l++?i||pe:a,done:!1}:{done:!0}}}},a}const Qf=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${We(t)}Modifiers`]||e[`${dt(t)}Modifiers`];function am(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||pe;let o=n;const s=t.startsWith("update:"),i=s&&Qf(r,t.slice(7));i&&(i.trim&&(o=n.map(c=>Me(c)?c.trim():c)),i.number&&(o=n.map(ss)));let a,l=r[a=zr(t)]||r[a=zr(We(t))];!l&&s&&(l=r[a=zr(dt(t))]),l&&Nt(l,e,6,o);const u=r[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Nt(u,e,6,o)}}function Xf(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},a=!1;if(!ae(e)){const l=u=>{const c=Xf(u,t,!0);c&&(a=!0,Ae(i,c))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!s&&!a?(Ce(e)&&r.set(e,null),null):(X(s)?s.forEach(l=>i[l]=null):Ae(i,s),Ce(e)&&r.set(e,i),i)}function Js(e,t){return!e||!mo(t)?!1:(t=t.slice(2).replace(/Once$/,""),ye(e,t[0].toLowerCase()+t.slice(1))||ye(e,dt(t))||ye(e,t))}function Yo(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[s],slots:i,attrs:a,emit:l,render:u,renderCache:c,props:f,data:d,setupState:p,ctx:g,inheritAttrs:h}=e,y=oo(e);let k,v;try{if(n.shapeFlag&4){const b=o||r,_=b;k=ft(u.call(_,b,c,f,p,d,g)),v=a}else{const b=t;k=ft(b.length>1?b(f,{attrs:a,slots:i,emit:l}):b(f,null)),v=t.props?a:cm(a)}}catch(b){Yr.length=0,Sr(b,e,1),k=ue(je)}let m=k;if(v&&h!==!1){const b=Object.keys(v),{shapeFlag:_}=m;b.length&&_&7&&(s&&b.some(Na)&&(v=um(v,s)),m=zt(m,v,!1,!0))}return n.dirs&&(m=zt(m,null,!1,!0),m.dirs=m.dirs?m.dirs.concat(n.dirs):n.dirs),n.transition&&Sn(m,n.transition),k=m,oo(y),k}function lm(e,t=!0){let n;for(let r=0;r{let t;for(const n in e)(n==="class"||n==="style"||mo(n))&&((t||(t={}))[n]=e[n]);return t},um=(e,t)=>{const n={};for(const r in e)(!Na(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function fm(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:a,patchFlag:l}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?Jl(r,i,u):!!i;if(l&8){const c=t.dynamicProps;for(let f=0;fe.__isSuspense;let Vi=0;const dm={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,s,i,a,l,u){if(e==null)pm(t,n,r,o,s,i,a,l,u);else{if(s&&s.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}hm(e,t,n,r,o,i,a,l,u)}},hydrate:gm,normalize:mm},tl=dm;function lo(e,t){const n=e.props&&e.props[t];ae(n)&&n()}function pm(e,t,n,r,o,s,i,a,l){const{p:u,o:{createElement:c}}=l,f=c("div"),d=e.suspense=Zf(e,o,r,t,f,n,s,i,a,l);u(null,d.pendingBranch=e.ssContent,f,null,r,d,s,i),d.deps>0?(lo(e,"onPending"),lo(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,s,i),pr(d,e.ssFallback)):d.resolve(!1,!0)}function hm(e,t,n,r,o,s,i,a,{p:l,um:u,o:{createElement:c}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,p=t.ssFallback,{activeBranch:g,pendingBranch:h,isInFallback:y,isHydrating:k}=f;if(h)f.pendingBranch=d,At(d,h)?(l(h,d,f.hiddenContainer,null,o,f,s,i,a),f.deps<=0?f.resolve():y&&(k||(l(g,p,n,r,o,null,s,i,a),pr(f,p)))):(f.pendingId=Vi++,k?(f.isHydrating=!1,f.activeBranch=h):u(h,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=c("div"),y?(l(null,d,f.hiddenContainer,null,o,f,s,i,a),f.deps<=0?f.resolve():(l(g,p,n,r,o,null,s,i,a),pr(f,p))):g&&At(d,g)?(l(g,d,n,r,o,f,s,i,a),f.resolve(!0)):(l(null,d,f.hiddenContainer,null,o,f,s,i,a),f.deps<=0&&f.resolve()));else if(g&&At(d,g))l(g,d,n,r,o,f,s,i,a),pr(f,d);else if(lo(t,"onPending"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=Vi++,l(null,d,f.hiddenContainer,null,o,f,s,i,a),f.deps<=0)f.resolve();else{const{timeout:v,pendingId:m}=f;v>0?setTimeout(()=>{f.pendingId===m&&f.fallback(p)},v):v===0&&f.fallback(p)}}function Zf(e,t,n,r,o,s,i,a,l,u,c=!1){const{p:f,m:d,um:p,n:g,o:{parentNode:h,remove:y}}=u;let k;const v=ym(e);v&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);const m=e.props?is(e.props.timeout):void 0,b=s,_={vnode:e,parent:t,parentComponent:n,namespace:i,container:r,hiddenContainer:o,deps:0,pendingId:Vi++,timeout:typeof m=="number"?m:-1,activeBranch:null,pendingBranch:null,isInFallback:!c,isHydrating:c,isUnmounted:!1,effects:[],resolve(x=!1,S=!1){const{vnode:N,activeBranch:O,pendingBranch:P,pendingId:q,effects:T,parentComponent:$,container:B}=_;let W=!1;_.isHydrating?_.isHydrating=!1:x||(W=O&&P.transition&&P.transition.mode==="out-in",W&&(O.transition.afterLeave=()=>{q===_.pendingId&&(d(P,B,s===b?g(O):s,0),ds(T))}),O&&(h(O.el)===B&&(s=g(O)),p(O,$,_,!0)),W||d(P,B,s,0)),pr(_,P),_.pendingBranch=null,_.isInFallback=!1;let R=_.parent,z=!1;for(;R;){if(R.pendingBranch){R.effects.push(...T),z=!0;break}R=R.parent}!z&&!W&&ds(T),_.effects=[],v&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!S&&t.resolve()),lo(N,"onResolve")},fallback(x){if(!_.pendingBranch)return;const{vnode:S,activeBranch:N,parentComponent:O,container:P,namespace:q}=_;lo(S,"onFallback");const T=g(N),$=()=>{_.isInFallback&&(f(null,x,P,T,O,null,q,a,l),pr(_,x))},B=x.transition&&x.transition.mode==="out-in";B&&(N.transition.afterLeave=$),_.isInFallback=!0,p(N,O,null,!0),B||$()},move(x,S,N){_.activeBranch&&d(_.activeBranch,x,S,N),_.container=x},next(){return _.activeBranch&&g(_.activeBranch)},registerDep(x,S,N){const O=!!_.pendingBranch;O&&_.deps++;const P=x.vnode.el;x.asyncDep.catch(q=>{Sr(q,x,0)}).then(q=>{if(x.isUnmounted||_.isUnmounted||_.pendingId!==x.suspenseId)return;x.asyncResolved=!0;const{vnode:T}=x;Ki(x,q,!1),P&&(T.el=P);const $=!P&&x.subTree.el;S(x,T,h(P||x.subTree.el),P?null:g(x.subTree),_,i,N),$&&y($),Ys(x,T.el),O&&--_.deps===0&&_.resolve()})},unmount(x,S){_.isUnmounted=!0,_.activeBranch&&p(_.activeBranch,n,x,S),_.pendingBranch&&p(_.pendingBranch,n,x,S)}};return _}function gm(e,t,n,r,o,s,i,a,l){const u=t.suspense=Zf(t,r,n,e.parentNode,document.createElement("div"),null,o,s,i,a,!0),c=l(e,u.pendingBranch=t.ssContent,n,u,s,i);return u.deps===0&&u.resolve(!1,!0),c}function mm(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=Yl(r?n.default:n),e.ssFallback=r?Yl(n.fallback):ue(je)}function Yl(e){let t;if(ae(e)){const n=zn&&e._c;n&&(e._d=!1,Y()),e=e(),n&&(e._d=!0,t=Xe,td())}return X(e)&&(e=lm(e)),e=ft(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function ed(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):ds(e)}function pr(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e;let o=t.el;for(;!o&&t.component;)t=t.component.subTree,o=t.el;n.el=o,r&&r.subTree===n&&(r.vnode.el=o,Ys(r,o))}function ym(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ie=Symbol.for("v-fgt"),Bn=Symbol.for("v-txt"),je=Symbol.for("v-cmt"),hr=Symbol.for("v-stc"),Yr=[];let Xe=null;function Y(e=!1){Yr.push(Xe=e?null:[])}function td(){Yr.pop(),Xe=Yr[Yr.length-1]||null}let zn=1;function Ql(e,t=!1){zn+=e,e<0&&Xe&&t&&(Xe.hasOnce=!0)}function nd(e){return e.dynamicChildren=zn>0?Xe||lr:null,td(),zn>0&&Xe&&Xe.push(e),e}function yt(e,t,n,r,o,s){return nd(nl(e,t,n,r,o,s,!0))}function ne(e,t,n,r,o){return nd(ue(e,t,n,r,o,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function At(e,t){return e.type===t.type&&e.key===t.key}function YE(e){}const rd=({key:e})=>e??null,Qo=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Me(e)||Pe(e)||ae(e)?{i:qe,r:e,k:t,f:!!n}:e:null);function nl(e,t=null,n=null,r=0,o=null,s=e===Ie?0:1,i=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&rd(t),ref:t&&Qo(t),scopeId:Ks,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:qe};return a?(rl(l,n),s&128&&e.normalize(l)):n&&(l.shapeFlag|=Me(n)?8:16),zn>0&&!i&&Xe&&(l.patchFlag>0||s&6)&&l.patchFlag!==32&&Xe.push(l),l}const ue=bm;function bm(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===$f)&&(e=je),Cn(e)){const a=zt(e,t,!0);return n&&rl(a,n),zn>0&&!s&&Xe&&(a.shapeFlag&6?Xe[Xe.indexOf(e)]=a:Xe.push(a)),a.patchFlag=-2,a}if(xm(e)&&(e=e.__vccOpts),t){t=An(t);let{class:a,style:l}=t;a&&!Me(a)&&(t.class=Ke(a)),Ce(l)&&(Ua(l)&&!X(l)&&(l=Ae({},l)),t.style=cn(l))}const i=Me(e)?1:bs(e)?128:wf(e)?64:Ce(e)?4:ae(e)?2:0;return nl(e,t,n,r,o,i,s,!0)}function An(e){return e?Ua(e)||Bf(e)?Ae({},e):e:null}function zt(e,t,n=!1,r=!1){const{props:o,ref:s,patchFlag:i,children:a,transition:l}=e,u=t?Te(o||{},t):o,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&rd(u),ref:t&&t.ref?n&&s?X(s)?s.concat(Qo(t)):[s,Qo(t)]:Qo(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ie?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&zt(e.ssContent),ssFallback:e.ssFallback&&zt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&Sn(c,l.clone(c)),c}function mr(e=" ",t=0){return ue(Bn,null,e,t)}function QE(e,t){const n=ue(hr,null,e);return n.staticCount=t,n}function Ue(e="",t=!1){return t?(Y(),ne(je,null,e)):ue(je,null,e)}function ft(e){return e==null||typeof e=="boolean"?ue(je):X(e)?ue(Ie,null,e.slice()):Cn(e)?vn(e):ue(Bn,null,String(e))}function vn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:zt(e)}function rl(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),rl(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Bf(t)?t._ctx=qe:o===3&&qe&&(qe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:qe},n=32):(t=String(t),r&64?(n=16,t=[mr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Te(...e){const t={};for(let n=0;nVe||qe;let vs,qi;{const e=Fs(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),s=>{o.length>1?o.forEach(i=>i(s)):o[0](s)}};vs=t("__VUE_INSTANCE_SETTERS__",n=>Ve=n),qi=t("__VUE_SSR_SETTERS__",n=>yr=n)}const Kn=e=>{const t=Ve;return vs(e),e.scope.on(),()=>{e.scope.off(),vs(t)}},zi=()=>{Ve&&Ve.scope.off(),vs(null)};function sd(e){return e.vnode.shapeFlag&4}let yr=!1;function id(e,t=!1,n=!1){t&&qi(t);const{props:r,children:o}=e.vnode,s=sd(e);Gg(e,r,s,t),Xg(e,o,n||t);const i=s?_m(e,t):void 0;return t&&qi(!1),i}function _m(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fi);const{setup:r}=n;if(r){on();const o=e.setupContext=r.length>1?ld(e):null,s=Kn(e),i=bo(r,e,0,[e.props,o]),a=ja(i);if(sn(),s(),(a||e.sp)&&!xn(e)&&Ka(e),a){if(i.then(zi,zi),t)return i.then(l=>{Ki(e,l,t)}).catch(l=>{Sr(l,e,0)});e.asyncDep=i}else Ki(e,i,t)}else ad(e,t)}function Ki(e,t,n){ae(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ce(t)&&(e.setupState=df(t)),ad(e,n)}let ws,Wi;function XE(e){ws=e,Wi=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,Hg))}}const ZE=()=>!ws;function ad(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const o=r.template||Qa(e).template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:a,compilerOptions:l}=r,u=Ae(Ae({isCustomElement:s,delimiters:a},i),l);r.render=ws(o,u)}}e.render=r.render||_t,Wi&&Wi(e)}{const o=Kn(e);on();try{Bg(e)}finally{sn(),o()}}}const km={get(e,t){return Qe(e,"get",""),e[t]}};function ld(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,km),slots:e.slots,emit:e.emit,expose:t}}function _o(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(df(Va(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jr)return Jr[n](e)},has(t,n){return n in t||n in Jr}})):e.proxy}function Gi(e,t=!0){return ae(e)?e.displayName||e.name:e.name||t&&e.__name}function xm(e){return ae(e)&&"__vccOpts"in e}const F=(e,t)=>dg(e,t,yr);function ke(e,t,n){const r=arguments.length;return r===2?Ce(t)&&!X(t)?Cn(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),ue(e,t,n))}function eS(){}function tS(e,t,n,r){const o=n[r];if(o&&Em(o,e))return o;const s=t();return s.memo=e.slice(),s.cacheIndex=r,n[r]=s}function Em(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let r=0;r0&&Xe&&Xe.push(e),!0}const Sm="3.5.16",nS=_t,rS=yg,oS=sr,sS=bf,Cm={createComponentInstance:od,setupComponent:id,renderComponentRoot:Yo,setCurrentRenderingInstance:oo,isVNode:Cn,normalizeVNode:ft,getComponentPublicInstance:_o,ensureValidVNode:Ya,pushWarningContext:gg,popWarningContext:mg},iS=Cm,aS=null,lS=null,cS=null;/** +* @vue/runtime-dom v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ji;const Xl=typeof window<"u"&&window.trustedTypes;if(Xl)try{Ji=Xl.createPolicy("vue",{createHTML:e=>e})}catch{}const cd=Ji?e=>Ji.createHTML(e):e=>e,Tm="http://www.w3.org/2000/svg",Pm="http://www.w3.org/1998/Math/MathML",Qt=typeof document<"u"?document:null,Zl=Qt&&Qt.createElement("template"),Am={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?Qt.createElementNS(Tm,e):t==="mathml"?Qt.createElementNS(Pm,e):n?Qt.createElement(e,{is:n}):Qt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Zl.innerHTML=cd(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const a=Zl.content;if(r==="svg"||r==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},pn="transition",$r="animation",br=Symbol("_vtc"),ud={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},fd=Ae({},Sf,ud),Om=e=>(e.displayName="Transition",e.props=fd,e),Rm=Om((e,{slots:t})=>ke(kg,dd(e),t)),Rn=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},ec=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function dd(e){const t={};for(const T in e)T in ud||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:l=s,appearActiveClass:u=i,appearToClass:c=a,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,g=Im(o),h=g&&g[0],y=g&&g[1],{onBeforeEnter:k,onEnter:v,onEnterCancelled:m,onLeave:b,onLeaveCancelled:_,onBeforeAppear:x=k,onAppear:S=v,onAppearCancelled:N=m}=t,O=(T,$,B,W)=>{T._enterCancelled=W,gn(T,$?c:a),gn(T,$?u:i),B&&B()},P=(T,$)=>{T._isLeaving=!1,gn(T,f),gn(T,p),gn(T,d),$&&$()},q=T=>($,B)=>{const W=T?S:v,R=()=>O($,T,B);Rn(W,[$,R]),tc(()=>{gn($,T?l:s),Bt($,T?c:a),ec(W)||nc($,r,h,R)})};return Ae(t,{onBeforeEnter(T){Rn(k,[T]),Bt(T,s),Bt(T,i)},onBeforeAppear(T){Rn(x,[T]),Bt(T,l),Bt(T,u)},onEnter:q(!1),onAppear:q(!0),onLeave(T,$){T._isLeaving=!0;const B=()=>P(T,$);Bt(T,f),T._enterCancelled?(Bt(T,d),Yi()):(Yi(),Bt(T,d)),tc(()=>{T._isLeaving&&(gn(T,f),Bt(T,p),ec(b)||nc(T,r,y,B))}),Rn(b,[T,B])},onEnterCancelled(T){O(T,!1,void 0,!0),Rn(m,[T])},onAppearCancelled(T){O(T,!0,void 0,!0),Rn(N,[T])},onLeaveCancelled(T){P(T),Rn(_,[T])}})}function Im(e){if(e==null)return null;if(Ce(e))return[gi(e.enter),gi(e.leave)];{const t=gi(e);return[t,t]}}function gi(e){return is(e)}function Bt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[br]||(e[br]=new Set)).add(t)}function gn(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[br];n&&(n.delete(t),n.size||(e[br]=void 0))}function tc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Mm=0;function nc(e,t,n,r){const o=e._endId=++Mm,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:a,propCount:l}=pd(e,t);if(!i)return r();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,d),s()},d=p=>{p.target===e&&++c>=l&&f()};setTimeout(()=>{c(n[g]||"").split(", "),o=r(`${pn}Delay`),s=r(`${pn}Duration`),i=rc(o,s),a=r(`${$r}Delay`),l=r(`${$r}Duration`),u=rc(a,l);let c=null,f=0,d=0;t===pn?i>0&&(c=pn,f=i,d=s.length):t===$r?u>0&&(c=$r,f=u,d=l.length):(f=Math.max(i,u),c=f>0?i>u?pn:$r:null,d=c?c===pn?s.length:l.length:0);const p=c===pn&&/\b(transform|all)(,|$)/.test(r(`${pn}Property`).toString());return{type:c,timeout:f,propCount:d,hasTransform:p}}function rc(e,t){for(;e.lengthoc(n)+oc(e[r])))}function oc(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Yi(){return document.body.offsetHeight}function $m(e,t,n){const r=e[br];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const _s=Symbol("_vod"),hd=Symbol("_vsh"),Nm={beforeMount(e,{value:t},{transition:n}){e[_s]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Nr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Nr(e,!0),r.enter(e)):r.leave(e,()=>{Nr(e,!1)}):Nr(e,t))},beforeUnmount(e,{value:t}){Nr(e,t)}};function Nr(e,t){e.style.display=t?e[_s]:"none",e[hd]=!t}function Lm(){Nm.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const gd=Symbol("");function uS(e){const t=Fe();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(s=>ks(s,o))},r=()=>{const o=e(t.proxy);t.ce?ks(t.ce,o):Qi(t.subTree,o),n(o)};If(()=>{ds(r)}),jt(()=>{Ne(r,_t,{flush:"post"});const o=new MutationObserver(r);o.observe(t.subTree.el.parentNode,{childList:!0}),Xn(()=>o.disconnect())})}function Qi(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Qi(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)ks(e.el,t);else if(e.type===Ie)e.children.forEach(n=>Qi(n,t));else if(e.type===hr){let{el:n,anchor:r}=e;for(;n&&(ks(n,t),n!==r);)n=n.nextSibling}}function ks(e,t){if(e.nodeType===1){const n=e.style;let r="";for(const o in t)n.setProperty(`--${o}`,t[o]),r+=`--${o}: ${t[o]};`;n[gd]=r}}const jm=/(^|;)\s*display\s*:/;function Dm(e,t,n){const r=e.style,o=Me(n);let s=!1;if(n&&!o){if(t)if(Me(t))for(const i of t.split(";")){const a=i.slice(0,i.indexOf(":")).trim();n[a]==null&&Xo(r,a,"")}else for(const i in t)n[i]==null&&Xo(r,i,"");for(const i in n)i==="display"&&(s=!0),Xo(r,i,n[i])}else if(o){if(t!==n){const i=r[gd];i&&(n+=";"+i),r.cssText=n,s=jm.test(n)}}else t&&e.removeAttribute("style");_s in e&&(e[_s]=s?r.display:"",e[hd]&&(r.display="none"))}const sc=/\s*!important$/;function Xo(e,t,n){if(X(n))n.forEach(r=>Xo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Fm(e,t);sc.test(n)?e.setProperty(dt(r),n.replace(sc,""),"important"):e[r]=n}}const ic=["Webkit","Moz","ms"],mi={};function Fm(e,t){const n=mi[t];if(n)return n;let r=We(t);if(r!=="filter"&&r in e)return mi[t]=r;r=Ds(r);for(let o=0;oyi||(Vm.then(()=>yi=0),yi=Date.now());function zm(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Nt(Km(r,n.value),t,5,[r])};return n.value=e,n.attached=qm(),n}function Km(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const dc=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wm=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?$m(e,r,i):t==="style"?Dm(e,n,r):mo(t)?Na(t)||Bm(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gm(e,t,r,i))?(cc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&lc(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Me(r))?cc(e,We(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),lc(e,t,r,i))};function Gm(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&dc(t)&&ae(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return dc(t)&&Me(n)?!1:t in e}const pc={};/*! #__NO_SIDE_EFFECTS__ */function Jm(e,t,n){const r=fe(e,t);Ls(r)&&Ae(r,t);class o extends ol{constructor(i){super(r,i,n)}}return o.def=r,o}/*! #__NO_SIDE_EFFECTS__ */const fS=(e,t)=>Jm(e,t,Sd),Ym=typeof HTMLElement<"u"?HTMLElement:class{};class ol extends Ym{constructor(t,n={},r=Zi){super(),this._def=t,this._props=n,this._createApp=r,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&r!==Zi?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow({mode:"open"}),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof ol){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,tt(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null)})}_resolveDef(){if(this._pendingResolve)return;for(let r=0;r{for(const o of r)this._setAttr(o.attributeName)}),this._ob.observe(this,{attributes:!0});const t=(r,o=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:s,styles:i}=r;let a;if(s&&!X(s))for(const l in s){const u=s[l];(u===Number||u&&u.type===Number)&&(l in this._props&&(this._props[l]=is(this._props[l])),(a||(a=Object.create(null)))[We(l)]=!0)}this._numberProps=a,this._resolveProps(r),this.shadowRoot&&this._applyStyles(i),this._mount(r)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(r=>t(this._def=r,!0)):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const r in n)ye(this,r)||Object.defineProperty(this,r,{get:()=>A(n[r])})}_resolveProps(t){const{props:n}=t,r=X(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&r.includes(o)&&this._setProp(o,this[o]);for(const o of r.map(We))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(s){this._setProp(o,s,!0,!0)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let r=n?this.getAttribute(t):pc;const o=We(t);n&&this._numberProps&&this._numberProps[o]&&(r=is(r)),this._setProp(o,r,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,r=!0,o=!1){if(n!==this._props[t]&&(n===pc?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),r)){const s=this._ob;s&&s.disconnect(),n===!0?this.setAttribute(dt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(dt(t),n+""):n||this.removeAttribute(dt(t)),s&&s.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),fy(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=ue(this._def,Ae(t,this._props));return this._instance||(n.ce=r=>{this._instance=r,r.ce=this,r.isCE=!0;const o=(s,i)=>{this.dispatchEvent(new CustomEvent(s,Ls(i[0])?Ae({detail:i},i[0]):{detail:i}))};r.emit=(s,...i)=>{o(s,i),dt(s)!==s&&o(dt(s),i)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const r=this._nonce;for(let o=t.length-1;o>=0;o--){const s=document.createElement("style");r&&s.setAttribute("nonce",r),s.textContent=t[o],this.shadowRoot.prepend(s)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const r=n.nodeType===1&&n.getAttribute("slot")||"default";(t[r]||(t[r]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=(this._teleportTarget||this).querySelectorAll("slot"),n=this._instance.type.__scopeId;for(let r=0;r(delete e.props.mode,e),Zm=Xm({name:"TransitionGroup",props:Ae({},fd,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Fe(),r=Ef();let o,s;return Wa(()=>{if(!o.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!ry(o[0].el,n.vnode.el,i)){o=[];return}o.forEach(ey),o.forEach(ty);const a=o.filter(ny);Yi(),a.forEach(l=>{const u=l.el,c=u.style;Bt(u,i),c.transform=c.webkitTransform=c.transitionDuration="";const f=u[xs]=d=>{d&&d.target!==u||(!d||/transform$/.test(d.propertyName))&&(u.removeEventListener("transitionend",f),u[xs]=null,gn(u,i))};u.addEventListener("transitionend",f)}),o=[]}),()=>{const i=me(e),a=dd(i);let l=i.tag||Ie;if(o=[],s)for(let u=0;u{a.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(a=>a&&r.classList.add(a)),r.style.display="none";const s=t.nodeType===1?t:t.parentNode;s.appendChild(r);const{hasTransform:i}=pd(r);return s.removeChild(r),i}const Tn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return X(t)?n=>fr(t,n):t};function oy(e){e.target.composing=!0}function gc(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const xt=Symbol("_assign"),Xi={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[xt]=Tn(o);const s=r||o.props&&o.props.type==="number";tn(e,t?"change":"input",i=>{if(i.target.composing)return;let a=e.value;n&&(a=a.trim()),s&&(a=ss(a)),e[xt](a)}),n&&tn(e,"change",()=>{e.value=e.value.trim()}),t||(tn(e,"compositionstart",oy),tn(e,"compositionend",gc),tn(e,"change",gc))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:o,number:s}},i){if(e[xt]=Tn(i),e.composing)return;const a=(s||e.type==="number")&&!/^0\d/.test(e.value)?ss(e.value):e.value,l=t??"";a!==l&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||o&&e.value.trim()===l)||(e.value=l))}},bd={deep:!0,created(e,t,n){e[xt]=Tn(n),tn(e,"change",()=>{const r=e._modelValue,o=vr(e),s=e.checked,i=e[xt];if(X(r)){const a=Hs(r,o),l=a!==-1;if(s&&!l)i(r.concat(o));else if(!s&&l){const u=[...r];u.splice(a,1),i(u)}}else if(Jn(r)){const a=new Set(r);s?a.add(o):a.delete(o),i(a)}else i(wd(e,s))})},mounted:mc,beforeUpdate(e,t,n){e[xt]=Tn(n),mc(e,t,n)}};function mc(e,{value:t,oldValue:n},r){e._modelValue=t;let o;if(X(t))o=Hs(t,r.props.value)>-1;else if(Jn(t))o=t.has(r.props.value);else{if(t===n)return;o=En(t,wd(e,!0))}e.checked!==o&&(e.checked=o)}const vd={created(e,{value:t},n){e.checked=En(t,n.props.value),e[xt]=Tn(n),tn(e,"change",()=>{e[xt](vr(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[xt]=Tn(r),t!==n&&(e.checked=En(t,r.props.value))}},sy={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=Jn(t);tn(e,"change",()=>{const s=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?ss(vr(i)):vr(i));e[xt](e.multiple?o?new Set(s):s:s[0]),e._assigning=!0,tt(()=>{e._assigning=!1})}),e[xt]=Tn(r)},mounted(e,{value:t}){yc(e,t)},beforeUpdate(e,t,n){e[xt]=Tn(n)},updated(e,{value:t}){e._assigning||yc(e,t)}};function yc(e,t){const n=e.multiple,r=X(t);if(!(n&&!r&&!Jn(t))){for(let o=0,s=e.options.length;oString(u)===String(a)):i.selected=Hs(t,a)>-1}else i.selected=t.has(a);else if(En(vr(i),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function vr(e){return"_value"in e?e._value:e.value}function wd(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const iy={created(e,t,n){Lo(e,t,n,null,"created")},mounted(e,t,n){Lo(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){Lo(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){Lo(e,t,n,r,"updated")}};function _d(e,t){switch(e){case"SELECT":return sy;case"TEXTAREA":return Xi;default:switch(t){case"checkbox":return bd;case"radio":return vd;default:return Xi}}}function Lo(e,t,n,r,o){const i=_d(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}function ay(){Xi.getSSRProps=({value:e})=>({value:e}),vd.getSSRProps=({value:e},t)=>{if(t.props&&En(t.props.value,e))return{checked:!0}},bd.getSSRProps=({value:e},t)=>{if(X(e)){if(t.props&&Hs(e,t.props.value)>-1)return{checked:!0}}else if(Jn(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},iy.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=_d(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const ly=["ctrl","shift","alt","meta"],cy={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ly.some(n=>e[`${n}Key`]&&!t.includes(n))},Zo=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(o,...s)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=dt(o.key);if(t.some(i=>i===s||uy[i]===s))return e(o)})},kd=Ae({patchProp:Wm},Am);let Qr,bc=!1;function xd(){return Qr||(Qr=em(kd))}function Ed(){return Qr=bc?Qr:tm(kd),bc=!0,Qr}const fy=(...e)=>{xd().render(...e)},mS=(...e)=>{Ed().hydrate(...e)},Zi=(...e)=>{const t=xd().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Td(r);if(!o)return;const s=t._component;!ae(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,Cd(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t},Sd=(...e)=>{const t=Ed().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Td(r);if(o)return n(o,!0,Cd(o))},t};function Cd(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Td(e){return Me(e)?document.querySelector(e):e}let vc=!1;const yS=()=>{vc||(vc=!0,ay(),Lm())},dy=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,py=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,hy=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function gy(e,t){if(e==="__proto__"||e==="constructor"&&t&&typeof t=="object"&&"prototype"in t){my(e);return}return t}function my(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function co(e,t={}){if(typeof e!="string")return e;if(e[0]==='"'&&e[e.length-1]==='"'&&e.indexOf("\\")===-1)return e.slice(1,-1);const n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case"true":return!0;case"false":return!1;case"undefined":return;case"null":return null;case"nan":return Number.NaN;case"infinity":return Number.POSITIVE_INFINITY;case"-infinity":return Number.NEGATIVE_INFINITY}if(!hy.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(dy.test(e)||py.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,gy)}return JSON.parse(e)}catch(r){if(t.strict)throw r;return e}}const yy=/#/g,by=/&/g,vy=/\//g,wy=/=/g,sl=/\+/g,_y=/%5e/gi,ky=/%60/gi,xy=/%7c/gi,Ey=/%20/gi;function Sy(e){return encodeURI(""+e).replace(xy,"|")}function ea(e){return Sy(typeof e=="string"?e:JSON.stringify(e)).replace(sl,"%2B").replace(Ey,"+").replace(yy,"%23").replace(by,"%26").replace(ky,"`").replace(_y,"^").replace(vy,"%2F")}function bi(e){return ea(e).replace(wy,"%3D")}function Es(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function Cy(e){return Es(e.replace(sl," "))}function Ty(e){return Es(e.replace(sl," "))}function il(e=""){const t=Object.create(null);e[0]==="?"&&(e=e.slice(1));for(const n of e.split("&")){const r=n.match(/([^=]+)=?(.*)/)||[];if(r.length<2)continue;const o=Cy(r[1]);if(o==="__proto__"||o==="constructor")continue;const s=Ty(r[2]||"");t[o]===void 0?t[o]=s:Array.isArray(t[o])?t[o].push(s):t[o]=[t[o],s]}return t}function Py(e,t){return(typeof t=="number"||typeof t=="boolean")&&(t=String(t)),t?Array.isArray(t)?t.map(n=>`${bi(e)}=${ea(n)}`).join("&"):`${bi(e)}=${ea(t)}`:bi(e)}function Ay(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>Py(t,e[t])).filter(Boolean).join("&")}const Oy=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,Ry=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,Iy=/^([/\\]\s*){2,}[^/\\]/,My=/^[\s\0]*(blob|data|javascript|vbscript):$/i,$y=/\/$|\/\?|\/#/,Ny=/^\.?\//;function fn(e,t={}){return typeof t=="boolean"&&(t={acceptRelative:t}),t.strict?Oy.test(e):Ry.test(e)||(t.acceptRelative?Iy.test(e):!1)}function Ly(e){return!!e&&My.test(e)}function ta(e="",t){return t?$y.test(e):e.endsWith("/")}function wr(e="",t){if(!t)return(ta(e)?e.slice(0,-1):e)||"/";if(!ta(e,!0))return e||"/";let n=e,r="";const o=e.indexOf("#");o!==-1&&(n=e.slice(0,o),r=e.slice(o));const[s,...i]=n.split("?");return((s.endsWith("/")?s.slice(0,-1):s)||"/")+(i.length>0?`?${i.join("?")}`:"")+r}function Pd(e="",t){if(!t)return e.endsWith("/")?e:e+"/";if(ta(e,!0))return e||"/";let n=e,r="";const o=e.indexOf("#");if(o!==-1&&(n=e.slice(0,o),r=e.slice(o),!n))return r;const[s,...i]=n.split("?");return s+"/"+(i.length>0?`?${i.join("?")}`:"")+r}function jy(e,t){if(Od(t)||fn(e))return e;const n=wr(t);return e.startsWith(n)?e:Qs(n,e)}function wc(e,t){if(Od(t))return e;const n=wr(t);if(!e.startsWith(n))return e;const r=e.slice(n.length);return r[0]==="/"?r:"/"+r}function Ad(e,t){const n=Md(e),r={...il(n.search),...t};return n.search=Ay(r),Hy(n)}function Od(e){return!e||e==="/"}function Dy(e){return e&&e!=="/"}function Qs(e,...t){let n=e||"";for(const r of t.filter(o=>Dy(o)))if(n){const o=r.replace(Ny,"");n=Pd(n)+o}else n=r;return n}function Rd(...e){var i,a,l,u;const t=/\/(?!\/)/,n=e.filter(Boolean),r=[];let o=0;for(const c of n)if(!(!c||c==="/")){for(const[f,d]of c.split(t).entries())if(!(!d||d===".")){if(d===".."){if(r.length===1&&fn(r[0]))continue;r.pop(),o--;continue}if(f===1&&((i=r[r.length-1])!=null&&i.endsWith(":/"))){r[r.length-1]+="/"+d;continue}r.push(d),o++}}let s=r.join("/");return o>=0?(a=n[0])!=null&&a.startsWith("/")&&!s.startsWith("/")?s="/"+s:(l=n[0])!=null&&l.startsWith("./")&&!s.startsWith("./")&&(s="./"+s):s="../".repeat(-1*o)+s,(u=n[n.length-1])!=null&&u.endsWith("/")&&!s.endsWith("/")&&(s+="/"),s}function Fy(e,t){return Es(wr(e))===Es(wr(t))}const Id=Symbol.for("ufo:protocolRelative");function Md(e="",t){const n=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(n){const[,f,d=""]=n;return{protocol:f.toLowerCase(),pathname:d,href:f+d,auth:"",host:"",search:"",hash:""}}if(!fn(e,{acceptRelative:!0}))return _c(e);const[,r="",o,s=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,i="",a=""]=s.match(/([^#/?]*)(.*)?/)||[];r==="file:"&&(a=a.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:l,search:u,hash:c}=_c(a);return{protocol:r.toLowerCase(),auth:o?o.slice(0,Math.max(0,o.length-1)):"",host:i,pathname:l,search:u,hash:c,[Id]:!r}}function _c(e=""){const[t="",n="",r=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:r}}function Hy(e){const t=e.pathname||"",n=e.search?(e.search.startsWith("?")?"":"?")+e.search:"",r=e.hash||"",o=e.auth?e.auth+"@":"",s=e.host||"";return(e.protocol||e[Id]?(e.protocol||"")+"//":"")+o+s+t+n+r}class By extends Error{constructor(t,n){super(t,n),this.name="FetchError",n!=null&&n.cause&&!this.cause&&(this.cause=n.cause)}}function Uy(e){var l,u,c,f,d;const t=((l=e.error)==null?void 0:l.message)||((u=e.error)==null?void 0:u.toString())||"",n=((c=e.request)==null?void 0:c.method)||((f=e.options)==null?void 0:f.method)||"GET",r=((d=e.request)==null?void 0:d.url)||String(e.request)||"/",o=`[${n}] ${JSON.stringify(r)}`,s=e.response?`${e.response.status} ${e.response.statusText}`:"",i=`${o}: ${s}${t?` ${t}`:""}`,a=new By(i,e.error?{cause:e.error}:void 0);for(const p of["request","options","response"])Object.defineProperty(a,p,{get(){return e[p]}});for(const[p,g]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(a,p,{get(){return e.response&&e.response[g]}});return a}const Vy=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function kc(e="GET"){return Vy.has(e.toUpperCase())}function qy(e){if(e===void 0)return!1;const t=typeof e;return t==="string"||t==="number"||t==="boolean"||t===null?!0:t!=="object"?!1:Array.isArray(e)?!0:e.buffer?!1:e.constructor&&e.constructor.name==="Object"||typeof e.toJSON=="function"}const zy=new Set(["image/svg","application/xml","application/xhtml","application/html"]),Ky=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function Wy(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return Ky.test(t)?"json":zy.has(t)||t.startsWith("text/")?"text":"blob"}function Gy(e,t,n,r){const o=Jy((t==null?void 0:t.headers)??(e==null?void 0:e.headers),n==null?void 0:n.headers,r);let s;return(n!=null&&n.query||n!=null&&n.params||t!=null&&t.params||t!=null&&t.query)&&(s={...n==null?void 0:n.params,...n==null?void 0:n.query,...t==null?void 0:t.params,...t==null?void 0:t.query}),{...n,...t,query:s,params:s,headers:o}}function Jy(e,t,n){if(!t)return new n(e);const r=new n(t);if(e)for(const[o,s]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))r.set(o,s);return r}async function jo(e,t){if(t)if(Array.isArray(t))for(const n of t)await n(e);else await t(e)}const Yy=new Set([408,409,425,429,500,502,503,504]),Qy=new Set([101,204,205,304]);function $d(e={}){const{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function o(a){const l=a.error&&a.error.name==="AbortError"&&!a.options.timeout||!1;if(a.options.retry!==!1&&!l){let c;typeof a.options.retry=="number"?c=a.options.retry:c=kc(a.options.method)?0:1;const f=a.response&&a.response.status||500;if(c>0&&(Array.isArray(a.options.retryStatusCodes)?a.options.retryStatusCodes.includes(f):Yy.has(f))){const d=typeof a.options.retryDelay=="function"?a.options.retryDelay(a):a.options.retryDelay||0;return d>0&&await new Promise(p=>setTimeout(p,d)),s(a.request,{...a.options,retry:c-1})}}const u=Uy(a);throw Error.captureStackTrace&&Error.captureStackTrace(u,s),u}const s=async function(l,u={}){const c={request:l,options:Gy(l,u,e.defaults,n),response:void 0,error:void 0};c.options.method&&(c.options.method=c.options.method.toUpperCase()),c.options.onRequest&&await jo(c,c.options.onRequest),typeof c.request=="string"&&(c.options.baseURL&&(c.request=jy(c.request,c.options.baseURL)),c.options.query&&(c.request=Ad(c.request,c.options.query),delete c.options.query),"query"in c.options&&delete c.options.query,"params"in c.options&&delete c.options.params),c.options.body&&kc(c.options.method)&&(qy(c.options.body)?(c.options.body=typeof c.options.body=="string"?c.options.body:JSON.stringify(c.options.body),c.options.headers=new n(c.options.headers||{}),c.options.headers.has("content-type")||c.options.headers.set("content-type","application/json"),c.options.headers.has("accept")||c.options.headers.set("accept","application/json")):("pipeTo"in c.options.body&&typeof c.options.body.pipeTo=="function"||typeof c.options.body.pipe=="function")&&("duplex"in c.options||(c.options.duplex="half")));let f;if(!c.options.signal&&c.options.timeout){const p=new r;f=setTimeout(()=>{const g=new Error("[TimeoutError]: The operation was aborted due to timeout");g.name="TimeoutError",g.code=23,p.abort(g)},c.options.timeout),c.options.signal=p.signal}try{c.response=await t(c.request,c.options)}catch(p){return c.error=p,c.options.onRequestError&&await jo(c,c.options.onRequestError),await o(c)}finally{f&&clearTimeout(f)}if((c.response.body||c.response._bodyInit)&&!Qy.has(c.response.status)&&c.options.method!=="HEAD"){const p=(c.options.parseResponse?"json":c.options.responseType)||Wy(c.response.headers.get("content-type")||"");switch(p){case"json":{const g=await c.response.text(),h=c.options.parseResponse||co;c.response._data=h(g);break}case"stream":{c.response._data=c.response.body||c.response._bodyInit;break}default:c.response._data=await c.response[p]()}}return c.options.onResponse&&await jo(c,c.options.onResponse),!c.options.ignoreResponseError&&c.response.status>=400&&c.response.status<600?(c.options.onResponseError&&await jo(c,c.options.onResponseError),await o(c)):c.response},i=async function(l,u){return(await s(l,u))._data};return i.raw=s,i.native=(...a)=>t(...a),i.create=(a={},l={})=>$d({...e,...l,defaults:{...e.defaults,...l.defaults,...a}}),i}const Ss=function(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")}(),Xy=Ss.fetch?(...e)=>Ss.fetch(...e):()=>Promise.reject(new Error("[ofetch] global.fetch is not supported!")),Zy=Ss.Headers,eb=Ss.AbortController,tb=$d({fetch:Xy,Headers:Zy,AbortController:eb}),nb=tb,rb=()=>{var e;return((e=window==null?void 0:window.__NUXT__)==null?void 0:e.config)||{}},Cs=rb().app,ob=()=>Cs.baseURL,sb=()=>Cs.buildAssetsDir,al=(...e)=>Rd(Nd(),sb(),...e),Nd=(...e)=>{const t=Cs.cdnURL||Cs.baseURL;return e.length?Rd(t,...e):t};globalThis.__buildAssetsURL=al,globalThis.__publicAssetsURL=Nd;globalThis.$fetch||(globalThis.$fetch=nb.create({baseURL:ob()}));"global"in globalThis||(globalThis.global=globalThis);function na(e,t={},n){for(const r in e){const o=e[r],s=n?`${n}:${r}`:r;typeof o=="object"&&o!==null?na(o,t,s):typeof o=="function"&&(t[s]=o)}return t}const ib={run:e=>e()},ab=()=>ib,Ld=typeof console.createTask<"u"?console.createTask:ab;function lb(e,t){const n=t.shift(),r=Ld(n);return e.reduce((o,s)=>o.then(()=>r.run(()=>s(...t))),Promise.resolve())}function cb(e,t){const n=t.shift(),r=Ld(n);return Promise.all(e.map(o=>r.run(()=>o(...t))))}function vi(e,t){for(const n of[...e])n(t)}class ub{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(t,n,r={}){if(!t||typeof n!="function")return()=>{};const o=t;let s;for(;this._deprecatedHooks[t];)s=this._deprecatedHooks[t],t=s.to;if(s&&!r.allowDeprecated){let i=s.message;i||(i=`${o} hook has been deprecated`+(s.to?`, please use ${s.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(i)||(console.warn(i),this._deprecatedMessages.add(i))}if(!n.name)try{Object.defineProperty(n,"name",{get:()=>"_"+t.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[t]=this._hooks[t]||[],this._hooks[t].push(n),()=>{n&&(this.removeHook(t,n),n=void 0)}}hookOnce(t,n){let r,o=(...s)=>(typeof r=="function"&&r(),r=void 0,o=void 0,n(...s));return r=this.hook(t,o),r}removeHook(t,n){if(this._hooks[t]){const r=this._hooks[t].indexOf(n);r!==-1&&this._hooks[t].splice(r,1),this._hooks[t].length===0&&delete this._hooks[t]}}deprecateHook(t,n){this._deprecatedHooks[t]=typeof n=="string"?{to:n}:n;const r=this._hooks[t]||[];delete this._hooks[t];for(const o of r)this.hook(t,o)}deprecateHooks(t){Object.assign(this._deprecatedHooks,t);for(const n in t)this.deprecateHook(n,t[n])}addHooks(t){const n=na(t),r=Object.keys(n).map(o=>this.hook(o,n[o]));return()=>{for(const o of r.splice(0,r.length))o()}}removeHooks(t){const n=na(t);for(const r in n)this.removeHook(r,n[r])}removeAllHooks(){for(const t in this._hooks)delete this._hooks[t]}callHook(t,...n){return n.unshift(t),this.callHookWith(lb,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(cb,t,...n)}callHookWith(t,n,...r){const o=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&vi(this._before,o);const s=t(n in this._hooks?[...this._hooks[n]]:[],r);return s instanceof Promise?s.finally(()=>{this._after&&o&&vi(this._after,o)}):(this._after&&o&&vi(this._after,o),s)}beforeEach(t){return this._before=this._before||[],this._before.push(t),()=>{if(this._before!==void 0){const n=this._before.indexOf(t);n!==-1&&this._before.splice(n,1)}}}afterEach(t){return this._after=this._after||[],this._after.push(t),()=>{if(this._after!==void 0){const n=this._after.indexOf(t);n!==-1&&this._after.splice(n,1)}}}}function jd(){return new ub}function fb(e={}){let t,n=!1;const r=i=>{if(t&&t!==i)throw new Error("Context conflict")};let o;if(e.asyncContext){const i=e.AsyncLocalStorage||globalThis.AsyncLocalStorage;i?o=new i:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}const s=()=>{if(o){const i=o.getStore();if(i!==void 0)return i}return t};return{use:()=>{const i=s();if(i===void 0)throw new Error("Context is not available");return i},tryUse:()=>s(),set:(i,a)=>{a||r(i),t=i,n=!0},unset:()=>{t=void 0,n=!1},call:(i,a)=>{r(i),t=i;try{return o?o.run(i,a):a()}finally{n||(t=void 0)}},async callAsync(i,a){t=i;const l=()=>{t=i},u=()=>t===i?l:void 0;ra.add(u);try{const c=o?o.run(i,a):a();return n||(t=void 0),await c}finally{ra.delete(u)}}}}function db(e={}){const t={};return{get(n,r={}){return t[n]||(t[n]=fb({...e,...r})),t[n]}}}const Ts=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof global<"u"?global:typeof window<"u"?window:{},xc="__unctx__",pb=Ts[xc]||(Ts[xc]=db()),hb=(e,t={})=>pb.get(e,t),Ec="__unctx_async_handlers__",ra=Ts[Ec]||(Ts[Ec]=new Set);function Un(e){const t=[];for(const o of ra){const s=o();s&&t.push(s)}const n=()=>{for(const o of t)o()};let r=e();return r&&typeof r=="object"&&"catch"in r&&(r=r.catch(o=>{throw n(),o})),[r,n]}const gb=!1,Sc=!1,mb=!1,yb={componentName:"NuxtLink",prefetch:!0,prefetchOn:{visibility:!0}},bb=null,vb="#__nuxt",Dd="nuxt-app",Cc=36e5,wb="vite:preloadError";function Fd(e=Dd){return hb(e,{asyncContext:!1})}const _b="__nuxt_plugin";function kb(e){var o;let t=0;const n={_id:e.id||Dd||"nuxt-app",_scope:Bs(),provide:void 0,globalName:"nuxt",versions:{get nuxt(){return"3.17.4"},get vue(){return n.vueApp.version}},payload:Ot({...((o=e.ssrContext)==null?void 0:o.payload)||{},data:Ot({}),state:et({}),once:new Set,_errors:Ot({})}),static:{data:{}},runWithContext(s){return n._scope.active&&!Yn()?n._scope.run(()=>Tc(n,s)):Tc(n,s)},isHydrating:!0,deferHydration(){if(!n.isHydrating)return()=>{};t++;let s=!1;return()=>{if(!s&&(s=!0,t--,t===0))return n.isHydrating=!1,n.callHook("app:suspense:resolve")}},_asyncDataPromises:{},_asyncData:Ot({}),_payloadRevivers:{},...e};{const s=window.__NUXT__;if(s)for(const i in s)switch(i){case"data":case"state":case"_errors":Object.assign(n.payload[i],s[i]);break;default:n.payload[i]=s[i]}}n.hooks=jd(),n.hook=n.hooks.hook,n.callHook=n.hooks.callHook,n.provide=(s,i)=>{const a="$"+s;Do(n,a,i),Do(n.vueApp.config.globalProperties,a,i)},Do(n.vueApp,"$nuxt",n),Do(n.vueApp.config.globalProperties,"$nuxt",n);{window.addEventListener(wb,i=>{n.callHook("app:chunkError",{error:i.payload}),i.payload.message.includes("Unable to preload CSS")&&i.preventDefault()}),window.useNuxtApp||(window.useNuxtApp=xe);const s=n.hook("app:error",(...i)=>{console.error("[nuxt] error caught during app initialization",...i)});n.hook("app:mounted",s)}const r=n.payload.config;return n.provide("config",r),n}function xb(e,t){t.hooks&&e.hooks.addHooks(t.hooks)}async function Eb(e,t){if(typeof t=="function"){const{provide:n}=await e.runWithContext(()=>t(e))||{};if(n&&typeof n=="object")for(const r in n)e.provide(r,n[r])}}async function Sb(e,t){const n=new Set,r=[],o=[],s=[];let i=0;async function a(l){var c;const u=((c=l.dependsOn)==null?void 0:c.filter(f=>t.some(d=>d._name===f)&&!n.has(f)))??[];if(u.length>0)r.push([new Set(u),l]);else{const f=Eb(e,l).then(async()=>{l._name&&(n.add(l._name),await Promise.all(r.map(async([d,p])=>{d.has(l._name)&&(d.delete(l._name),d.size===0&&(i++,await a(p)))})))});l.parallel?o.push(f.catch(d=>s.push(d))):await f}}for(const l of t)xb(e,l);for(const l of t)await a(l);if(await Promise.all(o),i)for(let l=0;l{}),e,{[_b]:!0,_name:t})}function Tc(e,t,n){const r=()=>t();return Fd(e._id).set(e),e.vueApp.runWithContext(r)}function Hd(e){var n;let t;return Gs()&&(t=(n=Fe())==null?void 0:n.appContext.app.$nuxt),t||(t=Fd(e).tryUse()),t||null}function xe(e){const t=Hd(e);if(!t)throw new Error("[nuxt] instance unavailable");return t}function Cr(e){return xe().$config}function Do(e,t,n){Object.defineProperty(e,t,{get:()=>n})}function Cb(e,t){return{ctx:{table:e},matchAll:n=>Ud(n,e)}}function Bd(e){const t={};for(const n in e)t[n]=n==="dynamic"?new Map(Object.entries(e[n]).map(([r,o])=>[r,Bd(o)])):new Map(Object.entries(e[n]));return t}function Tb(e){return Cb(Bd(e))}function Ud(e,t,n){e.endsWith("/")&&(e=e.slice(0,-1)||"/");const r=[];for(const[s,i]of Pc(t.wildcard))(e===s||e.startsWith(s+"/"))&&r.push(i);for(const[s,i]of Pc(t.dynamic))if(e.startsWith(s+"/")){const a="/"+e.slice(s.length).split("/").splice(2).join("/");r.push(...Ud(a,i))}const o=t.static.get(e);return o&&r.push(o),r.filter(Boolean)}function Pc(e){return[...e.entries()].sort((t,n)=>t[0].length-n[0].length)}function wi(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function oa(e,t,n=".",r){if(!wi(t))return oa(e,{},n,r);const o=Object.assign({},t);for(const s in e){if(s==="__proto__"||s==="constructor")continue;const i=e[s];i!=null&&(r&&r(o,s,i,n)||(Array.isArray(i)&&Array.isArray(o[s])?o[s]=[...i,...o[s]]:wi(i)&&wi(o[s])?o[s]=oa(i,o[s],(n?`${n}.`:"")+s.toString(),r):o[s]=i))}return o}function Vd(e){return(...t)=>t.reduce((n,r)=>oa(n,r,"",e),{})}const ko=Vd(),Pb=Vd((e,t,n)=>{if(e[t]!==void 0&&typeof n=="function")return e[t]=n(e[t]),!0});function Ab(e,t){try{return t in e}catch{return!1}}class sa extends Error{constructor(n,r={}){super(n,r);dn(this,"statusCode",500);dn(this,"fatal",!1);dn(this,"unhandled",!1);dn(this,"statusMessage");dn(this,"data");dn(this,"cause");r.cause&&!this.cause&&(this.cause=r.cause)}toJSON(){const n={message:this.message,statusCode:ia(this.statusCode,500)};return this.statusMessage&&(n.statusMessage=qd(this.statusMessage)),this.data!==void 0&&(n.data=this.data),n}}dn(sa,"__h3_error__",!0);function Ob(e){if(typeof e=="string")return new sa(e);if(Rb(e))return e;const t=new sa(e.message??e.statusMessage??"",{cause:e.cause||e});if(Ab(e,"stack"))try{Object.defineProperty(t,"stack",{get(){return e.stack}})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=ia(e.statusCode,t.statusCode):e.status&&(t.statusCode=ia(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const n=t.statusMessage;qd(t.statusMessage)!==n&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return e.fatal!==void 0&&(t.fatal=e.fatal),e.unhandled!==void 0&&(t.unhandled=e.unhandled),t}function Rb(e){var t;return((t=e==null?void 0:e.constructor)==null?void 0:t.__h3_error__)===!0}const Ib=/[^\u0009\u0020-\u007E]/g;function qd(e=""){return e.replace(Ib,"")}function ia(e,t=200){return!e||(typeof e=="string"&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}const zd=Symbol("layout-meta"),Wn=Symbol("route"),nt=()=>{var e;return(e=xe())==null?void 0:e.$router},xo=()=>Gs()?Se(Wn,xe()._route):xe()._route;function bS(e){return e}const Mb=()=>{try{if(xe()._processingMiddleware)return!0}catch{return!1}return!1},ll=(e,t)=>{e||(e="/");const n=typeof e=="string"?e:"path"in e?aa(e):nt().resolve(e).href;if(t!=null&&t.open){const{target:l="_blank",windowFeatures:u={}}=t.open,c=Object.entries(u).filter(([f,d])=>d!==void 0).map(([f,d])=>`${f.toLowerCase()}=${d}`).join(", ");return open(n,l,c),Promise.resolve()}const r=fn(n,{acceptRelative:!0}),o=(t==null?void 0:t.external)||r;if(o){if(!(t!=null&&t.external))throw new Error("Navigating to an external URL is not allowed by default. Use `navigateTo(url, { external: true })`.");const{protocol:l}=new URL(n,window.location.href);if(l&&Ly(l))throw new Error(`Cannot navigate to a URL with '${l}' protocol.`)}const s=Mb();if(!o&&s){if(t!=null&&t.replace){if(typeof e=="string"){const{pathname:l,search:u,hash:c}=Md(e);return{path:l,...u&&{query:il(u)},...c&&{hash:c},replace:!0}}return{...e,replace:!0}}return e}const i=nt(),a=xe();return o?(a._scope.stop(),t!=null&&t.replace?location.replace(n):location.href=n,s?a.isHydrating?new Promise(()=>{}):!1:Promise.resolve()):t!=null&&t.replace?i.replace(e):i.push(e)};function aa(e){return Ad(e.path||"",e.query||{})+(e.hash||"")}const Kd="__nuxt_error",Xs=()=>Rt(xe().payload,"error"),Nn=e=>{const t=Vn(e);try{const n=xe(),r=Xs();n.hooks.callHook("app:error",t),r.value||(r.value=t)}catch{throw t}return t},$b=async(e={})=>{const t=xe(),n=Xs();t.callHook("app:error:cleared",e),e.redirect&&await nt().replace(e.redirect),n.value=bb},Wd=e=>!!e&&typeof e=="object"&&Kd in e,Vn=e=>{const t=Ob(e);return Object.defineProperty(t,Kd,{value:!0,configurable:!1,writable:!1}),t};function Ac(e){const t=Lb(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let o=0;o>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const jb=-1,Db=-2,Fb=-3,Hb=-4,Bb=-5,Ub=-6;function Vb(e,t){return qb(JSON.parse(e),t)}function qb(e,t){if(typeof e=="number")return o(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function o(s,i=!1){if(s===jb)return;if(s===Fb)return NaN;if(s===Hb)return 1/0;if(s===Bb)return-1/0;if(s===Ub)return-0;if(i)throw new Error("Invalid input");if(s in r)return r[s];const a=n[s];if(!a||typeof a!="object")r[s]=a;else if(Array.isArray(a))if(typeof a[0]=="string"){const l=a[0],u=t==null?void 0:t[l];if(u)return r[s]=u(o(a[1]));switch(l){case"Date":r[s]=new Date(a[1]);break;case"Set":const c=new Set;r[s]=c;for(let p=1;p`${nn(e)}=${t}`}},refresh:{metaKey:"http-equiv",unpack:{entrySeparator:";",resolve:({key:e,value:t})=>e==="seconds"?`${t}`:void 0}},robots:{unpack:{entrySeparator:", ",resolve:({key:e,value:t})=>typeof t=="boolean"?nn(e):`${nn(e)}:${t}`}},contentSecurityPolicy:{metaKey:"http-equiv",unpack:{entrySeparator:"; ",resolve:({key:e,value:t})=>`${nn(e)} ${t}`}},charset:{}};function nn(e){const t=e.replace(/([A-Z])/g,"-$1").toLowerCase(),n=t.indexOf("-");return n===-1?t:uo.META.has(t.slice(0,n))||uo.OG.has(t.slice(0,n))?e.replace(/([A-Z])/g,":$1").toLowerCase():t}function Jd(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>String(n)!=="false"&&t))}function la(e){return Array.isArray(e)?e.map(la):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[nn(t),la(n)]))}function Yd(e,t={}){const{entrySeparator:n="",keyValueSeparator:r="",wrapValue:o,resolve:s}=t;return Object.entries(e).map(([i,a])=>{if(s){const u=s({key:i,value:a});if(u!==void 0)return u}const l=typeof a=="object"?Yd(a,t):typeof a=="number"?a.toString():typeof a=="string"&&o?`${o}${a.replace(new RegExp(o,"g"),`\\${o}`)}${o}`:a;return`${i}${r}${l}`}).join(n)}function Rc(e,t){const n=Jd(t),r=nn(e),o=Qd(r);if(!cl.has(r))return[{[o]:r,...n}];const s=Object.fromEntries(Object.entries(n).map(([i,a])=>[`${e}${i==="url"?"":`${i[0].toUpperCase()}${i.slice(1)}`}`,a]));return Ps(s||{}).sort((i,a)=>{var l,u;return(((l=i[o])==null?void 0:l.length)||0)-(((u=a[o])==null?void 0:u.length)||0)})}function Qd(e){var r;if(((r=Gd[e])==null?void 0:r.metaKey)==="http-equiv"||uo.HTTP_EQUIV.has(e))return"http-equiv";const t=nn(e),n=t.indexOf(":");return n===-1?"name":uo.OG.has(t.slice(0,n))?"property":"name"}function Xb(e){return Qb[e]||nn(e)}function Zb(e,t){var n;return t==="refresh"?`${e.seconds};url=${e.url}`:Yd(la(e),{keyValueSeparator:"=",entrySeparator:", ",resolve:({value:r,key:o})=>r===null?"":typeof r=="boolean"?o:void 0,...(n=Gd[t])==null?void 0:n.unpack})}function Ps(e){const t=[],n={};for(const[o,s]of Object.entries(e)){if(Array.isArray(s)){if(o==="themeColor"){s.forEach(i=>{typeof i=="object"&&i!==null&&t.push({name:"theme-color",...i})});continue}for(const i of s)if(typeof i=="object"&&i!==null){const a=[],l=[];for(const[u,c]of Object.entries(i)){const f=`${o}${u==="url"?"":`:${u}`}`,d=Ps({[f]:c});(u==="url"?a:l).push(...d)}t.push(...a,...l)}else t.push(...typeof i=="string"?Ps({[o]:i}):Rc(o,i));continue}if(typeof s=="object"&&s)if(uo.MEDIA.has(o)){const i=o.startsWith("twitter")?"twitter":"og",a=o.replace(/^(og|twitter)/,"").toLowerCase(),l=i==="twitter"?"name":"property";s.url&&t.push({[l]:`${i}:${a}`,content:s.url}),s.secureUrl&&t.push({[l]:`${i}:${a}:secure_url`,content:s.secureUrl});for(const[u,c]of Object.entries(s))u!=="url"&&u!=="secureUrl"&&t.push({[l]:`${i}:${a}:${u}`,content:c})}else cl.has(nn(o))?t.push(...Rc(o,s)):n[o]=Jd(s);else n[o]=s}const r=Object.entries(n).map(([o,s])=>{if(o==="charset")return{charset:s===null?"_null":s};const i=Qd(o),a=Xb(o),l=s===null?"_null":typeof s=="object"?Zb(s,o):typeof s=="number"?s.toString():s;return i==="http-equiv"?{"http-equiv":a,content:l}:{[i]:a,content:l}});return[...t,...r].map(o=>"content"in o&&o.content==="_null"?{...o,content:null}:o)}const ev={key:"flatMeta",hooks:{"entries:normalize":e=>{const t=[];e.tags=e.tags.map(n=>n.tag!=="_flatMeta"?n:(t.push(Ps(n.props).map(r=>({...n,tag:"meta",props:r}))),!1)).filter(Boolean).concat(...t)}}},tv=["name","property","http-equiv"];function Xd(e){const t=e.split(":");return t.length?cl.has(t[1]):!1}function ca(e){const{props:t,tag:n}=e;if(Gb.has(n))return n;if(n==="link"&&t.rel==="canonical")return"canonical";if(t.charset)return"charset";if(e.tag==="meta"){for(const r of tv)if(t[r]!==void 0)return`${n}:${t[r]}`}if(e.key)return`${n}:key:${e.key}`;if(t.id)return`${n}:id:${t.id}`;if(Kb.has(n)){const r=e.textContent||e.innerHTML;if(r)return`${n}:content:${r}`}}function Ic(e){const t=e._h||e._d;if(t)return t;const n=e.textContent||e.innerHTML;return n||`${e.tag}:${Object.entries(e.props).map(([r,o])=>`${r}:${String(o)}`).join(",")}`}function As(e,t,n){typeof e==="function"&&(!n||n!=="titleTemplate"&&!(n[0]==="o"&&n[1]==="n"))&&(e=e());let o;if(t&&(o=t(n,e)),Array.isArray(o))return o.map(s=>As(s,t));if((o==null?void 0:o.constructor)===Object){const s={};for(const i of Object.keys(o))s[i]=As(o[i],t,i);return s}return o}function nv(e,t){const n=e==="style"?new Map:new Set;function r(o){const s=o.trim();if(s)if(e==="style"){const[i,...a]=s.split(":").map(l=>l.trim());i&&a.length&&n.set(i,a.join(":"))}else s.split(" ").filter(Boolean).forEach(i=>n.add(i))}return typeof t=="string"?e==="style"?t.split(";").forEach(r):r(t):Array.isArray(t)?t.forEach(o=>r(o)):t&&typeof t=="object"&&Object.entries(t).forEach(([o,s])=>{s&&s!=="false"&&(e==="style"?n.set(o.trim(),s):r(o))}),n}function Zd(e,t){return e.props=e.props||{},t&&Object.entries(t).forEach(([n,r])=>{if(r===null){e.props[n]=null;return}if(n==="class"||n==="style"){e.props[n]=nv(n,r);return}if(Jb.has(n)){if(["textContent","innerHTML"].includes(n)&&typeof r=="object"){let i=t.type;if(t.type||(i="application/json"),!(i!=null&&i.endsWith("json"))&&i!=="speculationrules")return;t.type=i,e.props.type=i,e[n]=JSON.stringify(r)}else e[n]=r;return}const o=String(r),s=n.startsWith("data-");o==="true"||o===""?e.props[n]=s?o:!0:!r&&s&&o==="false"?e.props[n]="false":r!==void 0&&(e.props[n]=r)}),e}function rv(e,t){const n=typeof t=="object"&&typeof t!="function"?t:{[e==="script"||e==="noscript"||e==="style"?"innerHTML":"textContent"]:t},r=Zd({tag:e,props:{}},n);return r.key&&zb.has(r.tag)&&(r.props["data-hid"]=r._h=r.key),r.tag==="script"&&typeof r.innerHTML=="object"&&(r.innerHTML=JSON.stringify(r.innerHTML),r.props.type=r.props.type||"application/json"),Array.isArray(r.props.content)?r.props.content.map(o=>({...r,props:{...r.props,content:o}})):r}function ov(e,t){if(!e)return[];typeof e=="function"&&(e=e());const n=(o,s)=>{for(let i=0;i{if(s!==void 0)for(const i of Array.isArray(s)?s:[s])r.push(rv(o,i))}),r.flat()}const ua=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Mc={base:-10,title:10},sv={critical:-8,high:-1,low:2},$c={meta:{"content-security-policy":-30,charset:-20,viewport:-15},link:{preconnect:20,stylesheet:60,preload:70,modulepreload:70,prefetch:90,"dns-prefetch":90,prerender:90},script:{async:30,defer:80,sync:50},style:{imported:40,sync:60}},iv=/@import/,Lr=e=>e===""||e===!0;function av(e,t){var s;if(typeof t.tagPriority=="number")return t.tagPriority;let n=100;const r=sv[t.tagPriority]||0,o=e.resolvedOptions.disableCapoSorting?{link:{},script:{},style:{}}:$c;if(t.tag in Mc)n=Mc[t.tag];else if(t.tag==="meta"){const i=t.props["http-equiv"]==="content-security-policy"?"content-security-policy":t.props.charset?"charset":t.props.name==="viewport"?"viewport":null;i&&(n=$c.meta[i])}else t.tag==="link"&&t.props.rel?n=o.link[t.props.rel]:t.tag==="script"?Lr(t.props.async)?n=o.script.async:t.props.src&&!Lr(t.props.defer)&&!Lr(t.props.async)&&t.props.type!=="module"&&!((s=t.props.type)!=null&&s.endsWith("json"))?n=o.script.sync:Lr(t.props.defer)&&t.props.src&&!Lr(t.props.async)&&(n=o.script.defer):t.tag==="style"&&(n=t.innerHTML&&iv.test(t.innerHTML)?o.style.imported:o.style.sync);return(n||100)+r}function Nc(e,t){const n=typeof t=="function"?t(e):t,r=n.key||String(e.plugins.size+1);e.plugins.get(r)||(e.plugins.set(r,n),e.hooks.addHooks(n.hooks||{}))}function lv(e={}){var a;const t=jd();t.addHooks(e.hooks||{});const n=!e.document,r=new Map,o=new Map,s=[],i={_entryCount:1,plugins:o,dirty:!1,resolvedOptions:e,hooks:t,ssr:n,entries:r,headEntries(){return[...r.values()]},use:l=>Nc(i,l),push(l,u){const c={...u||{}};delete c.head;const f=c._index??i._entryCount++,d={_i:f,input:l,options:c},p={_poll(g=!1){i.dirty=!0,!g&&s.push(f),t.callHook("entries:updated",i)},dispose(){r.delete(f)&&p._poll(!0)},patch(g){(!c.mode||c.mode==="server"&&n||c.mode==="client"&&!n)&&(d.input=g,r.set(f,d),p._poll())}};return p.patch(l),p},async resolveTags(){var p;const l={tagMap:new Map,tags:[],entries:[...i.entries.values()]};for(await t.callHook("entries:resolve",l);s.length;){const g=s.shift(),h=r.get(g);if(h){const y={tags:ov(h.input,e.propResolvers||[]).map(k=>Object.assign(k,h.options)),entry:h};await t.callHook("entries:normalize",y),h._tags=y.tags.map((k,v)=>(k._w=av(i,k),k._p=(h._i<<10)+v,k._d=ca(k),k))}}let u=!1;l.entries.flatMap(g=>(g._tags||[]).map(h=>({...h,props:{...h.props}}))).sort(ua).reduce((g,h)=>{const y=String(h._d||h._p);if(!g.has(y))return g.set(y,h);const k=g.get(y);if(((h==null?void 0:h.tagDuplicateStrategy)||(Yb.has(h.tag)?"merge":null)||(h.key&&h.key===k.key?"merge":null))==="merge"){const m={...k.props};Object.entries(h.props).forEach(([b,_])=>m[b]=b==="style"?new Map([...k.props.style||new Map,..._]):b==="class"?new Set([...k.props.class||new Set,..._]):_),g.set(y,{...h,props:m})}else h._p>>10===k._p>>10&&h.tag==="meta"&&Xd(y)?(g.set(y,Object.assign([...Array.isArray(k)?k:[k],h],h)),u=!0):(h._w===k._w?h._p>k._p:(h==null?void 0:h._w)<(k==null?void 0:k._w))&&g.set(y,h);return g},l.tagMap);const c=l.tagMap.get("title"),f=l.tagMap.get("titleTemplate");if(i._title=c==null?void 0:c.textContent,f){const g=f==null?void 0:f.textContent;if(i._titleTemplate=g,g){let h=typeof g=="function"?g(c==null?void 0:c.textContent):g;typeof h=="string"&&!i.plugins.has("template-params")&&(h=h.replace("%s",(c==null?void 0:c.textContent)||"")),c?h===null?l.tagMap.delete("title"):l.tagMap.set("title",{...c,textContent:h}):(f.tag="title",f.textContent=h)}}l.tags=Array.from(l.tagMap.values()),u&&(l.tags=l.tags.flat().sort(ua)),await t.callHook("tags:beforeResolve",l),await t.callHook("tags:resolve",l),await t.callHook("tags:afterResolve",l);const d=[];for(const g of l.tags){const{innerHTML:h,tag:y,props:k}=g;if(Wb.has(y)&&!(Object.keys(k).length===0&&!g.innerHTML&&!g.textContent)&&!(y==="meta"&&!k.content&&!k["http-equiv"]&&!k.charset)){if(y==="script"&&h){if((p=k.type)!=null&&p.endsWith("json")){const v=typeof h=="string"?h:JSON.stringify(h);g.innerHTML=v.replace(/Nc(i,l)),i.hooks.callHook("init",i),(a=e.init)==null||a.forEach(l=>l&&i.push(l)),i}const wn="%separator",cv=new RegExp(`${wn}(?:\\s*${wn})*`,"g");function uv(e,t,n=!1){var o;let r;if(t==="s"||t==="pageTitle")r=e.pageTitle;else if(t.includes(".")){const s=t.indexOf(".");r=(o=e[t.substring(0,s)])==null?void 0:o[t.substring(s+1)]}else r=e[t];if(r!==void 0)return n?(r||"").replace(/\\/g,"\\\\").replace(/{if(a===wn||!s.includes(a))return a;const l=uv(t,a.slice(1),r);return l!==void 0?l:a}).trim(),i&&(e.endsWith(wn)&&(e=e.slice(0,-wn.length)),e.startsWith(wn)&&(e=e.slice(wn.length)),e=e.replace(cv,n||"").trim()),e}const Lc=e=>e.includes(":key")?e:e.split(":").join(":key:"),fv={key:"aliasSorting",hooks:{"tags:resolve":e=>{let t=!1;for(const n of e.tags){const r=n.tagPriority;if(!r)continue;const o=String(r);if(o.startsWith("before:")){const s=Lc(o.slice(7)),i=e.tagMap.get(s);i&&(typeof i.tagPriority=="number"&&(n.tagPriority=i.tagPriority),n._p=i._p-1,t=!0)}else if(o.startsWith("after:")){const s=Lc(o.slice(6)),i=e.tagMap.get(s);i&&(typeof i.tagPriority=="number"&&(n.tagPriority=i.tagPriority),n._p=i._p+1,t=!0)}}t&&(e.tags=e.tags.sort(ua))}}},dv={key:"deprecations",hooks:{"entries:normalize":({tags:e})=>{for(const t of e)t.props.children&&(t.innerHTML=t.props.children,delete t.props.children),t.props.hid&&(t.key=t.props.hid,delete t.props.hid),t.props.vmid&&(t.key=t.props.vmid,delete t.props.vmid),t.props.body&&(t.tagPosition="bodyClose",delete t.props.body)}}};async function fa(e){if(typeof e==="function")return e;if(e instanceof Promise)return await e;if(Array.isArray(e))return await Promise.all(e.map(n=>fa(n)));if((e==null?void 0:e.constructor)===Object){const n={};for(const r of Object.keys(e))n[r]=await fa(e[r]);return n}return e}const pv={key:"promises",hooks:{"entries:resolve":async e=>{const t=[];for(const n in e.entries)e.entries[n]._promisesProcessed||t.push(fa(e.entries[n].input).then(r=>{e.entries[n].input=r,e.entries[n]._promisesProcessed=!0}));await Promise.all(t)}}},hv={meta:"content",link:"href",htmlAttrs:"lang"},gv=["innerHTML","textContent"],mv=e=>({key:"template-params",hooks:{"entries:normalize":t=>{var r,o,s;const n=((o=(r=t.tags.filter(i=>i.tag==="templateParams"&&i.mode==="server"))==null?void 0:r[0])==null?void 0:o.props)||{};Object.keys(n).length&&(e._ssrPayload={templateParams:{...((s=e._ssrPayload)==null?void 0:s.templateParams)||{},...n}})},"tags:resolve":({tagMap:t,tags:n})=>{var s;const r=((s=t.get("templateParams"))==null?void 0:s.props)||{},o=r.separator||"|";delete r.separator,r.pageTitle=Fo(r.pageTitle||e._title||"",r,o);for(const i of n){if(i.processTemplateParams===!1)continue;const a=hv[i.tag];if(a&&typeof i.props[a]=="string")i.props[a]=Fo(i.props[a],r,o);else if(i.processTemplateParams||i.tag==="titleTemplate"||i.tag==="title")for(const l of gv)typeof i[l]=="string"&&(i[l]=Fo(i[l],r,o,i.tag==="script"&&i.props.type.endsWith("json")))}e._templateParams=r,e._separator=o},"tags:afterResolve":({tagMap:t})=>{const n=t.get("title");n!=null&&n.textContent&&n.processTemplateParams!==!1&&(n.textContent=Fo(n.textContent,e._templateParams,e._separator))}}}),yv=(e,t)=>Pe(t)?Le(t):t,ul="usehead";function bv(e){return{install(n){n.config.globalProperties.$unhead=e,n.config.globalProperties.$head=e,n.provide(ul,e)}}.install}function ep(){if(Gs()){const e=Se(ul);if(!e)throw new Error("useHead() was called without provide context, ensure you call it through the setup() function.");return e}throw new Error("useHead() was called without provide context, ensure you call it through the setup() function.")}function tp(e,t={}){const n=t.head||ep();return n.ssr?n.push(e||{},t):vv(n,e,t)}function vv(e,t,n={}){const r=se(!1);let o;return ln(()=>{const i=r.value?{}:As(t,yv);o?o.patch(i):o=e.push(i,n)}),Fe()&&(Qn(()=>{o.dispose()}),Of(()=>{r.value=!0}),Af(()=>{r.value=!1})),o}function wv(e={},t={}){(t.head||ep()).use(ev);const{title:r,titleTemplate:o,...s}=e;return tp({title:r,titleTemplate:o,_flatMeta:s},t)}function np(e){var n;const t=e||Hd();return((n=t==null?void 0:t.ssrContext)==null?void 0:n.head)||(t==null?void 0:t.runWithContext(()=>{if(Gs())return Se(ul)}))}function rp(e,t={}){const n=np(t.nuxt);if(n)return tp(e,{head:n,...t})}function _v(e,t={}){const n=np(t.nuxt);if(n)return wv(e,{head:n,...t})}const kv="modulepreload",xv=function(e,t){return new URL(e,t).href},jc={},rn=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let i=function(c){return Promise.all(c.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const a=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));o=i(n.map(c=>{if(c=xv(c,r),c in jc)return;jc[c]=!0;const f=c.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(!!r)for(let h=a.length-1;h>=0;h--){const y=a[h];if(y.href===c&&(!f||y.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${d}`))return;const g=document.createElement("link");if(g.rel=f?"stylesheet":kv,f||(g.as="script"),g.crossOrigin="",g.href=c,u&&g.setAttribute("nonce",u),document.head.appendChild(g),f)return new Promise((h,y)=>{g.addEventListener("load",h),g.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(i){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i}return o.then(i=>{for(const a of i||[])a.status==="rejected"&&s(a.reason);return t().catch(s)})};let es,ts;function Ev(){return es=$fetch(al(`builds/meta/${Cr().app.buildId}.json`),{responseType:"json"}),es.then(e=>{ts=Tb(e.matcher)}).catch(e=>{console.error("[nuxt] Error fetching app manifest.",e)}),es}function Zs(){return es||Ev()}async function fl(e){const t=typeof e=="string"?e:e.path;if(await Zs(),!ts)return console.error("[nuxt] Error creating app manifest matcher.",ts),{};try{return ko({},...ts.matchAll(t).reverse())}catch(n){return console.error("[nuxt] Error matching route rules.",n),{}}}async function Dc(e,t={}){if(!await sp(e))return null;const r=await Cv(e,t);return await op(r)||null}const Sv="_payload.json";async function Cv(e,t={}){const n=new URL(e,"http://localhost");if(n.host!=="localhost"||fn(n.pathname,{acceptRelative:!0}))throw new Error("Payload URL must not include hostname: "+e);const r=Cr(),o=t.hash||(t.fresh?Date.now():r.app.buildId),s=r.app.cdnURL,i=s&&await sp(e)?s:r.app.baseURL;return Qs(i,n.pathname,Sv+(o?`?${o}`:""))}async function op(e){const t=fetch(e,{cache:"force-cache"}).then(n=>n.text().then(ip));try{return await t}catch(n){console.warn("[nuxt] Cannot load payload ",e,n)}return null}async function sp(e=xo().path){const t=xe();return e=wr(e),(await Zs()).prerendered.includes(e)?!0:t.runWithContext(async()=>{const r=await fl({path:e});return!!r.prerender&&!r.redirect})}let In=null;async function Tv(){var r;if(In)return In;const e=document.getElementById("__NUXT_DATA__");if(!e)return{};const t=await ip(e.textContent||""),n=e.dataset.src?await op(e.dataset.src):void 0;return In={...t,...n,...window.__NUXT__},(r=In.config)!=null&&r.public&&(In.config.public=et(In.config.public)),In}async function ip(e){return await Vb(e,xe()._payloadRevivers)}function Pv(e,t){xe()._payloadRevivers[e]=t}const Av=[["NuxtError",e=>Vn(e)],["EmptyShallowRef",e=>Ze(e==="_"?void 0:e==="0n"?BigInt(0):co(e))],["EmptyRef",e=>se(e==="_"?void 0:e==="0n"?BigInt(0):co(e))],["ShallowRef",e=>Ze(e)],["ShallowReactive",e=>Ot(e)],["Ref",e=>se(e)],["Reactive",e=>et(e)]],Ov=Et({name:"nuxt:revive-payload:client",order:-30,async setup(e){let t,n;for(const[r,o]of Av)Pv(r,o);Object.assign(e.payload,([t,n]=Un(()=>e.runWithContext(Tv)),t=await t,n(),t)),window.__NUXT__=e.payload}});async function dl(e,t={}){const n=t.document||e.resolvedOptions.document;if(!n||!e.dirty)return;const r={shouldRender:!0,tags:[]};if(await e.hooks.callHook("dom:beforeRender",r),!!r.shouldRender)return e._domUpdatePromise||(e._domUpdatePromise=new Promise(async o=>{var p;const s=new Map,i=new Promise(g=>{e.resolveTags().then(h=>{g(h.map(y=>{const k=s.get(y._d)||0,v={tag:y,id:(k?`${y._d}:${k}`:y._d)||Ic(y),shouldRender:!0};return y._d&&Xd(y._d)&&s.set(y._d,k+1),v}))})});let a=e._dom;if(!a){a={title:n.title,elMap:new Map().set("htmlAttrs",n.documentElement).set("bodyAttrs",n.body)};for(const g of["body","head"]){const h=(p=n[g])==null?void 0:p.children;for(const y of h){const k=y.tagName.toLowerCase();if(!Oc.has(k))continue;const v=Zd({tag:k,props:{}},{innerHTML:y.innerHTML,...y.getAttributeNames().reduce((m,b)=>(m[b]=y.getAttribute(b),m),{})||{}});if(v.key=y.getAttribute("data-hid")||void 0,v._d=ca(v)||Ic(v),a.elMap.has(v._d)){let m=1,b=v._d;for(;a.elMap.has(b);)b=`${v._d}:${m++}`;a.elMap.set(b,y)}else a.elMap.set(v._d,y)}}}a.pendingSideEffects={...a.sideEffects},a.sideEffects={};function l(g,h,y){const k=`${g}:${h}`;a.sideEffects[k]=y,delete a.pendingSideEffects[k]}function u({id:g,$el:h,tag:y}){const k=y.tag.endsWith("Attrs");a.elMap.set(g,h),k||(y.textContent&&y.textContent!==h.textContent&&(h.textContent=y.textContent),y.innerHTML&&y.innerHTML!==h.innerHTML&&(h.innerHTML=y.innerHTML),l(g,"el",()=>{h==null||h.remove(),a.elMap.delete(g)}));for(const v in y.props){if(!Object.prototype.hasOwnProperty.call(y.props,v))continue;const m=y.props[v];if(v.startsWith("on")&&typeof m=="function"){const _=h==null?void 0:h.dataset;if(_&&_[`${v}fired`]){const x=v.slice(0,-5);m.call(h,new Event(x.substring(2)))}h.getAttribute(`data-${v}`)!==""&&((y.tag==="bodyAttrs"?n.defaultView:h).addEventListener(v.substring(2),m.bind(h)),h.setAttribute(`data-${v}`,""));continue}const b=`attr:${v}`;if(v==="class"){if(!m)continue;for(const _ of m)k&&l(g,`${b}:${_}`,()=>h.classList.remove(_)),!h.classList.contains(_)&&h.classList.add(_)}else if(v==="style"){if(!m)continue;for(const[_,x]of m)l(g,`${b}:${_}`,()=>{h.style.removeProperty(_)}),h.style.setProperty(_,x)}else m!==!1&&m!==null&&(h.getAttribute(v)!==m&&h.setAttribute(v,m===!0?"":String(m)),k&&l(g,b,()=>h.removeAttribute(v)))}}const c=[],f={bodyClose:void 0,bodyOpen:void 0,head:void 0},d=await i;for(const g of d){const{tag:h,shouldRender:y,id:k}=g;if(y){if(h.tag==="title"){n.title=h.textContent,l("title","",()=>n.title=a.title);continue}g.$el=g.$el||a.elMap.get(k),g.$el?u(g):Oc.has(h.tag)&&c.push(g)}}for(const g of c){const h=g.tag.tagPosition||"head";g.$el=n.createElement(g.tag.tag),u(g),f[h]=f[h]||n.createDocumentFragment(),f[h].appendChild(g.$el)}for(const g of d)await e.hooks.callHook("dom:renderTag",g,n,l);f.head&&n.head.appendChild(f.head),f.bodyOpen&&n.body.insertBefore(f.bodyOpen,n.body.firstChild),f.bodyClose&&n.body.appendChild(f.bodyClose);for(const g in a.pendingSideEffects)a.pendingSideEffects[g]();e._dom=a,await e.hooks.callHook("dom:rendered",{renders:d}),o()}).finally(()=>{e._domUpdatePromise=void 0,e.dirty=!1})),e._domUpdatePromise}function Rv(e={}){var r,o,s;const t=((r=e.domOptions)==null?void 0:r.render)||dl;e.document=e.document||(typeof window<"u"?document:void 0);const n=((s=(o=e.document)==null?void 0:o.head.querySelector('script[id="unhead:payload"]'))==null?void 0:s.innerHTML)||!1;return lv({...e,plugins:[...e.plugins||[],{key:"client",hooks:{"entries:updated":t}}],init:[n?JSON.parse(n):!1,...e.init||[]]})}function Iv(e,t){let n=0;return()=>{const r=++n;t(()=>{n===r&&e()})}}function Mv(e={}){const t=Rv({domOptions:{render:Iv(()=>dl(t),n=>setTimeout(n,0))},...e});return t.install=bv(t),t}const $v={disableDefaults:!0,disableCapoSorting:!1,plugins:[dv,pv,mv,fv]},Nv=Et({name:"nuxt:head",enforce:"pre",setup(e){const t=Mv($v);e.vueApp.use(t);{let n=!0;const r=async()=>{n=!1,await dl(t)};t.hooks.hook("dom:beforeRender",o=>{o.shouldRender=!n}),e.hooks.hook("page:start",()=>{n=!0}),e.hooks.hook("page:finish",()=>{e.isHydrating||r()}),e.hooks.hook("app:error",r),e.hooks.hook("app:suspense:resolve",r)}}});/*! + * vue-router v4.5.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const ir=typeof document<"u";function ap(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Lv(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ap(e.default)}const _e=Object.assign;function _i(e,t){const n={};for(const r in t){const o=t[r];n[r]=Lt(o)?o.map(e):e(o)}return n}const Xr=()=>{},Lt=Array.isArray,lp=/#/g,jv=/&/g,Dv=/\//g,Fv=/=/g,Hv=/\?/g,cp=/\+/g,Bv=/%5B/g,Uv=/%5D/g,up=/%5E/g,Vv=/%60/g,fp=/%7B/g,qv=/%7C/g,dp=/%7D/g,zv=/%20/g;function pl(e){return encodeURI(""+e).replace(qv,"|").replace(Bv,"[").replace(Uv,"]")}function Kv(e){return pl(e).replace(fp,"{").replace(dp,"}").replace(up,"^")}function da(e){return pl(e).replace(cp,"%2B").replace(zv,"+").replace(lp,"%23").replace(jv,"%26").replace(Vv,"`").replace(fp,"{").replace(dp,"}").replace(up,"^")}function Wv(e){return da(e).replace(Fv,"%3D")}function Gv(e){return pl(e).replace(lp,"%23").replace(Hv,"%3F")}function Jv(e){return e==null?"":Gv(e).replace(Dv,"%2F")}function fo(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Yv=/\/$/,Qv=e=>e.replace(Yv,"");function ki(e,t,n="/"){let r,o={},s="",i="";const a=t.indexOf("#");let l=t.indexOf("?");return a=0&&(l=-1),l>-1&&(r=t.slice(0,l),s=t.slice(l+1,a>-1?a:t.length),o=e(s)),a>-1&&(r=r||t.slice(0,a),i=t.slice(a,t.length)),r=t0(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:fo(i)}}function Xv(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Fc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Zv(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&_r(t.matched[r],n.matched[o])&&pp(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function _r(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function pp(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!e0(e[n],t[n]))return!1;return!0}function e0(e,t){return Lt(e)?Hc(e,t):Lt(t)?Hc(t,e):e===t}function Hc(e,t){return Lt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function t0(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,a;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}const wt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var po;(function(e){e.pop="pop",e.push="push"})(po||(po={}));var Zr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Zr||(Zr={}));function n0(e){if(!e)if(ir){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Qv(e)}const r0=/^[^#]+#/;function o0(e,t){return e.replace(r0,"#")+t}function s0(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ei=()=>({left:window.scrollX,top:window.scrollY});function i0(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=s0(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Bc(e,t){return(history.state?history.state.position-t:-1)+e}const pa=new Map;function a0(e,t){pa.set(e,t)}function l0(e){const t=pa.get(e);return pa.delete(e),t}let c0=()=>location.protocol+"//"+location.host;function hp(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let a=o.includes(e.slice(s))?e.slice(s).length:1,l=o.slice(a);return l[0]!=="/"&&(l="/"+l),Fc(l,"")}return Fc(n,e)+r+o}function u0(e,t,n,r){let o=[],s=[],i=null;const a=({state:d})=>{const p=hp(e,location),g=n.value,h=t.value;let y=0;if(d){if(n.value=p,t.value=d,i&&i===g){i=null;return}y=h?d.position-h.position:0}else r(p);o.forEach(k=>{k(n.value,g,{delta:y,type:po.pop,direction:y?y>0?Zr.forward:Zr.back:Zr.unknown})})};function l(){i=n.value}function u(d){o.push(d);const p=()=>{const g=o.indexOf(d);g>-1&&o.splice(g,1)};return s.push(p),p}function c(){const{history:d}=window;d.state&&d.replaceState(_e({},d.state,{scroll:ei()}),"")}function f(){for(const d of s)d();s=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:l,listen:u,destroy:f}}function Uc(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?ei():null}}function f0(e){const{history:t,location:n}=window,r={value:hp(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(l,u,c){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+l:c0()+e+l;try{t[c?"replaceState":"pushState"](u,"",d),o.value=u}catch(p){console.error(p),n[c?"replace":"assign"](d)}}function i(l,u){const c=_e({},t.state,Uc(o.value.back,l,o.value.forward,!0),u,{position:o.value.position});s(l,c,!0),r.value=l}function a(l,u){const c=_e({},o.value,t.state,{forward:l,scroll:ei()});s(c.current,c,!0);const f=_e({},Uc(r.value,l,null),{position:c.position+1},u);s(l,f,!1),r.value=l}return{location:r,state:o,push:a,replace:i}}function d0(e){e=n0(e);const t=f0(e),n=u0(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=_e({location:"",base:e,go:r,createHref:o0.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function p0(e){return typeof e=="string"||e&&typeof e=="object"}function gp(e){return typeof e=="string"||typeof e=="symbol"}const mp=Symbol("");var Vc;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Vc||(Vc={}));function kr(e,t){return _e(new Error,{type:e,[mp]:!0},t)}function Jt(e,t){return e instanceof Error&&mp in e&&(t==null||!!(e.type&t))}const qc="[^/]+?",h0={sensitive:!1,strict:!1,start:!0,end:!0},g0=/[.+*?^${}()[\]/\\]/g;function m0(e,t){const n=_e({},h0,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function yp(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const b0={type:0,value:""},v0=/[a-zA-Z0-9_]/;function w0(e){if(!e)return[[]];if(e==="/")return[[b0]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let a=0,l,u="",c="";function f(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function d(){u+=l}for(;a{i(m)}:Xr}function i(f){if(gp(f)){const d=r.get(f);d&&(r.delete(f),n.splice(n.indexOf(d),1),d.children.forEach(i),d.alias.forEach(i))}else{const d=n.indexOf(f);d>-1&&(n.splice(d,1),f.record.name&&r.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function a(){return n}function l(f){const d=S0(f,n);n.splice(d,0,f),f.record.name&&!Gc(f)&&r.set(f.record.name,f)}function u(f,d){let p,g={},h,y;if("name"in f&&f.name){if(p=r.get(f.name),!p)throw kr(1,{location:f});y=p.record.name,g=_e(Kc(d.params,p.keys.filter(m=>!m.optional).concat(p.parent?p.parent.keys.filter(m=>m.optional):[]).map(m=>m.name)),f.params&&Kc(f.params,p.keys.map(m=>m.name))),h=p.stringify(g)}else if(f.path!=null)h=f.path,p=n.find(m=>m.re.test(h)),p&&(g=p.parse(h),y=p.record.name);else{if(p=d.name?r.get(d.name):n.find(m=>m.re.test(d.path)),!p)throw kr(1,{location:f,currentLocation:d});y=p.record.name,g=_e({},d.params,f.params),h=p.stringify(g)}const k=[];let v=p;for(;v;)k.unshift(v.record),v=v.parent;return{name:y,path:h,params:g,matched:k,meta:E0(k)}}e.forEach(f=>s(f));function c(){n.length=0,r.clear()}return{addRoute:s,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:a,getRecordMatcher:o}}function Kc(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Wc(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:x0(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function x0(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Gc(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function E0(e){return e.reduce((t,n)=>_e(t,n.meta),{})}function Jc(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function S0(e,t){let n=0,r=t.length;for(;n!==r;){const s=n+r>>1;yp(e,t[s])<0?r=s:n=s+1}const o=C0(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function C0(e){let t=e;for(;t=t.parent;)if(bp(t)&&yp(e,t)===0)return t}function bp({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function T0(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&da(s)):[r&&da(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function P0(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Lt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const A0=Symbol(""),Qc=Symbol(""),hl=Symbol(""),gl=Symbol(""),ha=Symbol("");function jr(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function _n(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((a,l)=>{const u=d=>{d===!1?l(kr(4,{from:n,to:t})):d instanceof Error?l(d):p0(d)?l(kr(2,{from:t,to:d})):(i&&r.enterCallbacks[o]===i&&typeof d=="function"&&i.push(d),a())},c=s(()=>e.call(r&&r.instances[o],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(d=>l(d))})}function xi(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(ap(l)){const c=(l.__vccOpts||l)[t];c&&s.push(_n(c,n,r,i,a,o))}else{let u=l();s.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${a}" at "${i.path}"`);const f=Lv(c)?c.default:c;i.mods[a]=c,i.components[a]=f;const p=(f.__vccOpts||f)[t];return p&&_n(p,n,r,i,a,o)()}))}}return s}function Xc(e){const t=Se(hl),n=Se(gl),r=F(()=>{const l=A(e.to);return t.resolve(l)}),o=F(()=>{const{matched:l}=r.value,{length:u}=l,c=l[u-1],f=n.matched;if(!c||!f.length)return-1;const d=f.findIndex(_r.bind(null,c));if(d>-1)return d;const p=Zc(l[u-2]);return u>1&&Zc(c)===p&&f[f.length-1].path!==p?f.findIndex(_r.bind(null,l[u-2])):d}),s=F(()=>o.value>-1&&$0(n.params,r.value.params)),i=F(()=>o.value>-1&&o.value===n.matched.length-1&&pp(n.params,r.value.params));function a(l={}){if(M0(l)){const u=t[A(e.replace)?"replace":"push"](A(e.to)).catch(Xr);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:F(()=>r.value.href),isActive:s,isExactActive:i,navigate:a}}function O0(e){return e.length===1?e[0]:e}const R0=fe({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Xc,setup(e,{slots:t}){const n=et(Xc(e)),{options:r}=Se(hl),o=F(()=>({[eu(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[eu(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&O0(t.default(n));return e.custom?s:ke("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),I0=R0;function M0(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function $0(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!Lt(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Zc(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const eu=(e,t,n)=>e??t??n,N0=fe({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Se(ha),o=F(()=>e.route||r.value),s=Se(Qc,0),i=F(()=>{let u=A(s);const{matched:c}=o.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),a=F(()=>o.value.matched[i.value]);at(Qc,F(()=>i.value+1)),at(A0,a),at(ha,o);const l=se();return Ne(()=>[l.value,a.value,e.name],([u,c,f],[d,p,g])=>{c&&(c.instances[f]=u,p&&p!==c&&u&&u===d&&(c.leaveGuards.size||(c.leaveGuards=p.leaveGuards),c.updateGuards.size||(c.updateGuards=p.updateGuards))),u&&c&&(!p||!_r(c,p)||!d)&&(c.enterCallbacks[f]||[]).forEach(h=>h(u))},{flush:"post"}),()=>{const u=o.value,c=e.name,f=a.value,d=f&&f.components[c];if(!d)return tu(n.default,{Component:d,route:u});const p=f.props[c],g=p?p===!0?u.params:typeof p=="function"?p(u):p:null,y=ke(d,_e({},g,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(f.instances[c]=null)},ref:l}));return tu(n.default,{Component:y,route:u})||y}}});function tu(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const vp=N0;function L0(e){const t=k0(e.routes,e),n=e.parseQuery||T0,r=e.stringifyQuery||Yc,o=e.history,s=jr(),i=jr(),a=jr(),l=Ze(wt);let u=wt;ir&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=_i.bind(null,I=>""+I),f=_i.bind(null,Jv),d=_i.bind(null,fo);function p(I,Q){let G,te;return gp(I)?(G=t.getRecordMatcher(I),te=Q):te=I,t.addRoute(te,G)}function g(I){const Q=t.getRecordMatcher(I);Q&&t.removeRoute(Q)}function h(){return t.getRoutes().map(I=>I.record)}function y(I){return!!t.getRecordMatcher(I)}function k(I,Q){if(Q=_e({},Q||l.value),typeof I=="string"){const E=ki(n,I,Q.path),C=t.resolve({path:E.path},Q),j=o.createHref(E.fullPath);return _e(E,C,{params:d(C.params),hash:fo(E.hash),redirectedFrom:void 0,href:j})}let G;if(I.path!=null)G=_e({},I,{path:ki(n,I.path,Q.path).path});else{const E=_e({},I.params);for(const C in E)E[C]==null&&delete E[C];G=_e({},I,{params:f(E)}),Q.params=f(Q.params)}const te=t.resolve(G,Q),we=I.hash||"";te.params=c(d(te.params));const $e=Xv(r,_e({},I,{hash:Kv(we),path:te.path})),w=o.createHref($e);return _e({fullPath:$e,hash:we,query:r===Yc?P0(I.query):I.query||{}},te,{redirectedFrom:void 0,href:w})}function v(I){return typeof I=="string"?ki(n,I,l.value.path):_e({},I)}function m(I,Q){if(u!==I)return kr(8,{from:Q,to:I})}function b(I){return S(I)}function _(I){return b(_e(v(I),{replace:!0}))}function x(I){const Q=I.matched[I.matched.length-1];if(Q&&Q.redirect){const{redirect:G}=Q;let te=typeof G=="function"?G(I):G;return typeof te=="string"&&(te=te.includes("?")||te.includes("#")?te=v(te):{path:te},te.params={}),_e({query:I.query,hash:I.hash,params:te.path!=null?{}:I.params},te)}}function S(I,Q){const G=u=k(I),te=l.value,we=I.state,$e=I.force,w=I.replace===!0,E=x(G);if(E)return S(_e(v(E),{state:typeof E=="object"?_e({},we,E.state):we,force:$e,replace:w}),Q||G);const C=G;C.redirectedFrom=Q;let j;return!$e&&Zv(r,te,G)&&(j=kr(16,{to:C,from:te}),De(te,te,!0,!1)),(j?Promise.resolve(j):P(C,te)).catch(M=>Jt(M)?Jt(M,2)?M:be(M):L(M,C,te)).then(M=>{if(M){if(Jt(M,2))return S(_e({replace:w},v(M.to),{state:typeof M.to=="object"?_e({},we,M.to.state):we,force:$e}),Q||C)}else M=T(C,te,!0,w,we);return q(C,te,M),M})}function N(I,Q){const G=m(I,Q);return G?Promise.reject(G):Promise.resolve()}function O(I){const Q=rt.values().next().value;return Q&&typeof Q.runWithContext=="function"?Q.runWithContext(I):I()}function P(I,Q){let G;const[te,we,$e]=j0(I,Q);G=xi(te.reverse(),"beforeRouteLeave",I,Q);for(const E of te)E.leaveGuards.forEach(C=>{G.push(_n(C,I,Q))});const w=N.bind(null,I,Q);return G.push(w),He(G).then(()=>{G=[];for(const E of s.list())G.push(_n(E,I,Q));return G.push(w),He(G)}).then(()=>{G=xi(we,"beforeRouteUpdate",I,Q);for(const E of we)E.updateGuards.forEach(C=>{G.push(_n(C,I,Q))});return G.push(w),He(G)}).then(()=>{G=[];for(const E of $e)if(E.beforeEnter)if(Lt(E.beforeEnter))for(const C of E.beforeEnter)G.push(_n(C,I,Q));else G.push(_n(E.beforeEnter,I,Q));return G.push(w),He(G)}).then(()=>(I.matched.forEach(E=>E.enterCallbacks={}),G=xi($e,"beforeRouteEnter",I,Q,O),G.push(w),He(G))).then(()=>{G=[];for(const E of i.list())G.push(_n(E,I,Q));return G.push(w),He(G)}).catch(E=>Jt(E,8)?E:Promise.reject(E))}function q(I,Q,G){a.list().forEach(te=>O(()=>te(I,Q,G)))}function T(I,Q,G,te,we){const $e=m(I,Q);if($e)return $e;const w=Q===wt,E=ir?history.state:{};G&&(te||w?o.replace(I.fullPath,_e({scroll:w&&E&&E.scroll},we)):o.push(I.fullPath,we)),l.value=I,De(I,Q,G,w),be()}let $;function B(){$||($=o.listen((I,Q,G)=>{if(!pt.listening)return;const te=k(I),we=x(te);if(we){S(_e(we,{replace:!0,force:!0}),te).catch(Xr);return}u=te;const $e=l.value;ir&&a0(Bc($e.fullPath,G.delta),ei()),P(te,$e).catch(w=>Jt(w,12)?w:Jt(w,2)?(S(_e(v(w.to),{force:!0}),te).then(E=>{Jt(E,20)&&!G.delta&&G.type===po.pop&&o.go(-1,!1)}).catch(Xr),Promise.reject()):(G.delta&&o.go(-G.delta,!1),L(w,te,$e))).then(w=>{w=w||T(te,$e,!1),w&&(G.delta&&!Jt(w,8)?o.go(-G.delta,!1):G.type===po.pop&&Jt(w,20)&&o.go(-1,!1)),q(te,$e,w)}).catch(Xr)}))}let W=jr(),R=jr(),z;function L(I,Q,G){be(I);const te=R.list();return te.length?te.forEach(we=>we(I,Q,G)):console.error(I),Promise.reject(I)}function oe(){return z&&l.value!==wt?Promise.resolve():new Promise((I,Q)=>{W.add([I,Q])})}function be(I){return z||(z=!I,B(),W.list().forEach(([Q,G])=>I?G(I):Q()),W.reset()),I}function De(I,Q,G,te){const{scrollBehavior:we}=e;if(!ir||!we)return Promise.resolve();const $e=!G&&l0(Bc(I.fullPath,0))||(te||!G)&&history.state&&history.state.scroll||null;return tt().then(()=>we(I,Q,$e)).then(w=>w&&i0(w)).catch(w=>L(w,I,Q))}const ve=I=>o.go(I);let lt;const rt=new Set,pt={currentRoute:l,listening:!0,addRoute:p,removeRoute:g,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:h,resolve:k,options:e,push:b,replace:_,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:s.add,beforeResolve:i.add,afterEach:a.add,onError:R.add,isReady:oe,install(I){const Q=this;I.component("RouterLink",I0),I.component("RouterView",vp),I.config.globalProperties.$router=Q,Object.defineProperty(I.config.globalProperties,"$route",{enumerable:!0,get:()=>A(l)}),ir&&!lt&&l.value===wt&&(lt=!0,b(o.location).catch(we=>{}));const G={};for(const we in wt)Object.defineProperty(G,we,{get:()=>l.value[we],enumerable:!0});I.provide(hl,Q),I.provide(gl,Ot(G)),I.provide(ha,l);const te=I.unmount;rt.add(I),I.unmount=function(){rt.delete(I),rt.size<1&&(u=wt,$&&$(),$=null,l.value=wt,lt=!1,z=!1),te()}}};function He(I){return I.reduce((Q,G)=>Q.then(()=>O(G)),Promise.resolve())}return pt}function j0(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;i_r(u,a))?r.push(a):n.push(a));const l=e.matched[i];l&&(t.matched.find(u=>_r(u,l))||o.push(l))}return[n,r,o]}function wp(e){return Se(gl)}const D0=/(:\w+)\([^)]+\)/g,F0=/(:\w+)[?+*]/g,H0=/:\w+/g,B0=(e,t)=>t.path.replace(D0,"$1").replace(F0,"$1").replace(H0,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""}),ga=(e,t)=>{const n=e.route.matched.find(o=>{var s;return((s=o.components)==null?void 0:s.default)===e.Component.type}),r=t??(n==null?void 0:n.meta.key)??(n&&B0(e.route,n));return typeof r=="function"?r(e.route):r},U0=(e,t)=>({default:()=>e?ke(Mg,e===!0?{}:e,t):t});function ml(e){return Array.isArray(e)?e:[e]}const V0={layout:!1},q0={layout:!1},Ei=[{name:"index",path:"/",meta:{middleware:"auth"},component:()=>rn(()=>import("./D-iuHiwX.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)},{name:"login",path:"/login",meta:V0||{},component:()=>rn(()=>import("./D5zdv4Fl.js"),__vite__mapDeps([6,2,4]),import.meta.url)},{name:"callback",path:"/callback",meta:q0||{},component:()=>rn(()=>import("./CBbkJY-x.js"),[],import.meta.url)},{name:"settings",path:"/settings",meta:{middleware:"auth"},component:()=>rn(()=>import("./D2SsjiDy.js"),__vite__mapDeps([7,1,4,8,5]),import.meta.url)}],_p=(e,t)=>({default:()=>{var n;return e?ke(Rm,e===!0?{}:e,t):(n=t.default)==null?void 0:n.call(t)}}),z0=/(:\w+)\([^)]+\)/g,K0=/(:\w+)[?+*]/g,W0=/:\w+/g;function nu(e){const t=(e==null?void 0:e.meta.key)??e.path.replace(z0,"$1").replace(K0,"$1").replace(W0,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""});return typeof t=="function"?t(e):t}function G0(e,t){return e===t||t===wt?!1:nu(e)!==nu(t)?!0:!e.matched.every((r,o)=>{var s,i;return r.components&&r.components.default===((i=(s=t.matched[o])==null?void 0:s.components)==null?void 0:i.default)})}const J0={scrollBehavior(e,t,n){var l;const r=xe(),o=((l=nt().options)==null?void 0:l.scrollBehaviorType)??"auto";if(e.path===t.path)return t.hash&&!e.hash?{left:0,top:0}:e.hash?{el:e.hash,top:kp(e.hash),behavior:o}:!1;if((typeof e.meta.scrollToTop=="function"?e.meta.scrollToTop(e,t):e.meta.scrollToTop)===!1)return!1;let i=n||void 0;!i&&G0(e,t)&&(i={left:0,top:0});const a=r._runningTransition?"page:transition:finish":"page:loading:end";return new Promise(u=>{if(t===wt){u(ru(e,"instant",i));return}r.hooks.hookOnce(a,()=>{requestAnimationFrame(()=>u(ru(e,"instant",i)))})})}};function kp(e){try{const t=document.querySelector(e);if(t)return(Number.parseFloat(getComputedStyle(t).scrollMarginTop)||0)+(Number.parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||0)}catch{}return 0}function ru(e,t,n){return n||(e.hash?{el:e.hash,top:kp(e.hash),behavior:t}:{left:0,top:0,behavior:t})}const Y0={hashMode:!1,scrollBehaviorType:"auto"},Ht={...Y0,...J0},Q0=async(e,t)=>{var i;let n,r;if(!((i=e.meta)!=null&&i.validate))return;const o=([n,r]=Un(()=>Promise.resolve(e.meta.validate(e))),n=await n,r(),n);if(o===!0)return;const s=Vn({fatal:!0,statusCode:o&&o.statusCode||404,statusMessage:o&&o.statusMessage||`Page Not Found: ${e.fullPath}`,data:{path:e.fullPath}});return typeof window<"u"&&window.history.pushState({},"",t.fullPath),s},X0="$s";function jn(...e){const t=typeof e[e.length-1]=="string"?e.pop():void 0;typeof e[0]!="string"&&e.unshift(t);const[n,r]=e;if(!n||typeof n!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+n);if(r!==void 0&&typeof r!="function")throw new Error("[nuxt] [useState] init must be a function: "+r);const o=X0+n,s=xe(),i=Rt(s.payload.state,o);if(i.value===void 0&&r){const a=r();if(Pe(a))return s.payload.state[o]=a,a;i.value=a}return i}function Z0(e,t){if(typeof e!="string")throw new TypeError("argument str must be a string");const n={},r=t||{},o=r.decode||ew;let s=0;for(;sthis.compare(a[0],l[0]));let i=`${r}{`;for(let a=0;athis.compare(o,s)))}`}$Map(r){return this.serializeObjectEntries("Map",r.entries())}}t=new WeakMap;for(const n of["Error","RegExp","URL"])e.prototype["$"+n]=function(r){return`${n}(${r})`};for(const n of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])e.prototype["$"+n]=function(r){return`${n}[${r.join(",")}]`};for(const n of["BigInt64Array","BigUint64Array"])e.prototype["$"+n]=function(r){return`${n}[${r.join("n,")}${r.length>0?"n":""}]`};return e}();function yl(e,t){return e===t||ma(e)===ma(t)}function Pt(e){if(typeof e!="object")return e;var t,n,r=Object.prototype.toString.call(e);if(r==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){n=new e.constructor;for(t in e)e.hasOwnProperty(t)&&n[t]!==e[t]&&(n[t]=Pt(e[t]))}else{n={};for(t in e)t==="__proto__"?Object.defineProperty(n,t,{value:Pt(e[t]),configurable:!0,enumerable:!0,writable:!0}):n[t]=Pt(e[t])}return n}if(r==="[object Array]"){for(t=e.length,n=Array(t);t--;)n[t]=Pt(e[t]);return n}return r==="[object Set]"?(n=new Set,e.forEach(function(o){n.add(Pt(o))}),n):r==="[object Map]"?(n=new Map,e.forEach(function(o,s){n.set(Pt(s),Pt(o))}),n):r==="[object Date]"?new Date(+e):r==="[object RegExp]"?(n=new RegExp(e.source,e.flags),n.lastIndex=e.lastIndex,n):r==="[object DataView]"?new e.constructor(Pt(e.buffer)):r==="[object ArrayBuffer]"?e.slice(0):r.slice(-6)==="Array]"?new e.constructor(e):e}const ow={path:"/",watch:!0,decode:e=>co(decodeURIComponent(e)),encode:e=>encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))},Bo=window.cookieStore;function sw(e,t){var u;const n={...ow,...t};n.filter??(n.filter=c=>c===e);const r=su(n)||{};let o;n.maxAge!==void 0?o=n.maxAge*1e3:n.expires&&(o=n.expires.getTime()-Date.now());const s=o!==void 0&&o<=0,i=s||r[e]===void 0||r[e]===null,a=Pt(s?void 0:r[e]??((u=n.default)==null?void 0:u.call(n))),l=o&&!s?lw(a,o,n.watch&&n.watch!=="shallow"):se(a);{let c=null;try{!Bo&&typeof BroadcastChannel<"u"&&(c=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(h=!1)=>{!h&&(n.readonly||yl(l.value,r[e]))||(aw(e,l.value,n),r[e]=Pt(l.value),c==null||c.postMessage({value:n.encode(l.value)}))},d=h=>{var k;const y=h.refresh?(k=su(n))==null?void 0:k[e]:n.decode(h.value);p=!0,l.value=y,r[e]=Pt(y),tt(()=>{p=!1})};let p=!1;const g=!!Yn();if(g&&gr(()=>{p=!0,f(),c==null||c.close()}),Bo){const h=y=>{const k=y.changed.find(m=>m.name===e),v=y.deleted.find(m=>m.name===e);k&&d({value:k.value}),v&&d({value:null})};Bo.addEventListener("change",h),g&&gr(()=>Bo.removeEventListener("change",h))}else c&&(c.onmessage=({data:h})=>d(h));n.watch&&Ne(l,()=>{p||f()},{deep:n.watch!=="shallow"}),i&&f(i)}return l}function su(e={}){return Z0(document.cookie,e)}function iw(e,t,n={}){return t==null?ou(e,t,{...n,maxAge:-1}):ou(e,t,n)}function aw(e,t,n={}){document.cookie=iw(e,t,n)}const iu=2147483647;function lw(e,t,n){let r,o,s=0;const i=n?se(e):{value:e};return Yn()&&gr(()=>{o==null||o(),clearTimeout(r)}),yo((a,l)=>{n&&(o=Ne(i,l));function u(){s=0,clearTimeout(r);const c=t-s,f=c{if(s+=f,s{const e=jn("auth-authenticated",()=>!1),t=jn("auth-user",()=>null),n=jn("auth-providers",()=>[]),r=jn("auth-loading",()=>!0),o=sw("auth-token",{default:()=>null,secure:!0,sameSite:"strict"}),s=async()=>{r.value=!0;try{const p=await $fetch("/api/auth/session");e.value=p.authenticated,p.authenticated&&await i()}catch{e.value=!1,t.value=null}finally{r.value=!1}},i=async()=>{try{const p=await $fetch("/api/auth/me");t.value=p}catch{t.value=null}},a=async()=>{try{const p=await $fetch("/api/auth/providers");n.value=p}catch{n.value=[]}},l=p=>{window.location.href=`/api/auth/login/${p}`},u=p=>{o.value=p},c=async()=>{try{await $fetch("/api/auth/logout",{method:"POST"})}catch{}t.value=null,e.value=!1,o.value=null,ll("/login")},f=()=>({Authorization:`Bearer ${o.value}`}),d=F(()=>n.value.length>0);return{isAuthenticated:bt(e),user:bt(t),providers:bt(n),isLoading:bt(r),apiToken:bt(o),hasOidcProviders:d,checkSession:s,fetchUser:i,fetchProviders:a,loginWithOidc:l,loginWithToken:u,logout:c,getAuthHeaders:f}},uw=async e=>{let t,n;if(e.path==="/login"||e.path==="/callback")return;const{checkSession:r,isAuthenticated:o,apiToken:s,isLoading:i}=cw();i.value&&([t,n]=Un(()=>r()),await t,n());const a=o.value,l=!!s.value;if(!a&&!l)return ll("/login")},fw=async e=>{let t,n;const r=([t,n]=Un(()=>fl({path:e.path})),t=await t,n(),t);if(r.redirect)return fn(r.redirect,{acceptRelative:!0})?(window.location.href=r.redirect,!1):r.redirect},dw=[Q0,uw,fw],eo={auth:()=>rn(()=>import("./DEdsACyT.js"),[],import.meta.url)};function pw(e,t,n){const{pathname:r,search:o,hash:s}=t,i=e.indexOf("#");if(i>-1){const u=s.includes(e.slice(i))?e.slice(i).length:1;let c=s.slice(u);return c[0]!=="/"&&(c="/"+c),wc(c,"")}const a=wc(r,e),l=!n||Fy(a,n)?a:n;return l+(l.includes("?")?"":o)+s}const hw=Et({name:"nuxt:router",enforce:"pre",async setup(e){var y;let t,n,r=Cr().app.baseURL;const o=((y=Ht.history)==null?void 0:y.call(Ht,r))??d0(r),s=Ht.routes?([t,n]=Un(()=>Ht.routes(Ei)),t=await t,n(),t??Ei):Ei;let i;const a=L0({...Ht,scrollBehavior:(k,v,m)=>{if(v===wt){i=m;return}if(Ht.scrollBehavior){if(a.options.scrollBehavior=Ht.scrollBehavior,"scrollRestoration"in window.history){const b=a.beforeEach(()=>{b(),window.history.scrollRestoration="manual"})}return Ht.scrollBehavior(k,wt,i||m)}},history:o,routes:s});"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto"),e.vueApp.use(a);const l=Ze(a.currentRoute.value);a.afterEach((k,v)=>{l.value=v}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>l.value});const u=pw(r,window.location,e.payload.path),c=Ze(a.currentRoute.value),f=()=>{c.value=a.currentRoute.value};e.hook("page:finish",f),a.afterEach((k,v)=>{var m,b,_,x;((b=(m=k.matched[0])==null?void 0:m.components)==null?void 0:b.default)===((x=(_=v.matched[0])==null?void 0:_.components)==null?void 0:x.default)&&f()});const d={};for(const k in c.value)Object.defineProperty(d,k,{get:()=>c.value[k],enumerable:!0});e._route=Ot(d),e._middleware||(e._middleware={global:[],named:{}});const p=Xs();a.afterEach(async(k,v,m)=>{delete e._processingMiddleware,!e.isHydrating&&p.value&&await e.runWithContext($b),m&&await e.callHook("page:loading:end")});try{[t,n]=Un(()=>a.isReady()),await t,n()}catch(k){[t,n]=Un(()=>e.runWithContext(()=>Nn(k))),await t,n()}const g=u!==a.currentRoute.value.fullPath?a.resolve(u):a.currentRoute.value;f();const h=e.payload.state._layout;return a.beforeEach(async(k,v)=>{var m;await e.callHook("page:loading:start"),k.meta=et(k.meta),e.isHydrating&&h&&!an(k.meta.layout)&&(k.meta.layout=h),e._processingMiddleware=!0;{const b=new Set([...dw,...e._middleware.global]);for(const _ of k.matched){const x=_.meta.middleware;if(x)for(const S of ml(x))b.add(S)}{const _=await e.runWithContext(()=>fl({path:k.path}));if(_.appMiddleware)for(const x in _.appMiddleware)_.appMiddleware[x]?b.add(x):b.delete(x)}for(const _ of b){const x=typeof _=="string"?e._middleware.named[_]||await((m=eo[_])==null?void 0:m.call(eo).then(S=>S.default||S)):_;if(!x)throw new Error(`Unknown route middleware: '${_}'.`);try{const S=await e.runWithContext(()=>x(k,v));if(!e.payload.serverRendered&&e.isHydrating&&(S===!1||S instanceof Error)){const N=S||Vn({statusCode:404,statusMessage:`Page Not Found: ${u}`});return await e.runWithContext(()=>Nn(N)),!1}if(S===!0)continue;if(S===!1)return S;if(S)return Wd(S)&&S.fatal&&await e.runWithContext(()=>Nn(S)),S}catch(S){const N=Vn(S);return N.fatal&&await e.runWithContext(()=>Nn(N)),N}}}}),a.onError(async()=>{delete e._processingMiddleware,await e.callHook("page:loading:end")}),a.afterEach(async(k,v)=>{k.matched.length===0&&await e.runWithContext(()=>Nn(Vn({statusCode:404,fatal:!1,statusMessage:`Page not found: ${k.fullPath}`,data:{path:k.fullPath}})))}),e.hooks.hookOnce("app:created",async()=>{try{"name"in g&&(g.name=void 0),await a.replace({...g,force:!0}),a.options.scrollBehavior=Ht.scrollBehavior}catch(k){await e.runWithContext(()=>Nn(k))}}),{provide:{router:a}}}}),ya=globalThis.requestIdleCallback||(e=>{const t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),gw=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),ti=e=>{const t=xe();t.isHydrating?t.hooks.hookOnce("app:suspense:resolve",()=>{ya(()=>e())}):ya(()=>e())},mw=Et({name:"nuxt:payload",setup(e){const t=new Set;nt().beforeResolve(async(n,r)=>{if(n.path===r.path)return;const o=await Dc(n.path);if(o){for(const s of t)delete e.static.data[s];for(const s in o.data)s in e.static.data||t.add(s),e.static.data[s]=o.data[s]}}),ti(()=>{var n;e.hooks.hook("link:prefetch",async r=>{const{hostname:o}=new URL(r,window.location.href);o===window.location.hostname&&await Dc(r).catch(()=>{console.warn("[nuxt] Error preloading payload for",r)})}),((n=navigator.connection)==null?void 0:n.effectiveType)!=="slow-2g"&&setTimeout(Zs,1e3)})}}),yw=Et(()=>{const e=nt();ti(()=>{e.beforeResolve(async()=>{await new Promise(t=>{setTimeout(t,100),requestAnimationFrame(()=>{setTimeout(t,0)})})})})}),bw=Et(e=>{let t;async function n(){const r=await Zs();t&&clearTimeout(t),t=setTimeout(n,Cc);try{const o=await $fetch(al("builds/latest.json")+`?${Date.now()}`);o.id!==r.id&&e.hooks.callHook("app:manifest:update",o)}catch{}}ti(()=>{t=setTimeout(n,Cc)})});function vw(e={}){const t=e.path||window.location.pathname;let n={};try{n=co(sessionStorage.getItem("nuxt:reload")||"{}")}catch{}if(e.force||(n==null?void 0:n.path)!==t||(n==null?void 0:n.expires){r.clear()}),e.hook("app:chunkError",({error:s})=>{r.add(s)});function o(s){const a="href"in s&&s.href[0]==="#"?n.app.baseURL+s.href:Qs(n.app.baseURL,s.fullPath);vw({path:a,persistState:!0})}e.hook("app:manifest:update",()=>{t.beforeResolve(o)}),t.onError((s,i)=>{r.has(s)&&o(i)})}}),_w=hs(()=>rn(()=>Promise.resolve().then(()=>Rx),void 0,import.meta.url).then(e=>e.default||e.default||e)),kw=[["Icon",_w]],xw=Et({name:"nuxt:global-components",setup(e){for(const[t,n]of kw)e.vueApp.component(t,n),e.vueApp.component("Lazy"+t,n)}}),kn={default:hs(()=>rn(()=>import("./ChEe6xeu.js"),__vite__mapDeps([9,3,8,5]),import.meta.url).then(e=>e.default||e))};function Ew(e){if(e!=null&&e.__asyncLoader&&!e.__asyncResolved)return e.__asyncLoader()}async function xp(e,t=nt()){const{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||(t._routePreloaded=new Set),t._routePreloaded.has(n)))return;const o=t._preloadPromises||(t._preloadPromises=[]);if(o.length>4)return Promise.all(o).then(()=>xp(e,t));t._routePreloaded.add(n);const s=r.map(i=>{var a;return(a=i.components)==null?void 0:a.default}).filter(i=>typeof i=="function");for(const i of s){const a=Promise.resolve(i()).catch(()=>{}).finally(()=>o.splice(o.indexOf(a)));o.push(a)}await Promise.all(o)}const Sw=Et({name:"nuxt:prefetch",setup(e){const t=nt();e.hooks.hook("app:mounted",()=>{t.beforeEach(async n=>{var o;const r=(o=n==null?void 0:n.meta)==null?void 0:o.layout;r&&typeof kn[r]=="function"&&await kn[r]()})}),e.hooks.hook("link:prefetch",n=>{if(fn(n))return;const r=t.resolve(n);if(!r)return;const o=r.meta.layout;let s=ml(r.meta.middleware);s=s.filter(i=>typeof i=="string");for(const i of s)typeof eo[i]=="function"&&eo[i]();typeof o=="string"&&o in kn&&Ew(kn[o])})}});var Uo={inherit:"inherit",current:"currentcolor",transparent:"transparent",black:"#000",white:"#fff",slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"}};const Cw={ui:{colors:{primary:"blue",neutral:"zinc"}}},Tw={nuxt:{},icon:{provider:"iconify",class:"",aliases:{},iconifyApiEndpoint:"https://api.iconify.design",localApiEndpoint:"/api/_nuxt_icon",fallbackToApi:!0,cssSelectorPrefix:"i-",cssWherePseudo:!0,mode:"css",attrs:{"aria-hidden":!0},collections:["academicons","akar-icons","ant-design","arcticons","basil","bi","bitcoin-icons","bpmn","brandico","bx","bxl","bxs","bytesize","carbon","catppuccin","cbi","charm","ci","cib","cif","cil","circle-flags","circum","clarity","codicon","covid","cryptocurrency","cryptocurrency-color","dashicons","devicon","devicon-plain","ei","el","emojione","emojione-monotone","emojione-v1","entypo","entypo-social","eos-icons","ep","et","eva","f7","fa","fa-brands","fa-regular","fa-solid","fa6-brands","fa6-regular","fa6-solid","fad","fe","feather","file-icons","flag","flagpack","flat-color-icons","flat-ui","flowbite","fluent","fluent-emoji","fluent-emoji-flat","fluent-emoji-high-contrast","fluent-mdl2","fontelico","fontisto","formkit","foundation","fxemoji","gala","game-icons","geo","gg","gis","gravity-ui","gridicons","grommet-icons","guidance","healthicons","heroicons","heroicons-outline","heroicons-solid","hugeicons","humbleicons","ic","icomoon-free","icon-park","icon-park-outline","icon-park-solid","icon-park-twotone","iconamoon","iconoir","icons8","il","ion","iwwa","jam","la","lets-icons","line-md","logos","ls","lucide","lucide-lab","mage","majesticons","maki","map","marketeq","material-symbols","material-symbols-light","mdi","mdi-light","medical-icon","memory","meteocons","mi","mingcute","mono-icons","mynaui","nimbus","nonicons","noto","noto-v1","octicon","oi","ooui","openmoji","oui","pajamas","pepicons","pepicons-pencil","pepicons-pop","pepicons-print","ph","pixelarticons","prime","ps","quill","radix-icons","raphael","ri","rivet-icons","si-glyph","simple-icons","simple-line-icons","skill-icons","solar","streamline","streamline-emojis","subway","svg-spinners","system-uicons","tabler","tdesign","teenyicons","token","token-branded","topcoat","twemoji","typcn","uil","uim","uis","uit","uiw","unjs","vaadin","vs","vscode-icons","websymbol","weui","whh","wi","wpf","zmdi","zondicons"],fetchTimeout:1500},ui:{colors:{primary:"green",secondary:"blue",success:"green",info:"blue",warning:"yellow",error:"red",neutral:"slate"},icons:{arrowLeft:"i-lucide-arrow-left",arrowRight:"i-lucide-arrow-right",check:"i-lucide-check",chevronDoubleLeft:"i-lucide-chevrons-left",chevronDoubleRight:"i-lucide-chevrons-right",chevronDown:"i-lucide-chevron-down",chevronLeft:"i-lucide-chevron-left",chevronRight:"i-lucide-chevron-right",chevronUp:"i-lucide-chevron-up",close:"i-lucide-x",ellipsis:"i-lucide-ellipsis",external:"i-lucide-arrow-up-right",folder:"i-lucide-folder",folderOpen:"i-lucide-folder-open",loading:"i-lucide-loader-circle",minus:"i-lucide-minus",plus:"i-lucide-plus",search:"i-lucide-search"}}},Ep=Pb(Cw,Tw);function St(){const e=xe();return e._appConfig||(e._appConfig=et(Ep)),e._appConfig}const Pw=[50,100,200,300,400,500,600,700,800,900,950];function Aw(e,t){return e in Uo&&typeof Uo[e]=="object"&&t in Uo[e]?Uo[e][t]:""}function Ow(e,t){return`${Pw.map(n=>`--ui-color-${e}-${n}: var(--color-${t==="neutral"?"old-neutral":t}-${n}, ${Aw(t,n)});`).join(` + `)}`}function au(e,t){return`--ui-${e}: var(--ui-color-${e}-${t});`}const Rw=Et(()=>{const e=St(),t=xe(),n=F(()=>{const{neutral:o,...s}=e.ui.colors;return`@layer base { + :root { + ${Object.entries(e.ui.colors).map(([i,a])=>Ow(i,a)).join(` + `)} + } + :root, .light { + ${Object.keys(s).map(i=>au(i,500)).join(` + `)} + } + .dark { + ${Object.keys(s).map(i=>au(i,400)).join(` + `)} + } +}`}),r={style:[{innerHTML:()=>n.value,tagPriority:-2,id:"nuxt-ui-colors"}]};if(t.isHydrating&&!t.payload.serverRendered){const o=document.createElement("style");o.innerHTML=n.value,o.setAttribute("data-nuxt-ui-colors",""),document.head.appendChild(o),r.script=[{innerHTML:"document.head.removeChild(document.querySelector('[data-nuxt-ui-colors]'))"}]}rp(r)}),Iw="__NUXT_COLOR_MODE__",Si="nuxt-color-mode",Mw="localStorage",Yt=window[Iw]||{},$w=Et(e=>{const t=jn("color-mode",()=>et({preference:Yt.preference,value:Yt.value,unknown:!1,forced:!1})).value;nt().afterEach(s=>{const i=s.meta.colorMode;i&&i!=="system"?(t.value=i,t.forced=!0):(i==="system"&&console.warn("You cannot force the colorMode to system at the page level."),t.forced=!1,t.value=t.preference==="system"?Yt.getColorScheme():t.preference)});let n;function r(){n||!window.matchMedia||(n=window.matchMedia("(prefers-color-scheme: dark)"),n.addEventListener("change",()=>{!t.forced&&t.preference==="system"&&(t.value=Yt.getColorScheme())}))}function o(s,i){var a,l;switch(s){case"cookie":window.document.cookie=Si+"="+i;break;case"sessionStorage":(a=window.sessionStorage)==null||a.setItem(Si,i);break;case"localStorage":default:(l=window.localStorage)==null||l.setItem(Si,i)}}Ne(()=>t.preference,s=>{t.forced||(s==="system"?(t.value=Yt.getColorScheme(),r()):t.value=s,o(Mw,s))},{immediate:!0}),Ne(()=>t.value,(s,i)=>{let a;a=window.document.createElement("style"),a.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(a),Yt.removeColorScheme(i),Yt.addColorScheme(s),window.getComputedStyle(a).opacity,document.head.removeChild(a)}),t.preference==="system"&&r(),e.hook("app:mounted",()=>{t.unknown&&(t.preference=Yt.preference,t.value=Yt.value,t.unknown=!1)}),e.provide("colorMode",t)}),Sp=/^[a-z0-9]+(-[a-z0-9]+)*$/,Eo=(e,t,n,r="")=>{const o=e.split(":");if(e.slice(0,1)==="@"){if(o.length<2||o.length>3)return null;r=o.shift().slice(1)}if(o.length>3||!o.length)return null;if(o.length>1){const a=o.pop(),l=o.pop(),u={provider:o.length>0?o[0]:r,prefix:l,name:a};return t&&!ns(u)?null:u}const s=o[0],i=s.split("-");if(i.length>1){const a={provider:r,prefix:i.shift(),name:i.join("-")};return t&&!ns(a)?null:a}if(n&&r===""){const a={provider:r,prefix:"",name:s};return t&&!ns(a,n)?null:a}return null},ns=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,Cp=Object.freeze({left:0,top:0,width:16,height:16}),Os=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Tr=Object.freeze({...Cp,...Os}),ba=Object.freeze({...Tr,body:"",hidden:!1});function Nw(e,t){const n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function lu(e,t){const n=Nw(e,t);for(const r in ba)r in Os?r in e&&!(r in n)&&(n[r]=Os[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function Lw(e,t){const n=e.icons,r=e.aliases||Object.create(null),o=Object.create(null);function s(i){if(n[i])return o[i]=[];if(!(i in o)){o[i]=null;const a=r[i]&&r[i].parent,l=a&&s(a);l&&(o[i]=[a].concat(l))}return o[i]}return Object.keys(n).concat(Object.keys(r)).forEach(s),o}function jw(e,t,n){const r=e.icons,o=e.aliases||Object.create(null);let s={};function i(a){s=lu(r[a]||o[a],s)}return i(t),n.forEach(i),lu(e,s)}function Tp(e,t){const n=[];if(typeof e!="object"||typeof e.icons!="object")return n;e.not_found instanceof Array&&e.not_found.forEach(o=>{t(o,null),n.push(o)});const r=Lw(e);for(const o in r){const s=r[o];s&&(t(o,jw(e,o,s)),n.push(o))}return n}const Dw={provider:"",aliases:{},not_found:{},...Cp};function Ci(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function Pp(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!Ci(e,Dw))return null;const n=t.icons;for(const o in n){const s=n[o];if(!o||typeof s.body!="string"||!Ci(s,ba))return null}const r=t.aliases||Object.create(null);for(const o in r){const s=r[o],i=s.parent;if(!o||typeof i!="string"||!n[i]&&!r[i]||!Ci(s,ba))return null}return t}const cu=Object.create(null);function Fw(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function Gn(e,t){const n=cu[e]||(cu[e]=Object.create(null));return n[t]||(n[t]=Fw(e,t))}function Ap(e,t){return Pp(t)?Tp(t,(n,r)=>{r?e.icons[n]=r:e.missing.add(n)}):[]}function Hw(e,t,n){try{if(typeof n.body=="string")return e.icons[t]={...n},!0}catch{}return!1}let ho=!1;function Op(e){return typeof e=="boolean"&&(ho=e),ho}function bl(e){const t=typeof e=="string"?Eo(e,!0,ho):e;if(t){const n=Gn(t.provider,t.prefix),r=t.name;return n.icons[r]||(n.missing.has(r)?null:void 0)}}function vl(e,t){const n=Eo(e,!0,ho);if(!n)return!1;const r=Gn(n.provider,n.prefix);return t?Hw(r,n.name,t):(r.missing.add(n.name),!0)}function Bw(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),ho&&!t&&!e.prefix){let o=!1;return Pp(e)&&(e.prefix="",Tp(e,(s,i)=>{vl(s,i)&&(o=!0)})),o}const n=e.prefix;if(!ns({prefix:n,name:"a"}))return!1;const r=Gn(t,n);return!!Ap(r,e)}function va(e){const t=bl(e);return t&&{...Tr,...t}}const Rp=Object.freeze({width:null,height:null}),Ip=Object.freeze({...Rp,...Os}),Uw=/(-?[0-9.]*[0-9]+[0-9.]*)/g,Vw=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function uu(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const r=e.split(Uw);if(r===null||!r.length)return e;const o=[];let s=r.shift(),i=Vw.test(s);for(;;){if(i){const a=parseFloat(s);isNaN(a)?o.push(s):o.push(Math.ceil(a*t*n)/n)}else o.push(s);if(s=r.shift(),s===void 0)return o.join("");i=!i}}function qw(e,t="defs"){let n="";const r=e.indexOf("<"+t);for(;r>=0;){const o=e.indexOf(">",r),s=e.indexOf("",s);if(i===-1)break;n+=e.slice(o+1,s).trim(),e=e.slice(0,r).trim()+e.slice(i+1)}return{defs:n,content:e}}function zw(e,t){return e?""+e+""+t:t}function Kw(e,t,n){const r=qw(e);return zw(r.defs,t+r.content+n)}const Ww=e=>e==="unset"||e==="undefined"||e==="none";function Gw(e,t){const n={...Tr,...e},r={...Ip,...t},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,r].forEach(h=>{const y=[],k=h.hFlip,v=h.vFlip;let m=h.rotate;k?v?m+=2:(y.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),y.push("scale(-1 1)"),o.top=o.left=0):v&&(y.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),y.push("scale(1 -1)"),o.top=o.left=0);let b;switch(m<0&&(m-=Math.floor(m/4)*4),m=m%4,m){case 1:b=o.height/2+o.top,y.unshift("rotate(90 "+b.toString()+" "+b.toString()+")");break;case 2:y.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:b=o.width/2+o.left,y.unshift("rotate(-90 "+b.toString()+" "+b.toString()+")");break}m%2===1&&(o.left!==o.top&&(b=o.left,o.left=o.top,o.top=b),o.width!==o.height&&(b=o.width,o.width=o.height,o.height=b)),y.length&&(s=Kw(s,'',""))});const i=r.width,a=r.height,l=o.width,u=o.height;let c,f;i===null?(f=a===null?"1em":a==="auto"?u:a,c=uu(f,l/u)):(c=i==="auto"?l:i,f=a===null?uu(c,u/l):a==="auto"?u:a);const d={},p=(h,y)=>{Ww(y)||(d[h]=y.toString())};p("width",c),p("height",f);const g=[o.left,o.top,l,u];return d.viewBox=g.join(" "),{attributes:d,viewBox:g,body:s}}const Jw=/\sid="(\S+)"/g,Yw="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Qw=0;function Xw(e,t=Yw){const n=[];let r;for(;r=Jw.exec(e);)n.push(r[1]);if(!n.length)return e;const o="suffix"+(Math.random()*16777216|Date.now()).toString(16);return n.forEach(s=>{const i=typeof t=="function"?t(s):t+(Qw++).toString(),a=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+a+')([")]|\\.[a-z])',"g"),"$1"+i+o+"$3")}),e=e.replace(new RegExp(o,"g"),""),e}const wa=Object.create(null);function Mp(e,t){wa[e]=t}function _a(e){return wa[e]||wa[""]}function wl(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const ni=Object.create(null),Dr=["https://api.simplesvg.com","https://api.unisvg.com"],rs=[];for(;Dr.length>0;)Dr.length===1||Math.random()>.5?rs.push(Dr.shift()):rs.push(Dr.pop());ni[""]=wl({resources:["https://api.iconify.design"].concat(rs)});function $p(e,t){const n=wl(t);return n===null?!1:(ni[e]=n,!0)}function ri(e){return ni[e]}function Zw(){return Object.keys(ni)}const e_=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let Rs=e_();function t_(e){Rs=e}function n_(){return Rs}function r_(e,t){const n=ri(e);if(!n)return 0;let r;if(!n.maxURL)r=0;else{let o=0;n.resources.forEach(i=>{o=Math.max(o,i.length)});const s=t+".json?icons=";r=n.maxURL-o-n.path.length-s.length}return r}function o_(e){return e===404}const s_=(e,t,n)=>{const r=[],o=r_(e,t),s="icons";let i={type:s,provider:e,prefix:t,icons:[]},a=0;return n.forEach((l,u)=>{a+=l.length+1,a>=o&&u>0&&(r.push(i),i={type:s,provider:e,prefix:t,icons:[]},a=l.length),i.icons.push(l)}),r.push(i),r};function i_(e){if(typeof e=="string"){const t=ri(e);if(t)return t.path}return"/"}const a_=(e,t,n)=>{if(!Rs){n("abort",424);return}let r=i_(t.provider);switch(t.type){case"icons":{const s=t.prefix,a=t.icons.join(","),l=new URLSearchParams({icons:a});r+=s+".json?"+l.toString();break}case"custom":{const s=t.uri;r+=s.slice(0,1)==="/"?s.slice(1):s;break}default:n("abort",400);return}let o=503;Rs(e+r).then(s=>{const i=s.status;if(i!==200){setTimeout(()=>{n(o_(i)?"abort":"next",i)});return}return o=501,s.json()}).then(s=>{if(typeof s!="object"||s===null){setTimeout(()=>{s===404?n("abort",s):n("next",o)});return}setTimeout(()=>{n("success",s)})}).catch(()=>{n("next",o)})},l_={prepare:s_,send:a_};function c_(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((o,s)=>o.provider!==s.provider?o.provider.localeCompare(s.provider):o.prefix!==s.prefix?o.prefix.localeCompare(s.prefix):o.name.localeCompare(s.name));let r={provider:"",prefix:"",name:""};return e.forEach(o=>{if(r.name===o.name&&r.prefix===o.prefix&&r.provider===o.provider)return;r=o;const s=o.provider,i=o.prefix,a=o.name,l=n[s]||(n[s]=Object.create(null)),u=l[i]||(l[i]=Gn(s,i));let c;a in u.icons?c=t.loaded:i===""||u.missing.has(a)?c=t.missing:c=t.pending;const f={provider:s,prefix:i,name:a};c.push(f)}),t}function Np(e,t){e.forEach(n=>{const r=n.loaderCallbacks;r&&(n.loaderCallbacks=r.filter(o=>o.id!==t))})}function u_(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,o=e.prefix;t.forEach(s=>{const i=s.icons,a=i.pending.length;i.pending=i.pending.filter(l=>{if(l.prefix!==o)return!0;const u=l.name;if(e.icons[u])i.loaded.push({provider:r,prefix:o,name:u});else if(e.missing.has(u))i.missing.push({provider:r,prefix:o,name:u});else return n=!0,!0;return!1}),i.pending.length!==a&&(n||Np([e],s.id),s.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),s.abort))})}))}let f_=0;function d_(e,t,n){const r=f_++,o=Np.bind(null,n,r);if(!t.pending.length)return o;const s={id:r,icons:t,callback:e,abort:o};return n.forEach(i=>{(i.loaderCallbacks||(i.loaderCallbacks=[])).push(s)}),o}function p_(e,t=!0,n=!1){const r=[];return e.forEach(o=>{const s=typeof o=="string"?Eo(o,t,n):o;s&&r.push(s)}),r}var h_={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function g_(e,t,n,r){const o=e.resources.length,s=e.random?Math.floor(Math.random()*o):e.index;let i;if(e.random){let x=e.resources.slice(0);for(i=[];x.length>1;){const S=Math.floor(Math.random()*x.length);i.push(x[S]),x=x.slice(0,S).concat(x.slice(S+1))}i=i.concat(x)}else i=e.resources.slice(s).concat(e.resources.slice(0,s));const a=Date.now();let l="pending",u=0,c,f=null,d=[],p=[];typeof r=="function"&&p.push(r);function g(){f&&(clearTimeout(f),f=null)}function h(){l==="pending"&&(l="aborted"),g(),d.forEach(x=>{x.status==="pending"&&(x.status="aborted")}),d=[]}function y(x,S){S&&(p=[]),typeof x=="function"&&p.push(x)}function k(){return{startTime:a,payload:t,status:l,queriesSent:u,queriesPending:d.length,subscribe:y,abort:h}}function v(){l="failed",p.forEach(x=>{x(void 0,c)})}function m(){d.forEach(x=>{x.status==="pending"&&(x.status="aborted")}),d=[]}function b(x,S,N){const O=S!=="success";switch(d=d.filter(P=>P!==x),l){case"pending":break;case"failed":if(O||!e.dataAfterTimeout)return;break;default:return}if(S==="abort"){c=N,v();return}if(O){c=N,d.length||(i.length?_():v());return}if(g(),m(),!e.random){const P=e.resources.indexOf(x.resource);P!==-1&&P!==e.index&&(e.index=P)}l="completed",p.forEach(P=>{P(N)})}function _(){if(l!=="pending")return;g();const x=i.shift();if(x===void 0){if(d.length){f=setTimeout(()=>{g(),l==="pending"&&(m(),v())},e.timeout);return}v();return}const S={status:"pending",resource:x,callback:(N,O)=>{b(S,N,O)}};d.push(S),u++,f=setTimeout(_,e.rotate),n(x,t,S.callback)}return setTimeout(_),k}function Lp(e){const t={...h_,...e};let n=[];function r(){n=n.filter(a=>a().status==="pending")}function o(a,l,u){const c=g_(t,a,l,(f,d)=>{r(),u&&u(f,d)});return n.push(c),c}function s(a){return n.find(l=>a(l))||null}return{query:o,find:s,setIndex:a=>{t.index=a},getIndex:()=>t.index,cleanup:r}}function fu(){}const Ti=Object.create(null);function m_(e){if(!Ti[e]){const t=ri(e);if(!t)return;const n=Lp(t),r={config:t,redundancy:n};Ti[e]=r}return Ti[e]}function jp(e,t,n){let r,o;if(typeof e=="string"){const s=_a(e);if(!s)return n(void 0,424),fu;o=s.send;const i=m_(e);i&&(r=i.redundancy)}else{const s=wl(e);if(s){r=Lp(s);const i=e.resources?e.resources[0]:"",a=_a(i);a&&(o=a.send)}}return!r||!o?(n(void 0,424),fu):r.query(t,o,n)().abort}function du(){}function y_(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,u_(e)}))}function b_(e){const t=[],n=[];return e.forEach(r=>{(r.match(Sp)?t:n).push(r)}),{valid:t,invalid:n}}function Fr(e,t,n){function r(){const o=e.pendingIcons;t.forEach(s=>{o&&o.delete(s),e.icons[s]||e.missing.add(s)})}if(n&&typeof n=="object")try{if(!Ap(e,n).length){r();return}}catch(o){console.error(o)}r(),y_(e)}function pu(e,t){e instanceof Promise?e.then(n=>{t(n)}).catch(()=>{t(null)}):t(e)}function v_(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:n,prefix:r}=e,o=e.iconsToLoad;if(delete e.iconsToLoad,!o||!o.length)return;const s=e.loadIcon;if(e.loadIcons&&(o.length>1||!s)){pu(e.loadIcons(o,r,n),c=>{Fr(e,o,c)});return}if(s){o.forEach(c=>{const f=s(c,r,n);pu(f,d=>{const p=d?{prefix:r,icons:{[c]:d}}:null;Fr(e,[c],p)})});return}const{valid:i,invalid:a}=b_(o);if(a.length&&Fr(e,a,null),!i.length)return;const l=r.match(Sp)?_a(n):null;if(!l){Fr(e,i,null);return}l.prepare(n,r,i).forEach(c=>{jp(n,c,f=>{Fr(e,c.icons,f)})})}))}const Dp=(e,t)=>{const n=p_(e,!0,Op()),r=c_(n);if(!r.pending.length){let l=!0;return t&&setTimeout(()=>{l&&t(r.loaded,r.missing,r.pending,du)}),()=>{l=!1}}const o=Object.create(null),s=[];let i,a;return r.pending.forEach(l=>{const{provider:u,prefix:c}=l;if(c===a&&u===i)return;i=u,a=c,s.push(Gn(u,c));const f=o[u]||(o[u]=Object.create(null));f[c]||(f[c]=[])}),r.pending.forEach(l=>{const{provider:u,prefix:c,name:f}=l,d=Gn(u,c),p=d.pendingIcons||(d.pendingIcons=new Set);p.has(f)||(p.add(f),o[u][c].push(f))}),s.forEach(l=>{const u=o[l.provider][l.prefix];u.length&&v_(l,u)}),t?d_(t,r,s):du},w_=e=>new Promise((t,n)=>{const r=typeof e=="string"?Eo(e,!0):e;if(!r){n(e);return}Dp([r||e],o=>{if(o.length&&r){const s=bl(r);if(s){t({...Tr,...s});return}}n(e)})});function __(e,t,n){Gn("",t).loadIcons=e}function k_(e,t){const n={...e};for(const r in t){const o=t[r],s=typeof o;r in Rp?(o===null||o&&(s==="string"||s==="number"))&&(n[r]=o):s===typeof n[r]&&(n[r]=r==="rotate"?o%4:o)}return n}const x_=/[\s,]+/;function E_(e,t){t.split(x_).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function S_(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(o){for(;o<0;)o+=4;return o%4}if(n===""){const o=parseInt(e);return isNaN(o)?0:r(o)}else if(n!==e){let o=0;switch(n){case"%":o=25;break;case"deg":o=90}if(o){let s=parseFloat(e.slice(0,e.length-n.length));return isNaN(s)?0:(s=s/o,s%1===0?r(s):0)}}return t}function C_(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const r in t)n+=" "+r+'="'+t[r]+'"';return'"+e+""}function T_(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function P_(e){return"data:image/svg+xml,"+T_(e)}function A_(e){return'url("'+P_(e)+'")'}const hu={...Ip,inline:!1},O_={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},R_={display:"inline-block"},ka={backgroundColor:"currentColor"},Fp={backgroundColor:"transparent"},gu={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},mu={webkitMask:ka,mask:ka,background:Fp};for(const e in mu){const t=mu[e];for(const n in gu)t[e+n]=gu[n]}const os={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";os[e+"-flip"]=t,os[e.slice(0,1)+"-flip"]=t,os[e+"Flip"]=t});function yu(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const bu=(e,t)=>{const n=k_(hu,t),r={...O_},o=t.mode||"svg",s={},i=t.style,a=typeof i=="object"&&!(i instanceof Array)?i:{};for(let h in t){const y=t[h];if(y!==void 0)switch(h){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":n[h]=y===!0||y==="true"||y===1;break;case"flip":typeof y=="string"&&E_(n,y);break;case"color":s.color=y;break;case"rotate":typeof y=="string"?n[h]=S_(y):typeof y=="number"&&(n[h]=y);break;case"ariaHidden":case"aria-hidden":y!==!0&&y!=="true"&&delete r["aria-hidden"];break;default:{const k=os[h];k?(y===!0||y==="true"||y===1)&&(n[k]=!0):hu[h]===void 0&&(r[h]=y)}}}const l=Gw(e,n),u=l.attributes;if(n.inline&&(s.verticalAlign="-0.125em"),o==="svg"){r.style={...s,...a},Object.assign(r,u);let h=0,y=t.id;return typeof y=="string"&&(y=y.replace(/-/g,"_")),r.innerHTML=Xw(l.body,y?()=>y+"ID"+h++:"iconifyVue"),ke("svg",r)}const{body:c,width:f,height:d}=e,p=o==="mask"||(o==="bg"?!1:c.indexOf("currentColor")!==-1),g=C_(c,{...u,width:f+"",height:d+""});return r.style={...s,"--svg":A_(g),width:yu(u.width),height:yu(u.height),...R_,...p?ka:Fp,...a},ke("span",r)};Op(!0);Mp("",l_);if(typeof document<"u"&&typeof window<"u"){const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(r=>{try{(typeof r!="object"||r===null||r instanceof Array||typeof r.icons!="object"||typeof r.prefix!="string"||!Bw(r))&&console.error(n)}catch{console.error(n)}})}if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(let n in t){const r="IconifyProviders["+n+"] is invalid.";try{const o=t[n];if(typeof o!="object"||!o||o.resources===void 0)continue;$p(n,o)||console.error(r)}catch{console.error(r)}}}}const I_={...Tr,body:""},M_=fe((e,{emit:t})=>{const n=se(null);function r(){var u,c;n.value&&((c=(u=n.value).abort)==null||c.call(u),n.value=null)}const o=se(!!e.ssr),s=se(""),i=Ze(null);function a(){const u=e.icon;if(typeof u=="object"&&u!==null&&typeof u.body=="string")return s.value="",{data:u};let c;if(typeof u!="string"||(c=Eo(u,!1,!0))===null)return null;let f=bl(c);if(!f){const g=n.value;return(!g||g.name!==u)&&(f===null?n.value={name:u}:n.value={name:u,abort:Dp([c],l)}),null}r(),s.value!==u&&(s.value=u,tt(()=>{t("load",u)}));const d=e.customise;if(d){f=Object.assign({},f);const g=d(f.body,c.name,c.prefix,c.provider);typeof g=="string"&&(f.body=g)}const p=["iconify"];return c.prefix!==""&&p.push("iconify--"+c.prefix),c.provider!==""&&p.push("iconify--"+c.provider),{data:f,classes:p}}function l(){var c;const u=a();u?u.data!==((c=i.value)==null?void 0:c.data)&&(i.value=u):i.value=null}return o.value?l():jt(()=>{o.value=!0,l()}),Ne(()=>e.icon,l),Xn(r),()=>{const u=i.value;if(!u)return bu(I_,e);let c=e;return u.classes&&(c={...e,class:u.classes.join(" ")}),bu({...Tr,...u.data},c)}},{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]}),vu={getAPIConfig:ri,setAPIModule:Mp,sendAPIQuery:jp,setFetch:t_,getFetch:n_,listAPIProviders:Zw},$_=Et({name:"@nuxt/icon",setup(){var o,s;const e=Cr(),t=St().icon;vu.setFetch($fetch.native);const n=[];if(t.provider==="server"){const i=((s=(o=e.app)==null?void 0:o.baseURL)==null?void 0:s.replace(/\/$/,""))??"";n.push(i+(t.localApiEndpoint||"/api/_nuxt_icon")),(t.fallbackToApi===!0||t.fallbackToApi==="client-only")&&n.push(t.iconifyApiEndpoint)}else t.provider==="none"?vu.setFetch(()=>Promise.resolve(new Response)):n.push(t.iconifyApiEndpoint);async function r(i,a){try{const l=await $fetch(n[0]+"/"+a+".json",{query:{icons:i.join(",")}});if(!l||l.prefix!==a||!l.icons)throw new Error("Invalid data"+JSON.stringify(l));return l}catch(l){return console.error("Failed to load custom icons",l),null}}$p("",{resources:n});for(const i of t.customCollections||[])i&&__(r,i)}}),N_=[Ov,Nv,hw,mw,yw,bw,ww,xw,Sw,Rw,$w,$_];function L_(e,t){const n=t/e*100;return 2/Math.PI*100*Math.atan(n/50)}function j_(e={}){const{duration:t=2e3,throttle:n=200,hideDelay:r=500,resetDelay:o=400}=e,s=e.estimatedProgress||L_,i=xe(),a=Ze(0),l=Ze(!1),u=Ze(!1);let c=!1,f,d,p,g;const h=(S={})=>{m(),u.value=!1,y(0,S)};function y(S=0,N={}){if(i.isHydrating)return;if(S>=100)return v({force:N.force});b(),a.value=S<0?0:S;const O=N.force?0:n;O?d=setTimeout(()=>{l.value=!0,_()},O):(l.value=!0,_())}function k(){p=setTimeout(()=>{l.value=!1,g=setTimeout(()=>{a.value=0},o)},r)}function v(S={}){a.value=100,c=!0,b(),m(),S.error&&(u.value=!0),S.force?(a.value=0,l.value=!1):k()}function m(){clearTimeout(p),clearTimeout(g)}function b(){clearTimeout(d),cancelAnimationFrame(f)}function _(){c=!1;let S;function N(O){if(c)return;S??(S=O);const P=O-S;a.value=Math.max(0,Math.min(100,s(t,P))),f=requestAnimationFrame(N)}f=requestAnimationFrame(N)}let x=()=>{};{const S=i.hook("page:loading:start",()=>{h()}),N=i.hook("page:loading:end",()=>{v()}),O=i.hook("vue:error",()=>v());x=()=>{O(),S(),N(),b()}}return{_cleanup:x,progress:F(()=>a.value),isLoading:F(()=>l.value),error:F(()=>u.value),start:h,set:y,finish:v,clear:b}}function D_(e={}){const t=xe(),n=t._loadingIndicator||(t._loadingIndicator=j_(e));return Yn()&&(t._loadingIndicatorDeps||(t._loadingIndicatorDeps=0),t._loadingIndicatorDeps++,gr(()=>{t._loadingIndicatorDeps--,t._loadingIndicatorDeps===0&&(n._cleanup(),delete t._loadingIndicator)})),n}const F_=fe({name:"NuxtLoadingIndicator",props:{throttle:{type:Number,default:200},duration:{type:Number,default:2e3},hideDelay:{type:Number,default:500},resetDelay:{type:Number,default:400},height:{type:Number,default:3},color:{type:[String,Boolean],default:"repeating-linear-gradient(to right,#00dc82 0%,#34cdfe 50%,#0047e1 100%)"},errorColor:{type:String,default:"repeating-linear-gradient(to right,#f87171 0%,#ef4444 100%)"},estimatedProgress:{type:Function,required:!1}},setup(e,{slots:t,expose:n}){const{progress:r,isLoading:o,error:s,start:i,finish:a,clear:l}=D_({duration:e.duration,throttle:e.throttle,hideDelay:e.hideDelay,resetDelay:e.resetDelay,estimatedProgress:e.estimatedProgress});return n({progress:r,isLoading:o,error:s,start:i,finish:a,clear:l}),()=>ke("div",{class:"nuxt-loading-indicator",style:{position:"fixed",top:0,right:0,left:0,pointerEvents:"none",width:"auto",height:`${e.height}px`,opacity:o.value?1:0,background:s.value?e.errorColor:e.color||void 0,backgroundSize:`${100/r.value*100}% auto`,transform:`scaleX(${r.value}%)`,transformOrigin:"left",transition:"transform 0.1s, height 0.4s, opacity 0.4s",zIndex:999999}},t)}}),Hp=(e="RouteProvider")=>fe({name:e,props:{vnode:{type:Object,required:!0},route:{type:Object,required:!0},vnodeRef:Object,renderKey:String,trackRootNodes:Boolean},setup(t){const n=t.renderKey,r=t.route,o={};for(const s in t.route)Object.defineProperty(o,s,{get:()=>n===t.renderKey?t.route[s]:r[s],enumerable:!0});return at(Wn,Ot(o)),()=>ke(t.vnode,{ref:t.vnodeRef})}}),H_=Hp(),wu=new WeakMap,B_=fe({name:"NuxtPage",inheritAttrs:!1,props:{name:{type:String},transition:{type:[Boolean,Object],default:void 0},keepalive:{type:[Boolean,Object],default:void 0},route:{type:Object},pageKey:{type:[Function,String],default:null}},setup(e,{attrs:t,slots:n,expose:r}){const o=xe(),s=se(),i=Se(Wn,null);let a;r({pageRef:s});const l=Se(zd,null);let u;const c=o.deferHydration();if(o.isHydrating){const d=o.hooks.hookOnce("app:error",c);nt().beforeEach(d)}e.pageKey&&Ne(()=>e.pageKey,(d,p)=>{d!==p&&o.callHook("page:loading:start")});let f=!1;{const d=nt().beforeResolve(()=>{f=!1});Qn(()=>{d()})}return()=>ke(vp,{name:e.name,route:e.route,...t},{default:d=>{const p=V_(i,d.route,d.Component),g=i&&i.matched.length===d.route.matched.length;if(!d.Component){if(u&&!g)return u;c();return}if(u&&l&&!l.isCurrent(d.route))return u;if(p&&i&&(!l||l!=null&&l.isCurrent(i)))return g?u:null;const h=ga(d,e.pageKey),y=q_(i,d.route,d.Component);!o.isHydrating&&a===h&&!y&&tt(()=>{f=!0,o.callHook("page:loading:end")}),a=h;const k=!!(e.transition??d.route.meta.pageTransition??Sc),v=k&&U_([e.transition,d.route.meta.pageTransition,Sc,{onBeforeLeave(){o._runningTransition=!0},onAfterLeave(){delete o._runningTransition,o.callHook("page:transition:finish",d.Component)}}]),m=e.keepalive??d.route.meta.keepalive??mb;return u=_p(k&&v,U0(m,ke(tl,{suspensible:!0,onPending:()=>o.callHook("page:start",d.Component),onResolve:()=>{tt(()=>o.callHook("page:finish",d.Component).then(()=>{if(!f&&!y)return f=!0,o.callHook("page:loading:end")}).finally(c))}},{default:()=>{const b={key:h||void 0,vnode:n.default?z_(n.default,d):d.Component,route:d.route,renderKey:h||void 0,trackRootNodes:k,vnodeRef:s};if(!m)return ke(H_,b);const _=d.Component.type,x=_;let S=wu.get(x);return S||(S=Hp(_.name||_.__name),wu.set(x,S)),ke(S,b)}}))).default(),u}})}});function U_(e){const t=e.filter(Boolean).map(n=>({...n,onAfterLeave:n.onAfterLeave?ml(n.onAfterLeave):void 0}));return ko(...t)}function V_(e,t,n){if(!e)return!1;const r=t.matched.findIndex(o=>{var s;return((s=o.components)==null?void 0:s.default)===(n==null?void 0:n.type)});return!r||r===-1?!1:t.matched.slice(0,r).some((o,s)=>{var i,a,l;return((i=o.components)==null?void 0:i.default)!==((l=(a=e.matched[s])==null?void 0:a.components)==null?void 0:l.default)})||n&&ga({route:t,Component:n})!==ga({route:e,Component:n})}function q_(e,t,n){return e?t.matched.findIndex(o=>{var s;return((s=o.components)==null?void 0:s.default)===(n==null?void 0:n.type)})ke(kn[e.name],e.layoutProps,t.slots)}}),W_={name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},G_=fe({name:"NuxtLayout",inheritAttrs:!1,props:W_,setup(e,t){const n=xe(),r=Se(Wn),s=!r||r===xo()?wp():r,i=F(()=>{let c=A(e.name)??(s==null?void 0:s.meta.layout)??"default";return c&&!(c in kn)&&e.fallback&&(c=A(e.fallback)),c}),a=Ze();t.expose({layoutRef:a});const l=n.deferHydration();if(n.isHydrating){const c=n.hooks.hookOnce("app:error",l);nt().beforeEach(c)}let u;return()=>{const c=i.value&&i.value in kn,f=(s==null?void 0:s.meta.layoutTransition)??gb,d=u;return u=i.value,_p(c&&f,{default:()=>ke(tl,{suspensible:!0,onResolve:()=>{tt(l)}},{default:()=>ke(J_,{layoutProps:Te(t.attrs,{ref:a}),key:i.value||void 0,name:i.value,shouldProvide:!e.name,isRenderingNewLayout:p=>p!==d&&p===i.value,hasTransition:!!f},t.slots)})}).default()}}}),J_=fe({name:"NuxtLayoutProvider",inheritAttrs:!1,props:{name:{type:[String,Boolean]},layoutProps:{type:Object},hasTransition:{type:Boolean},shouldProvide:{type:Boolean},isRenderingNewLayout:{type:Function,required:!0}},setup(e,t){const n=e.name;e.shouldProvide&&at(zd,{isCurrent:s=>n===(s.meta.layout??"default")});const r=Se(Wn);if(r&&r===xo()){const s=wp(),i={};for(const a in s){const l=a;Object.defineProperty(i,l,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)?s[l]:r[l]})}at(Wn,Ot(i))}return()=>{var s,i;return!n||typeof n=="string"&&!(n in kn)?(i=(s=t.slots).default)==null?void 0:i.call(s):ke(K_,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}});function _l(e){return e?e.flatMap(t=>t.type===Ie?_l(t.children):[t]):[]}const Is=fe({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var l;if(!n.default)return null;const r=_l(n.default()),o=r.findIndex(u=>u.type!==je);if(o===-1)return r;const s=r[o];(l=s.props)==null||delete l.ref;const i=s.props?Te(t,s.props):t,a=zt({...s,props:{}},i);return r.length===1?a:(r[o]=a,r)}}}),Y_=["area","img","input"],Dt=fe({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const r=e.asChild?"template":e.as;return typeof r=="string"&&Y_.includes(r)?()=>ke(r,t):r!=="template"?()=>ke(e.as,t,{default:n.default}):()=>ke(Is,t,{default:n.default})}}),Bp=fe({__name:"VisuallyHidden",props:{feature:{default:"focusable"},asChild:{type:Boolean},as:{default:"span"}},setup(e){return(t,n)=>(Y(),ne(A(Dt),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal"}},{default:ce(()=>[ge(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}});function vS(e,t){var n;const r=Ze();return ln(()=>{r.value=e()},{...t,flush:(n=void 0)!=null?n:"sync"}),bt(r)}function Zn(e){return Yn()?(gr(e),!0):!1}function wS(){const e=new Set,t=s=>{e.delete(s)};return{on:s=>{e.add(s);const i=()=>t(s);return Zn(i),{off:i}},off:t,trigger:(...s)=>Promise.all(Array.from(e).map(i=>i(...s))),clear:()=>{e.clear()}}}function _S(e){let t=!1,n;const r=Bs(!0);return(...o)=>(t||(n=r.run(()=>e(...o)),t=!0),n)}function kS(e){let t=0,n,r;const o=()=>{t-=1,r&&t<=0&&(r.stop(),n=void 0,r=void 0)};return(...s)=>(t+=1,r||(r=Bs(!0),n=r.run(()=>e(...s))),Zn(o),n)}function Q_(e){if(!Pe(e))return et(e);const t=new Proxy({},{get(n,r,o){return A(Reflect.get(e.value,r,o))},set(n,r,o){return Pe(e.value[r])&&!Pe(o)?e.value[r].value=o:e.value[r]=o,!0},deleteProperty(n,r){return Reflect.deleteProperty(e.value,r)},has(n,r){return Reflect.has(e.value,r)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return et(t)}function X_(e){return Q_(F(e))}function xS(e,...t){const n=t.flat(),r=n[0];return X_(()=>Object.fromEntries(typeof r=="function"?Object.entries($t(e)).filter(([o,s])=>!r(Le(s),o)):Object.entries($t(e)).filter(o=>!n.includes(o[0]))))}const er=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Z_=e=>typeof e<"u",e1=Object.prototype.toString,t1=e=>e1.call(e)==="[object Object]",Ms=()=>{},ES=n1();function n1(){var e,t;return er&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Up(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const Vp=e=>e();function r1(e,t={}){let n,r,o=Ms;const s=l=>{clearTimeout(l),o(),o=Ms};let i;return l=>{const u=Le(e),c=Le(t.maxWait);return n&&s(n),u<=0||c!==void 0&&c<=0?(r&&(s(r),r=null),Promise.resolve(l())):new Promise((f,d)=>{o=t.rejectOnCancel?d:f,i=l,c&&!r&&(r=setTimeout(()=>{n&&s(n),r=null,f(i())},c)),n=setTimeout(()=>{r&&s(r),r=null,f(l())},u)})}}function o1(e=Vp,t={}){const{initialState:n="active"}=t,r=i1(n==="active");function o(){r.value=!1}function s(){r.value=!0}const i=(...a)=>{r.value&&e(...a)};return{isActive:bt(r),pause:o,resume:s,eventFilter:i}}function s1(e){return Fe()}function Pi(e){return Array.isArray(e)?e:[e]}function i1(...e){if(e.length!==1)return Rt(...e);const t=e[0];return typeof t=="function"?bt(yo(()=>({get:t,set:Ms}))):se(t)}function SS(e,t=1e4){return yo((n,r)=>{let o=Le(e),s;const i=()=>setTimeout(()=>{o=Le(e),r()},Le(t));return Zn(()=>{clearTimeout(s)}),{get(){return n(),o},set(a){o=a,r(),clearTimeout(s),s=i()}}})}function CS(e,t=200,n={}){return Up(r1(t,n),e)}function a1(e,t,n={}){const{eventFilter:r=Vp,...o}=n;return Ne(e,Up(r,t),o)}function _u(e,t,n={}){const{eventFilter:r,initialState:o="active",...s}=n,{eventFilter:i,pause:a,resume:l,isActive:u}=o1(r,{initialState:o});return{stop:a1(e,t,{...s,eventFilter:i}),pause:a,resume:l,isActive:u}}function TS(e,t,...[n]){const{flush:r="sync",deep:o=!1,immediate:s=!0,direction:i="both",transform:a={}}=n||{},l=[],u="ltr"in a&&a.ltr||(d=>d),c="rtl"in a&&a.rtl||(d=>d);return(i==="both"||i==="ltr")&&l.push(_u(e,d=>{l.forEach(p=>p.pause()),t.value=u(d),l.forEach(p=>p.resume())},{flush:r,deep:o,immediate:s})),(i==="both"||i==="rtl")&&l.push(_u(t,d=>{l.forEach(p=>p.pause()),e.value=c(d),l.forEach(p=>p.resume())},{flush:r,deep:o,immediate:s})),()=>{l.forEach(d=>d.stop())}}function PS(e,t){s1()&&Qn(e,t)}function qp(e,t,n={}){const{immediate:r=!0,immediateCallback:o=!1}=n,s=Ze(!1);let i=null;function a(){i&&(clearTimeout(i),i=null)}function l(){s.value=!1,a()}function u(...c){o&&e(),a(),s.value=!0,i=setTimeout(()=>{s.value=!1,i=null,e(...c)},Le(t))}return r&&(s.value=!0,er&&u()),Zn(l),{isPending:bt(s),start:u,stop:l}}function l1(e=1e3,t={}){const{controls:n=!1,callback:r}=t,o=qp(r??Ms,e,t),s=F(()=>!o.isPending.value);return n?{ready:s,...o}:s}function c1(e,t,n){return Ne(e,t,{...n,immediate:!0})}const So=er?window:void 0;function Pn(e){var t;const n=Le(e);return(t=n==null?void 0:n.$el)!=null?t:n}function u1(...e){const t=[],n=()=>{t.forEach(a=>a()),t.length=0},r=(a,l,u,c)=>(a.addEventListener(l,u,c),()=>a.removeEventListener(l,u,c)),o=F(()=>{const a=Pi(Le(e[0])).filter(l=>l!=null);return a.every(l=>typeof l!="string")?a:void 0}),s=c1(()=>{var a,l;return[(l=(a=o.value)==null?void 0:a.map(u=>Pn(u)))!=null?l:[So].filter(u=>u!=null),Pi(Le(o.value?e[1]:e[0])),Pi(A(o.value?e[2]:e[1])),Le(o.value?e[3]:e[2])]},([a,l,u,c])=>{if(n(),!(a!=null&&a.length)||!(l!=null&&l.length)||!(u!=null&&u.length))return;const f=t1(c)?{...c}:c;t.push(...a.flatMap(d=>l.flatMap(p=>u.map(g=>r(d,p,g,f)))))},{flush:"post"}),i=()=>{s(),n()};return Zn(n),i}function zp(){const e=Ze(!1),t=Fe();return t&&jt(()=>{e.value=!0},t),e}function f1(e){const t=zp();return F(()=>(t.value,!!e()))}function d1(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function kl(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:o=So,eventName:s="keydown",passive:i=!1,dedupe:a=!1}=r,l=d1(t);return u1(o,s,c=>{c.repeat&&Le(a)||l(c)&&n(c)},i)}function Kp(e,t={}){const{immediate:n=!0,fpsLimit:r=void 0,window:o=So,once:s=!1}=t,i=Ze(!1),a=F(()=>r?1e3/Le(r):null);let l=0,u=null;function c(p){if(!i.value||!o)return;l||(l=p);const g=p-l;if(a.value&&gr&&"ResizeObserver"in r),a=()=>{s&&(s.disconnect(),s=void 0)},l=F(()=>{const f=Le(e);return Array.isArray(f)?f.map(d=>Pn(d)):[Pn(f)]}),u=Ne(l,f=>{if(a(),i.value&&r){s=new ResizeObserver(t);for(const d of f)d&&s.observe(d,o)}},{immediate:!0,flush:"post"}),c=()=>{a(),u()};return Zn(c),{isSupported:i,stop:c}}function h1(e,t,n,r={}){var o,s,i;const{clone:a=!1,passive:l=!1,eventName:u,deep:c=!1,defaultValue:f,shouldEmit:d}=r,p=Fe(),g=n||(p==null?void 0:p.emit)||((o=p==null?void 0:p.$emit)==null?void 0:o.bind(p))||((i=(s=p==null?void 0:p.proxy)==null?void 0:s.$emit)==null?void 0:i.bind(p==null?void 0:p.proxy));let h=u;t||(t="modelValue"),h=h||`update:${t.toString()}`;const y=m=>a?typeof a=="function"?a(m):p1(m):m,k=()=>Z_(e[t])?y(e[t]):f,v=m=>{d?d(m)&&g(h,m):g(h,m)};if(l){const m=k(),b=se(m);let _=!1;return Ne(()=>e[t],x=>{_||(_=!0,b.value=y(x),tt(()=>_=!1))}),Ne(b,x=>{!_&&(x!==e[t]||c)&&v(x)},{deep:c}),b}else return F({get(){return k()},set(m){v(m)}})}function oi(e,t){const n=typeof e=="string"&&!t?`${e}Context`:t,r=Symbol(n);return[i=>{const a=Se(r,i);if(a||a===null)return a;throw new Error(`Injection \`${r.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},i=>(at(r,i),i)]}const[OS,g1]=oi("ConfigProvider"),m1=fe({inheritAttrs:!1,__name:"ConfigProvider",props:{dir:{default:"ltr"},locale:{default:"en"},scrollBody:{type:[Boolean,Object],default:!0},nonce:{default:void 0},useId:{type:Function,default:void 0}},setup(e){const t=e,{dir:n,locale:r,scrollBody:o,nonce:s}=$t(t);return g1({dir:n,locale:r,scrollBody:o,nonce:s,useId:t.useId}),(i,a)=>ge(i.$slots,"default")}});function Wt(){const e=Fe(),t=se(),n=F(()=>{var i,a;return["#text","#comment"].includes((i=t.value)==null?void 0:i.$el.nodeName)?(a=t.value)==null?void 0:a.$el.nextElementSibling:Pn(t)}),r=Object.assign({},e.exposed),o={};for(const i in e.props)Object.defineProperty(o,i,{enumerable:!0,configurable:!0,get:()=>e.props[i]});if(Object.keys(r).length>0)for(const i in r)Object.defineProperty(o,i,{enumerable:!0,configurable:!0,get:()=>r[i]});Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=o;function s(i){t.value=i,i&&(Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>i instanceof Element?i:i.$el}),e.exposed=o)}return{forwardRef:s,currentRef:t,currentElement:n}}function y1(e,t){const n=se(e);function r(s){return t[n.value][s]??n.value}return{state:n,dispatch:s=>{n.value=r(s)}}}function b1(e,t){var y;const n=se({}),r=se("none"),o=se(e),s=e.value?"mounted":"unmounted";let i;const a=((y=t.value)==null?void 0:y.ownerDocument.defaultView)??So,{state:l,dispatch:u}=y1(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),c=k=>{var v;if(er){const m=new CustomEvent(k,{bubbles:!1,cancelable:!1});(v=t.value)==null||v.dispatchEvent(m)}};Ne(e,async(k,v)=>{var b;const m=v!==k;if(await tt(),m){const _=r.value,x=Vo(t.value);k?(u("MOUNT"),c("enter"),x==="none"&&c("after-enter")):x==="none"||x==="undefined"||((b=n.value)==null?void 0:b.display)==="none"?(u("UNMOUNT"),c("leave"),c("after-leave")):v&&_!==x?(u("ANIMATION_OUT"),c("leave")):(u("UNMOUNT"),c("after-leave"))}},{immediate:!0});const f=k=>{const v=Vo(t.value),m=v.includes(k.animationName),b=l.value==="mounted"?"enter":"leave";if(k.target===t.value&&m&&(c(`after-${b}`),u("ANIMATION_END"),!o.value)){const _=t.value.style.animationFillMode;t.value.style.animationFillMode="forwards",i=a==null?void 0:a.setTimeout(()=>{var x;((x=t.value)==null?void 0:x.style.animationFillMode)==="forwards"&&(t.value.style.animationFillMode=_)})}k.target===t.value&&v==="none"&&u("ANIMATION_END")},d=k=>{k.target===t.value&&(r.value=Vo(t.value))},p=Ne(t,(k,v)=>{k?(n.value=getComputedStyle(k),k.addEventListener("animationstart",d),k.addEventListener("animationcancel",f),k.addEventListener("animationend",f)):(u("ANIMATION_END"),i!==void 0&&(a==null||a.clearTimeout(i)),v==null||v.removeEventListener("animationstart",d),v==null||v.removeEventListener("animationcancel",f),v==null||v.removeEventListener("animationend",f))},{immediate:!0}),g=Ne(l,()=>{const k=Vo(t.value);r.value=l.value==="mounted"?k:"none"});return Xn(()=>{p(),g()}),{isPresent:F(()=>["mounted","unmountSuspended"].includes(l.value))}}function Vo(e){return e&&getComputedStyle(e).animationName||"none"}const v1=fe({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(e,{slots:t,expose:n}){var u;const{present:r,forceMount:o}=$t(e),s=se(),{isPresent:i}=b1(r,s);n({present:i});let a=t.default({present:i.value});a=_l(a||[]);const l=Fe();if(a&&(a==null?void 0:a.length)>1){const c=(u=l==null?void 0:l.parent)!=null&&u.type.name?`<${l.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${c}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(f=>` - ${f}`).join(` +`)].join(` +`))}return()=>o.value||r.value||i.value?ke(t.default({present:i.value})[0],{ref:c=>{const f=Pn(c);return typeof(f==null?void 0:f.hasAttribute)>"u"||(f!=null&&f.hasAttribute("data-reka-popper-content-wrapper")?s.value=f.firstElementChild:s.value=f),f}}):null}});function w1(e){const t=Fe(),n=t==null?void 0:t.type.emits,r={};return n!=null&&n.length||console.warn(`No emitted event found. Please check component: ${t==null?void 0:t.type.__name}`),n==null||n.forEach(o=>{r[zr(We(o))]=(...s)=>e(o,...s)}),r}function Wp(e,t,n){const r=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&r.addEventListener(e,t,{once:!0}),r.dispatchEvent(o)}const _1="dismissableLayer.pointerDownOutside",k1="dismissableLayer.focusOutside";function Gp(e,t){const n=t.closest("[data-dismissable-layer]"),r=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),o=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(r===n||o.indexOf(r){});return ln(a=>{if(!er||!Le(n))return;const l=async c=>{const f=c.target;if(!(!(t!=null&&t.value)||!f)){if(Gp(t.value,f)){o.value=!1;return}if(c.target&&!o.value){let d=function(){Wp(_1,e,p)};const p={originalEvent:c};c.pointerType==="touch"?(r.removeEventListener("click",s.value),s.value=d,r.addEventListener("click",s.value,{once:!0})):d()}else r.removeEventListener("click",s.value);o.value=!1}},u=window.setTimeout(()=>{r.addEventListener("pointerdown",l)},0);a(()=>{window.clearTimeout(u),r.removeEventListener("pointerdown",l),r.removeEventListener("click",s.value)})}),{onPointerDownCapture:()=>{Le(n)&&(o.value=!0)}}}function E1(e,t){var o;const n=((o=t==null?void 0:t.value)==null?void 0:o.ownerDocument)??(globalThis==null?void 0:globalThis.document),r=se(!1);return ln(s=>{if(!er)return;const i=async a=>{if(!(t!=null&&t.value))return;await tt(),await tt();const l=a.target;!t.value||!l||Gp(t.value,l)||a.target&&!r.value&&Wp(k1,e,{originalEvent:a})};n.addEventListener("focusin",i),s(()=>n.removeEventListener("focusin",i))}),{onFocusCapture:()=>r.value=!0,onBlurCapture:()=>r.value=!1}}const Tt=et({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),RS=fe({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,default:!1},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,r=t,{forwardRef:o,currentElement:s}=Wt(),i=F(()=>{var g;return((g=s.value)==null?void 0:g.ownerDocument)??globalThis.document}),a=F(()=>Tt.layersRoot),l=F(()=>s.value?Array.from(a.value).indexOf(s.value):-1),u=F(()=>Tt.layersWithOutsidePointerEventsDisabled.size>0),c=F(()=>{const g=Array.from(a.value),[h]=[...Tt.layersWithOutsidePointerEventsDisabled].slice(-1),y=g.indexOf(h);return l.value>=y}),f=x1(async g=>{const h=[...Tt.branches].some(y=>y==null?void 0:y.contains(g.target));!c.value||h||(r("pointerDownOutside",g),r("interactOutside",g),await tt(),g.defaultPrevented||r("dismiss"))},s),d=E1(g=>{[...Tt.branches].some(y=>y==null?void 0:y.contains(g.target))||(r("focusOutside",g),r("interactOutside",g),g.defaultPrevented||r("dismiss"))},s);kl("Escape",g=>{l.value===a.value.size-1&&(r("escapeKeyDown",g),g.defaultPrevented||r("dismiss"))});let p;return ln(g=>{s.value&&(n.disableOutsidePointerEvents&&(Tt.layersWithOutsidePointerEventsDisabled.size===0&&(p=i.value.body.style.pointerEvents,i.value.body.style.pointerEvents="none"),Tt.layersWithOutsidePointerEventsDisabled.add(s.value)),a.value.add(s.value),g(()=>{n.disableOutsidePointerEvents&&Tt.layersWithOutsidePointerEventsDisabled.size===1&&(i.value.body.style.pointerEvents=p)}))}),ln(g=>{g(()=>{s.value&&(a.value.delete(s.value),Tt.layersWithOutsidePointerEventsDisabled.delete(s.value))})}),(g,h)=>(Y(),ne(A(Dt),{ref:A(o),"as-child":g.asChild,as:g.as,"data-dismissable-layer":"",style:cn({pointerEvents:u.value?c.value?"auto":"none":void 0}),onFocusCapture:A(d).onFocusCapture,onBlurCapture:A(d).onBlurCapture,onPointerdownCapture:A(f).onPointerDownCapture},{default:ce(()=>[ge(g.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}});function xr(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const IS="focusScope.autoFocusOnMount",MS="focusScope.autoFocusOnUnmount",$S={bubbles:!1,cancelable:!0};function Ai(e,{select:t=!1}={}){const n=xr();for(const r of e)if(T1(r,{select:t}),xr()!==n)return!0}function NS(e){const t=Jp(e),n=ku(t,e),r=ku(t.reverse(),e);return[n,r]}function Jp(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ku(e,t){for(const n of e)if(!S1(n,{upTo:t}))return n}function S1(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function C1(e){return e instanceof HTMLInputElement&&"select"in e}function T1(e,{select:t=!1}={}){if(e&&e.focus){const n=xr();e.focus({preventScroll:!0}),e!==n&&C1(e)&&t&&e.select()}}const P1=fe({__name:"Teleport",props:{to:{default:"body"},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const t=zp();return(n,r)=>A(t)||n.forceMount?(Y(),ne(kf,{key:0,to:n.to,disabled:n.disabled,defer:n.defer},[ge(n.$slots,"default")],8,["to","disabled","defer"])):Ue("",!0)}});function Pr(e){const t=Fe(),n=Object.keys((t==null?void 0:t.type.props)??{}).reduce((o,s)=>{const i=(t==null?void 0:t.type.props[s]).default;return i!==void 0&&(o[s]=i),o},{}),r=Rt(e);return F(()=>{const o=$t(r.value),s={},i=(t==null?void 0:t.vnode.props)??{};return Object.keys(i).forEach(a=>{s[We(a)]=i[a]}),Object.keys({...n,...s}).reduce((a,l)=>{var c;const u=(c=o[l])==null?void 0:c.value;return u!==void 0&&(a[l]=u),a},{})})}function A1(e,t){const n=Pr(e),r=t?w1(t):{};return F(()=>({...n.value,...r}))}function xu(){const e=se(),t=F(()=>{var n,r;return["#text","#comment"].includes((n=e.value)==null?void 0:n.$el.nodeName)?(r=e.value)==null?void 0:r.$el.nextElementSibling:Pn(e)});return{primitiveElement:e,currentElement:t}}const Eu="data-reka-collection-item";function xl(e={}){const{key:t="",isProvider:n=!1}=e,r=`${t}CollectionProvider`;let o;if(n){const c=se(new Map);o={collectionRef:se(),itemMap:c},at(r,o)}else o=Se(r);const s=(c=!1)=>{const f=o.collectionRef.value;if(!f)return[];const d=Array.from(f.querySelectorAll(`[${Eu}]`)),g=Array.from(o.itemMap.value.values()).sort((h,y)=>d.indexOf(h.ref)-d.indexOf(y.ref));return c?g:g.filter(h=>h.ref.dataset.disabled!=="")},i=fe({name:"CollectionSlot",setup(c,{slots:f}){const{primitiveElement:d,currentElement:p}=xu();return Ne(p,()=>{o.collectionRef.value=p.value}),()=>ke(Is,{ref:d},f)}}),a=fe({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(c,{slots:f,attrs:d}){const{primitiveElement:p,currentElement:g}=xu();return ln(h=>{if(g.value){const y=Va(g.value);o.itemMap.value.set(y,{ref:g.value,value:c.value}),h(()=>o.itemMap.value.delete(y))}}),()=>ke(Is,{...d,[Eu]:"",ref:p},f)}}),l=F(()=>Array.from(o.itemMap.value.values())),u=F(()=>o.itemMap.value.size);return{getItems:s,reactiveItems:l,itemMapSize:u,CollectionSlot:i,CollectionItem:a}}const Yp=fe({__name:"ToastAnnounceExclude",props:{altText:{},asChild:{type:Boolean},as:{}},setup(e){return(t,n)=>(Y(),ne(A(Dt),{as:t.as,"as-child":t.asChild,"data-reka-toast-announce-exclude":"","data-reka-toast-announce-alt":t.altText||void 0},{default:ce(()=>[ge(t.$slots,"default")]),_:3},8,["as","as-child","data-reka-toast-announce-alt"]))}}),[si,O1]=oi("ToastProvider"),R1=fe({inheritAttrs:!1,__name:"ToastProvider",props:{label:{default:"Notification"},duration:{default:5e3},swipeDirection:{default:"right"},swipeThreshold:{default:50}},setup(e){const t=e,{label:n,duration:r,swipeDirection:o,swipeThreshold:s}=$t(t);xl({isProvider:!0});const i=se(),a=se(0),l=se(!1),u=se(!1);if(t.label&&typeof t.label=="string"&&!t.label.trim()){const c="Invalid prop `label` supplied to `ToastProvider`. Expected non-empty `string`.";throw new Error(c)}return O1({label:n,duration:r,swipeDirection:o,swipeThreshold:s,toastCount:a,viewport:i,onViewportChange(c){i.value=c},onToastAdd(){a.value++},onToastRemove(){a.value--},isFocusedToastEscapeKeyDownRef:l,isClosePausedRef:u}),(c,f)=>ge(c.$slots,"default")}}),I1=fe({__name:"ToastAnnounce",setup(e){const t=si(),n=l1(1e3),r=se(!1);return Kp(()=>{r.value=!0}),(o,s)=>A(n)||r.value?(Y(),ne(A(Bp),{key:0},{default:ce(()=>[mr(qn(A(t).label.value)+" ",1),ge(o.$slots,"default")]),_:3})):Ue("",!0)}}),M1="toast.swipeStart",$1="toast.swipeMove",N1="toast.swipeCancel",L1="toast.swipeEnd",xa="toast.viewportPause",Ea="toast.viewportResume";function qo(e,t,n){const r=n.originalEvent.currentTarget,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&r.addEventListener(e,t,{once:!0}),r.dispatchEvent(o)}function Su(e,t,n=0){const r=Math.abs(e.x),o=Math.abs(e.y),s=r>o;return t==="left"||t==="right"?s&&r>n:!s&&o>n}function j1(e){return e.nodeType===e.ELEMENT_NODE}function Qp(e){const t=[];return Array.from(e.childNodes).forEach(r=>{if(r.nodeType===r.TEXT_NODE&&r.textContent&&t.push(r.textContent),j1(r)){const o=r.ariaHidden||r.hidden||r.style.display==="none",s=r.dataset.rekaToastAnnounceExclude==="";if(!o)if(s){const i=r.dataset.rekaToastAnnounceAlt;i&&t.push(i)}else t.push(...Qp(r))}}),t}const[D1,F1]=oi("ToastRoot"),H1=fe({inheritAttrs:!1,__name:"ToastRootImpl",props:{type:{},open:{type:Boolean,default:!1},duration:{},asChild:{type:Boolean},as:{default:"li"}},emits:["close","escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd"],setup(e,{emit:t}){const n=e,r=t,{forwardRef:o,currentElement:s}=Wt(),{CollectionItem:i}=xl(),a=si(),l=se(null),u=se(null),c=F(()=>typeof n.duration=="number"?n.duration:a.duration.value),f=se(0),d=se(c.value),p=se(0),g=se(c.value),h=Kp(()=>{const m=new Date().getTime()-f.value;g.value=Math.max(d.value-m,0)},{fpsLimit:60});function y(m){m<=0||m===Number.POSITIVE_INFINITY||er&&(window.clearTimeout(p.value),f.value=new Date().getTime(),p.value=window.setTimeout(k,m))}function k(m){var x,S;const b=(m==null?void 0:m.pointerType)==="";((x=s.value)==null?void 0:x.contains(xr()))&&b&&((S=a.viewport.value)==null||S.focus()),b&&(a.isClosePausedRef.value=!1),r("close")}const v=F(()=>s.value?Qp(s.value):null);if(n.type&&!["foreground","background"].includes(n.type)){const m="Invalid prop `type` supplied to `Toast`. Expected `foreground | background`.";throw new Error(m)}return ln(m=>{const b=a.viewport.value;if(b){const _=()=>{y(d.value),h.resume(),r("resume")},x=()=>{const S=new Date().getTime()-f.value;d.value=d.value-S,window.clearTimeout(p.value),h.pause(),r("pause")};return b.addEventListener(xa,x),b.addEventListener(Ea,_),()=>{b.removeEventListener(xa,x),b.removeEventListener(Ea,_)}}}),Ne(()=>[n.open,c.value],()=>{d.value=c.value,n.open&&!a.isClosePausedRef.value&&y(c.value)},{immediate:!0}),kl("Escape",m=>{r("escapeKeyDown",m),m.defaultPrevented||(a.isFocusedToastEscapeKeyDownRef.value=!0,k())}),jt(()=>{a.onToastAdd()}),Xn(()=>{a.onToastRemove()}),F1({onClose:k}),(m,b)=>(Y(),yt(Ie,null,[v.value?(Y(),ne(I1,{key:0,role:"alert","aria-live":m.type==="foreground"?"assertive":"polite","aria-atomic":"true"},{default:ce(()=>[mr(qn(v.value),1)]),_:1},8,["aria-live"])):Ue("",!0),A(a).viewport.value?(Y(),ne(kf,{key:1,to:A(a).viewport.value},[ue(A(i),null,{default:ce(()=>[ue(A(Dt),Te({ref:A(o),role:"alert","aria-live":"off","aria-atomic":"true",tabindex:"0"},m.$attrs,{as:m.as,"as-child":m.asChild,"data-state":m.open?"open":"closed","data-swipe-direction":A(a).swipeDirection.value,style:{userSelect:"none",touchAction:"none"},onPointerdown:b[0]||(b[0]=Zo(_=>{l.value={x:_.clientX,y:_.clientY}},["left"])),onPointermove:b[1]||(b[1]=_=>{if(!l.value)return;const x=_.clientX-l.value.x,S=_.clientY-l.value.y,N=!!u.value,O=["left","right"].includes(A(a).swipeDirection.value),P=["left","up"].includes(A(a).swipeDirection.value)?Math.min:Math.max,q=O?P(0,x):0,T=O?0:P(0,S),$=_.pointerType==="touch"?10:2,B={x:q,y:T},W={originalEvent:_,delta:B};N?(u.value=B,A(qo)(A($1),R=>r("swipeMove",R),W)):A(Su)(B,A(a).swipeDirection.value,$)?(u.value=B,A(qo)(A(M1),R=>r("swipeStart",R),W),_.target.setPointerCapture(_.pointerId)):(Math.abs(x)>$||Math.abs(S)>$)&&(l.value=null)}),onPointerup:b[2]||(b[2]=_=>{const x=u.value,S=_.target;if(S.hasPointerCapture(_.pointerId)&&S.releasePointerCapture(_.pointerId),u.value=null,l.value=null,x){const N=_.currentTarget,O={originalEvent:_,delta:x};A(Su)(x,A(a).swipeDirection.value,A(a).swipeThreshold.value)?A(qo)(A(L1),P=>r("swipeEnd",P),O):A(qo)(A(N1),P=>r("swipeCancel",P),O),N==null||N.addEventListener("click",P=>P.preventDefault(),{once:!0})}})}),{default:ce(()=>[ge(m.$slots,"default",{remaining:g.value,duration:c.value})]),_:3},16,["as","as-child","data-state","data-swipe-direction"])]),_:3})],8,["to"])):Ue("",!0)],64))}}),Xp=fe({__name:"ToastClose",props:{asChild:{type:Boolean},as:{default:"button"}},setup(e){const t=e,n=D1(),{forwardRef:r}=Wt();return(o,s)=>(Y(),ne(Yp,{"as-child":""},{default:ce(()=>[ue(A(Dt),Te(t,{ref:A(r),type:o.as==="button"?"button":void 0,onClick:A(n).onClose}),{default:ce(()=>[ge(o.$slots,"default")]),_:3},16,["type","onClick"])]),_:3}))}}),Cu=fe({__name:"ToastAction",props:{altText:{},asChild:{type:Boolean},as:{}},setup(e){if(!e.altText)throw new Error("Missing prop `altText` expected on `ToastAction`");const{forwardRef:n}=Wt();return(r,o)=>r.altText?(Y(),ne(Yp,{key:0,"alt-text":r.altText,"as-child":""},{default:ce(()=>[ue(Xp,{ref:A(n),as:r.as,"as-child":r.asChild},{default:ce(()=>[ge(r.$slots,"default")]),_:3},8,["as","as-child"])]),_:3},8,["alt-text"])):Ue("",!0)}}),B1=fe({__name:"ToastDescription",props:{asChild:{type:Boolean},as:{}},setup(e){const t=e;return Wt(),(n,r)=>(Y(),ne(A(Dt),qt(An(t)),{default:ce(()=>[ge(n.$slots,"default")]),_:3},16))}}),U1=fe({__name:"ToastPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const t=e;return(n,r)=>(Y(),ne(A(P1),qt(An(t)),{default:ce(()=>[ge(n.$slots,"default")]),_:3},16))}}),V1=fe({__name:"ToastRoot",props:{defaultOpen:{type:Boolean,default:!0},forceMount:{type:Boolean},type:{default:"foreground"},open:{type:Boolean,default:void 0},duration:{},asChild:{type:Boolean},as:{default:"li"}},emits:["escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd","update:open"],setup(e,{emit:t}){const n=e,r=t,{forwardRef:o}=Wt(),s=h1(n,"open",r,{defaultValue:n.defaultOpen,passive:n.open===void 0});return(i,a)=>(Y(),ne(A(v1),{present:i.forceMount||A(s)},{default:ce(()=>[ue(H1,Te({ref:A(o),open:A(s),type:i.type,as:i.as,"as-child":i.asChild,duration:i.duration},i.$attrs,{onClose:a[0]||(a[0]=l=>s.value=!1),onPause:a[1]||(a[1]=l=>r("pause")),onResume:a[2]||(a[2]=l=>r("resume")),onEscapeKeyDown:a[3]||(a[3]=l=>r("escapeKeyDown",l)),onSwipeStart:a[4]||(a[4]=l=>{r("swipeStart",l),l.defaultPrevented||l.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:a[5]||(a[5]=l=>{if(r("swipeMove",l),!l.defaultPrevented){const{x:u,y:c}=l.detail.delta,f=l.currentTarget;f.setAttribute("data-swipe","move"),f.style.setProperty("--reka-toast-swipe-move-x",`${u}px`),f.style.setProperty("--reka-toast-swipe-move-y",`${c}px`)}}),onSwipeCancel:a[6]||(a[6]=l=>{if(r("swipeCancel",l),!l.defaultPrevented){const u=l.currentTarget;u.setAttribute("data-swipe","cancel"),u.style.removeProperty("--reka-toast-swipe-move-x"),u.style.removeProperty("--reka-toast-swipe-move-y"),u.style.removeProperty("--reka-toast-swipe-end-x"),u.style.removeProperty("--reka-toast-swipe-end-y")}}),onSwipeEnd:a[7]||(a[7]=l=>{if(r("swipeEnd",l),!l.defaultPrevented){const{x:u,y:c}=l.detail.delta,f=l.currentTarget;f.setAttribute("data-swipe","end"),f.style.removeProperty("--reka-toast-swipe-move-x"),f.style.removeProperty("--reka-toast-swipe-move-y"),f.style.setProperty("--reka-toast-swipe-end-x",`${u}px`),f.style.setProperty("--reka-toast-swipe-end-y",`${c}px`),s.value=!1}})}),{default:ce(({remaining:l,duration:u})=>[ge(i.$slots,"default",{remaining:l,duration:u,open:A(s)})]),_:3},16,["open","type","as","as-child","duration"])]),_:3},8,["present"]))}}),q1=fe({__name:"ToastTitle",props:{asChild:{type:Boolean},as:{}},setup(e){const t=e;return Wt(),(n,r)=>(Y(),ne(A(Dt),qt(An(t)),{default:ce(()=>[ge(n.$slots,"default")]),_:3},16))}}),z1=fe({__name:"DismissableLayerBranch",props:{asChild:{type:Boolean},as:{}},setup(e){const t=e,{forwardRef:n,currentElement:r}=Wt();return jt(()=>{Tt.branches.add(r.value)}),Xn(()=>{Tt.branches.delete(r.value)}),(o,s)=>(Y(),ne(A(Dt),Te({ref:A(n)},t),{default:ce(()=>[ge(o.$slots,"default")]),_:3},16))}}),Tu=fe({__name:"FocusProxy",emits:["focusFromOutsideViewport"],setup(e,{emit:t}){const n=t,r=si();return(o,s)=>(Y(),ne(A(Bp),{"aria-hidden":"true",tabindex:"0",style:{position:"fixed"},onFocus:s[0]||(s[0]=i=>{var u;const a=i.relatedTarget;!((u=A(r).viewport.value)!=null&&u.contains(a))&&n("focusFromOutsideViewport")})},{default:ce(()=>[ge(o.$slots,"default")]),_:3}))}}),K1=fe({inheritAttrs:!1,__name:"ToastViewport",props:{hotkey:{default:()=>["F8"]},label:{type:[String,Function],default:"Notifications ({hotkey})"},asChild:{type:Boolean},as:{default:"ol"}},setup(e){const t=e,{hotkey:n,label:r}=$t(t),{forwardRef:o,currentElement:s}=Wt(),{CollectionSlot:i,getItems:a}=xl(),l=si(),u=F(()=>l.toastCount.value>0),c=se(),f=se(),d=F(()=>n.value.join("+").replace(/Key/g,"").replace(/Digit/g,""));kl(n.value,()=>{s.value.focus()}),jt(()=>{l.onViewportChange(s.value)}),ln(g=>{const h=s.value;if(u.value&&h){const y=()=>{if(!l.isClosePausedRef.value){const _=new CustomEvent(xa);h.dispatchEvent(_),l.isClosePausedRef.value=!0}},k=()=>{if(l.isClosePausedRef.value){const _=new CustomEvent(Ea);h.dispatchEvent(_),l.isClosePausedRef.value=!1}},v=_=>{!h.contains(_.relatedTarget)&&k()},m=()=>{h.contains(xr())||k()},b=_=>{var N,O,P;const x=_.altKey||_.ctrlKey||_.metaKey;if(_.key==="Tab"&&!x){const q=xr(),T=_.shiftKey;if(_.target===h&&T){(N=c.value)==null||N.focus();return}const W=p({tabbingDirection:T?"backwards":"forwards"}),R=W.findIndex(z=>z===q);Ai(W.slice(R+1))?_.preventDefault():T?(O=c.value)==null||O.focus():(P=f.value)==null||P.focus()}};h.addEventListener("focusin",y),h.addEventListener("focusout",v),h.addEventListener("pointermove",y),h.addEventListener("pointerleave",m),h.addEventListener("keydown",b),window.addEventListener("blur",y),window.addEventListener("focus",k),g(()=>{h.removeEventListener("focusin",y),h.removeEventListener("focusout",v),h.removeEventListener("pointermove",y),h.removeEventListener("pointerleave",m),h.removeEventListener("keydown",b),window.removeEventListener("blur",y),window.removeEventListener("focus",k)})}});function p({tabbingDirection:g}){const y=a().map(k=>k.ref).map(k=>{const v=[k,...Jp(k)];return g==="forwards"?v:v.reverse()});return(g==="forwards"?y.reverse():y).flat()}return(g,h)=>(Y(),ne(A(z1),{role:"region","aria-label":typeof A(r)=="string"?A(r).replace("{hotkey}",d.value):A(r)(d.value),tabindex:"-1",style:cn({pointerEvents:u.value?void 0:"none"})},{default:ce(()=>[u.value?(Y(),ne(Tu,{key:0,ref:y=>{c.value=A(Pn)(y)},onFocusFromOutsideViewport:h[0]||(h[0]=()=>{const y=p({tabbingDirection:"forwards"});A(Ai)(y)})},null,512)):Ue("",!0),ue(A(i),null,{default:ce(()=>[ue(A(Dt),Te({ref:A(o),tabindex:"-1",as:g.as,"as-child":g.asChild},g.$attrs),{default:ce(()=>[ge(g.$slots,"default")]),_:3},16,["as","as-child"])]),_:3}),u.value?(Y(),ne(Tu,{key:1,ref:y=>{f.value=A(Pn)(y)},onFocusFromOutsideViewport:h[1]||(h[1]=()=>{const y=p({tabbingDirection:"backwards"});A(Ai)(y)})},null,512)):Ue("",!0)]),_:3},8,["aria-label","style"]))}}),[LS,W1]=oi("TooltipProvider"),G1=fe({inheritAttrs:!1,__name:"TooltipProvider",props:{delayDuration:{default:700},skipDelayDuration:{default:300},disableHoverableContent:{type:Boolean,default:!1},disableClosingTrigger:{type:Boolean},disabled:{type:Boolean},ignoreNonKeyboardFocus:{type:Boolean,default:!1}},setup(e){const t=e,{delayDuration:n,skipDelayDuration:r,disableHoverableContent:o,disableClosingTrigger:s,ignoreNonKeyboardFocus:i,disabled:a}=$t(t);Wt();const l=se(!0),u=se(!1),{start:c,stop:f}=qp(()=>{l.value=!0},r,{immediate:!1});return W1({isOpenDelayed:l,delayDuration:n,onOpen(){f(),l.value=!1},onClose(){c()},isPointerInTransitRef:u,disableHoverableContent:o,disableClosingTrigger:s,disabled:a,ignoreNonKeyboardFocus:i}),(d,p)=>ge(d.$slots,"default")}});function J1(e){return Yn()?(gr(e),!0):!1}function Zp(e){let t=0,n,r;const o=()=>{t-=1,r&&t<=0&&(r.stop(),n=void 0,r=void 0)};return(...s)=>(t+=1,r||(r=Bs(!0),n=r.run(()=>e(...s))),J1(o),n)}function jS(e,t){if(typeof Symbol<"u"){const n={...e};return Object.defineProperty(n,Symbol.iterator,{enumerable:!1,value(){let r=0;return{next:()=>({value:t[r++],done:r>t.length})}}}),n}else return Object.assign([...t],e)}function Y1(e){if(!Pe(e))return et(e);const t=new Proxy({},{get(n,r,o){return A(Reflect.get(e.value,r,o))},set(n,r,o){return Pe(e.value[r])&&!Pe(o)?e.value[r].value=o:e.value[r]=o,!0},deleteProperty(n,r){return Reflect.deleteProperty(e.value,r)},has(n,r){return Reflect.has(e.value,r)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return et(t)}function eh(e){return Y1(F(e))}function Q1(e,...t){const n=t.flat(),r=n[0];return eh(()=>Object.fromEntries(typeof r=="function"?Object.entries($t(e)).filter(([o,s])=>!r(Le(s),o)):Object.entries($t(e)).filter(o=>!n.includes(o[0]))))}typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Sa=()=>{};function X1(...e){if(e.length!==1)return Rt(...e);const t=e[0];return typeof t=="function"?bt(yo(()=>({get:t,set:Sa}))):se(t)}function Co(e,...t){const n=t.flat(),r=n[0];return eh(()=>Object.fromEntries(typeof r=="function"?Object.entries($t(e)).filter(([o,s])=>r(Le(s),o)):n.map(o=>[o,X1(e,o)])))}function Z1(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}function ek(e,t={}){let n,r,o=Sa;const s=l=>{clearTimeout(l),o(),o=Sa};let i;return l=>{const u=Le(e),c=Le(t.maxWait);return n&&s(n),u<=0||c!==void 0&&c<=0?(r&&(s(r),r=null),Promise.resolve(l())):new Promise((f,d)=>{o=t.rejectOnCancel?d:f,i=l,c&&!r&&(r=setTimeout(()=>{n&&s(n),r=null,f(i())},c)),n=setTimeout(()=>{r&&s(r),r=null,f(l())},u)})}}function tk(e){const t=Object.create(null);return n=>t[n]||(t[n]=e(n))}const nk=/-(\w)/g,DS=tk(e=>e.replace(nk,(t,n)=>n?n.toUpperCase():""));function rk(e,t=200,n={}){return Z1(ek(t,n),e)}function ok(e,t){const n=Ca(e),r=Ca(t);return th(n,r)}function th(e,t){var o,s;const n=[],r=new Set([...Object.keys(e.props||{}),...Object.keys(t.props||{})]);if(e.props&&t.props)for(const i of r){const a=e.props[i],l=t.props[i];a&&l?n.push(...th((o=e.props)==null?void 0:o[i],(s=t.props)==null?void 0:s[i])):(a||l)&&n.push(new Pu((l||a).key,a?"removed":"added",l,a))}return r.size===0&&e.hash!==t.hash&&n.push(new Pu((t||e).key,"changed",t,e)),n}function Ca(e,t=""){if(e&&typeof e!="object")return new Au(t,e,ma(e));const n={},r=[];for(const o in e)n[o]=Ca(e[o],t?`${t}.${o}`:o),r.push(n[o].hash);return new Au(t,e,`{${r.join(":")}}`,n)}class Pu{constructor(t,n,r,o){this.key=t,this.type=n,this.newValue=r,this.oldValue=o}toString(){return this.toJSON()}toJSON(){var t;switch(this.type){case"added":return`Added \`${this.key}\``;case"removed":return`Removed \`${this.key}\``;case"changed":return`Changed \`${this.key}\` from \`${((t=this.oldValue)==null?void 0:t.toString())||"-"}\` to \`${this.newValue.toString()}\``}}}class Au{constructor(t,n,r,o){this.key=t,this.value=n,this.hash=r,this.props=o}toString(){return this.props?`{${Object.keys(this.props).join(",")}}`:JSON.stringify(this.value)}toJSON(){const t=this.key||".";return this.props?`${t}({${Object.keys(this.props).join(",")}})`:`${t}(${this.value})`}}function nh(e,t){const n={...e};for(const r of t)delete n[r];return n}function sk(e,t,n){typeof t=="string"&&(t=t.split(".").map(o=>{const s=Number(o);return Number.isNaN(s)?o:s}));let r=e;for(const o of t){if(r==null)return n;r=r[o]}return r!==void 0?r:n}function FS(e){const t=Number.parseFloat(e);return Number.isNaN(t)?e:t}function HS(e){return Array.isArray(e[0])}function ik(e){return(t,n)=>ak(t,n,A(e))}function ak(e,t,n){return sk(n,`messages.${e}`,e).replace(/\{(\w+)\}/g,(o,s)=>`${(t==null?void 0:t[s])??`{${s}}`}`)}function lk(e){const t=F(()=>A(e).name),n=F(()=>A(e).code),r=F(()=>A(e).dir),o=Pe(e)?e:se(e);return{lang:t,code:n,dir:r,locale:o,t:ik(e)}}function ck(e){return ko(e,{dir:"ltr"})}const uk=ck({name:"English",code:"en",messages:{inputMenu:{noMatch:"No matching data",noData:"No data",create:'Create "{label}"'},calendar:{prevYear:"Previous year",nextYear:"Next year",prevMonth:"Previous month",nextMonth:"Next month"},inputNumber:{increment:"Increment",decrement:"Decrement"},commandPalette:{placeholder:"Type a command or search...",noMatch:"No matching data",noData:"No data",close:"Close"},selectMenu:{noMatch:"No matching data",noData:"No data",create:'Create "{label}"',search:"Search..."},toast:{close:"Close"},carousel:{prev:"Prev",next:"Next",goto:"Go to slide {slide}"},modal:{close:"Close"},slideover:{close:"Close"},alert:{close:"Close"},table:{noData:"No data"}}}),rh=Symbol.for("nuxt-ui.locale-context"),fk=e=>{const t=e||Rt(Se(rh));return lk(F(()=>t.value||uk))},dk=Zp(fk),Ta=Symbol("nuxt-ui.portal-target");function pk(e){const t=Se(Ta,void 0),n=F(()=>typeof e.value=="boolean"||e.value===void 0?(t==null?void 0:t.value)??"body":e.value),r=F(()=>typeof e.value=="boolean"?!e.value:!1);return at(Ta,F(()=>n.value)),F(()=>({to:n.value,disabled:r.value}))}function hk(){const e=jn("toasts",()=>[]),t=se(!1),n=[],r=()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`;async function o(){if(!(t.value||n.length===0)){for(t.value=!0;n.length>0;){const u=n.shift();await tt(),e.value=[...e.value,u].slice(-5)}t.value=!1}}function s(u){const c={id:r(),open:!0,...u};return n.push(c),o(),c}function i(u,c){const f=e.value.findIndex(d=>d.id===u);f!==-1&&(e.value[f]={...e.value[f],...c})}function a(u){const c=e.value.findIndex(f=>f.id===u);c!==-1&&(e.value[c]={...e.value[c],open:!1}),setTimeout(()=>{e.value=e.value.filter(f=>f.id!==u)},200)}function l(){e.value=[]}return{toasts:e,add:s,update:i,remove:a,clear:l}}var Ou=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,ct=e=>!e||typeof e!="object"||Object.keys(e).length===0,gk=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function oh(e,t){e.forEach(function(n){Array.isArray(n)?oh(n,t):t.push(n)})}function sh(e){let t=[];return oh(e,t),t}var ih=(...e)=>sh(e).filter(Boolean),El=(e,t)=>{let n={},r=Object.keys(e),o=Object.keys(t);for(let s of r)if(o.includes(s)){let i=e[s],a=t[s];Array.isArray(i)||Array.isArray(a)?n[s]=ih(a,i):typeof i=="object"&&typeof a=="object"?n[s]=El(i,a):n[s]=a+" "+i}else n[s]=e[s];for(let s of o)r.includes(s)||(n[s]=t[s]);return n},Ru=e=>!e||typeof e!="string"?e:e.replace(/\s+/g," ").trim();const Sl="-",mk=e=>{const t=bk(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const a=i.split(Sl);return a[0]===""&&a.length!==1&&a.shift(),ah(a,t)||yk(i)},getConflictingClassGroupIds:(i,a)=>{const l=n[i]||[];return a&&r[i]?[...l,...r[i]]:l}}},ah=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),o=r?ah(e.slice(1),r):void 0;if(o)return o;if(t.validators.length===0)return;const s=e.join(Sl);return(i=t.validators.find(({validator:a})=>a(s)))==null?void 0:i.classGroupId},Iu=/^\[(.+)\]$/,yk=e=>{if(Iu.test(e)){const t=Iu.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},bk=e=>{const{theme:t,classGroups:n}=e,r={nextPart:new Map,validators:[]};for(const o in n)Pa(n[o],r,o,t);return r},Pa=(e,t,n,r)=>{e.forEach(o=>{if(typeof o=="string"){const s=o===""?t:Mu(t,o);s.classGroupId=n;return}if(typeof o=="function"){if(vk(o)){Pa(o(r),t,n,r);return}t.validators.push({validator:o,classGroupId:n});return}Object.entries(o).forEach(([s,i])=>{Pa(i,Mu(t,s),n,r)})})},Mu=(e,t)=>{let n=e;return t.split(Sl).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},vk=e=>e.isThemeGetter,wk=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const o=(s,i)=>{n.set(s,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(s){let i=n.get(s);if(i!==void 0)return i;if((i=r.get(s))!==void 0)return o(s,i),i},set(s,i){n.has(s)?n.set(s,i):o(s,i)}}},Aa="!",Oa=":",_k=Oa.length,kk=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=o=>{const s=[];let i=0,a=0,l=0,u;for(let g=0;gl?u-l:void 0;return{modifiers:s,hasImportantModifier:d,baseClassName:f,maybePostfixModifierPosition:p}};if(t){const o=t+Oa,s=r;r=i=>i.startsWith(o)?s(i.substring(o.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:i,maybePostfixModifierPosition:void 0}}if(n){const o=r;r=s=>n({className:s,parseClassName:o})}return r},xk=e=>e.endsWith(Aa)?e.substring(0,e.length-1):e.startsWith(Aa)?e.substring(1):e,Ek=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(r=>[r,!0]));return r=>{if(r.length<=1)return r;const o=[];let s=[];return r.forEach(i=>{i[0]==="["||t[i]?(o.push(...s.sort(),i),s=[]):s.push(i)}),o.push(...s.sort()),o}},Sk=e=>({cache:wk(e.cacheSize),parseClassName:kk(e),sortModifiers:Ek(e),...mk(e)}),Ck=/\s+/,Tk=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o,sortModifiers:s}=t,i=[],a=e.trim().split(Ck);let l="";for(let u=a.length-1;u>=0;u-=1){const c=a[u],{isExternal:f,modifiers:d,hasImportantModifier:p,baseClassName:g,maybePostfixModifierPosition:h}=n(c);if(f){l=c+(l.length>0?" "+l:l);continue}let y=!!h,k=r(y?g.substring(0,h):g);if(!k){if(!y){l=c+(l.length>0?" "+l:l);continue}if(k=r(g),!k){l=c+(l.length>0?" "+l:l);continue}y=!1}const v=s(d).join(":"),m=p?v+Aa:v,b=m+k;if(i.includes(b))continue;i.push(b);const _=o(k,y);for(let x=0;x<_.length;++x){const S=_[x];i.push(m+S)}l=c+(l.length>0?" "+l:l)}return l};function Pk(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rf(c),e());return n=Sk(u),r=n.cache.get,o=n.cache.set,s=a,a(l)}function a(l){const u=r(l);if(u)return u;const c=Tk(l,n);return o(l,c),c}return function(){return s(Pk.apply(null,arguments))}}const ze=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},ch=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,uh=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ak=/^\d+\/\d+$/,Ok=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Rk=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Ik=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Mk=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,$k=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,rr=e=>Ak.test(e),de=e=>!!e&&!Number.isNaN(Number(e)),Mn=e=>!!e&&Number.isInteger(Number(e)),$u=e=>e.endsWith("%")&&de(e.slice(0,-1)),hn=e=>Ok.test(e),Nk=()=>!0,Lk=e=>Rk.test(e)&&!Ik.test(e),Cl=()=>!1,jk=e=>Mk.test(e),Dk=e=>$k.test(e),Fk=e=>!Z(e)&&!ee(e),Hk=e=>Ar(e,ph,Cl),Z=e=>ch.test(e),$n=e=>Ar(e,hh,Lk),Oi=e=>Ar(e,Qk,de),Bk=e=>Ar(e,fh,Cl),Uk=e=>Ar(e,dh,Dk),Vk=e=>Ar(e,Cl,jk),ee=e=>uh.test(e),zo=e=>Or(e,hh),qk=e=>Or(e,Xk),zk=e=>Or(e,fh),Kk=e=>Or(e,ph),Wk=e=>Or(e,dh),Gk=e=>Or(e,Zk,!0),Ar=(e,t,n)=>{const r=ch.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Or=(e,t,n=!1)=>{const r=uh.exec(e);return r?r[1]?t(r[1]):n:!1},fh=e=>e==="position",Jk=new Set(["image","url"]),dh=e=>Jk.has(e),Yk=new Set(["length","size","percentage"]),ph=e=>Yk.has(e),hh=e=>e==="length",Qk=e=>e==="number",Xk=e=>e==="family-name",Zk=e=>e==="shadow",Ia=()=>{const e=ze("color"),t=ze("font"),n=ze("text"),r=ze("font-weight"),o=ze("tracking"),s=ze("leading"),i=ze("breakpoint"),a=ze("container"),l=ze("spacing"),u=ze("radius"),c=ze("shadow"),f=ze("inset-shadow"),d=ze("drop-shadow"),p=ze("blur"),g=ze("perspective"),h=ze("aspect"),y=ze("ease"),k=ze("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],m=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],b=()=>["auto","hidden","clip","visible","scroll"],_=()=>["auto","contain","none"],x=()=>[ee,Z,l],S=()=>[rr,"full","auto",...x()],N=()=>[Mn,"none","subgrid",ee,Z],O=()=>["auto",{span:["full",Mn,ee,Z]},ee,Z],P=()=>[Mn,"auto",ee,Z],q=()=>["auto","min","max","fr",ee,Z],T=()=>["start","end","center","between","around","evenly","stretch","baseline"],$=()=>["start","end","center","stretch"],B=()=>["auto",...x()],W=()=>[rr,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...x()],R=()=>[e,ee,Z],z=()=>[$u,$n],L=()=>["","none","full",u,ee,Z],oe=()=>["",de,zo,$n],be=()=>["solid","dashed","dotted","double"],De=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],ve=()=>["","none",p,ee,Z],lt=()=>["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ee,Z],rt=()=>["none",de,ee,Z],pt=()=>["none",de,ee,Z],He=()=>[de,ee,Z],I=()=>[rr,"full",...x()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[hn],breakpoint:[hn],color:[Nk],container:[hn],"drop-shadow":[hn],ease:["in","out","in-out"],font:[Fk],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[hn],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[hn],shadow:[hn],spacing:["px",de],text:[hn],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",rr,Z,ee,h]}],container:["container"],columns:[{columns:[de,Z,ee,a]}],"break-after":[{"break-after":v()}],"break-before":[{"break-before":v()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...m(),Z,ee]}],overflow:[{overflow:b()}],"overflow-x":[{"overflow-x":b()}],"overflow-y":[{"overflow-y":b()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:S()}],"inset-x":[{"inset-x":S()}],"inset-y":[{"inset-y":S()}],start:[{start:S()}],end:[{end:S()}],top:[{top:S()}],right:[{right:S()}],bottom:[{bottom:S()}],left:[{left:S()}],visibility:["visible","invisible","collapse"],z:[{z:[Mn,"auto",ee,Z]}],basis:[{basis:[rr,"full","auto",a,...x()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[de,rr,"auto","initial","none",Z]}],grow:[{grow:["",de,ee,Z]}],shrink:[{shrink:["",de,ee,Z]}],order:[{order:[Mn,"first","last","none",ee,Z]}],"grid-cols":[{"grid-cols":N()}],"col-start-end":[{col:O()}],"col-start":[{"col-start":P()}],"col-end":[{"col-end":P()}],"grid-rows":[{"grid-rows":N()}],"row-start-end":[{row:O()}],"row-start":[{"row-start":P()}],"row-end":[{"row-end":P()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":q()}],"auto-rows":[{"auto-rows":q()}],gap:[{gap:x()}],"gap-x":[{"gap-x":x()}],"gap-y":[{"gap-y":x()}],"justify-content":[{justify:[...T(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...T()]}],"align-items":[{items:[...$(),"baseline"]}],"align-self":[{self:["auto",...$(),"baseline"]}],"place-content":[{"place-content":T()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:x()}],px:[{px:x()}],py:[{py:x()}],ps:[{ps:x()}],pe:[{pe:x()}],pt:[{pt:x()}],pr:[{pr:x()}],pb:[{pb:x()}],pl:[{pl:x()}],m:[{m:B()}],mx:[{mx:B()}],my:[{my:B()}],ms:[{ms:B()}],me:[{me:B()}],mt:[{mt:B()}],mr:[{mr:B()}],mb:[{mb:B()}],ml:[{ml:B()}],"space-x":[{"space-x":x()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":x()}],"space-y-reverse":["space-y-reverse"],size:[{size:W()}],w:[{w:[a,"screen",...W()]}],"min-w":[{"min-w":[a,"screen","none",...W()]}],"max-w":[{"max-w":[a,"screen","none","prose",{screen:[i]},...W()]}],h:[{h:["screen",...W()]}],"min-h":[{"min-h":["screen","none",...W()]}],"max-h":[{"max-h":["screen",...W()]}],"font-size":[{text:["base",n,zo,$n]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,ee,Oi]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",$u,Z]}],"font-family":[{font:[qk,Z,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[o,ee,Z]}],"line-clamp":[{"line-clamp":[de,"none",ee,Oi]}],leading:[{leading:[s,...x()]}],"list-image":[{"list-image":["none",ee,Z]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ee,Z]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:R()}],"text-color":[{text:R()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...be(),"wavy"]}],"text-decoration-thickness":[{decoration:[de,"from-font","auto",ee,$n]}],"text-decoration-color":[{decoration:R()}],"underline-offset":[{"underline-offset":[de,"auto",ee,Z]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:x()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ee,Z]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ee,Z]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...m(),zk,Bk]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","space","round"]}]}],"bg-size":[{bg:["auto","cover","contain",Kk,Hk]}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Mn,ee,Z],radial:["",ee,Z],conic:[Mn,ee,Z]},Wk,Uk]}],"bg-color":[{bg:R()}],"gradient-from-pos":[{from:z()}],"gradient-via-pos":[{via:z()}],"gradient-to-pos":[{to:z()}],"gradient-from":[{from:R()}],"gradient-via":[{via:R()}],"gradient-to":[{to:R()}],rounded:[{rounded:L()}],"rounded-s":[{"rounded-s":L()}],"rounded-e":[{"rounded-e":L()}],"rounded-t":[{"rounded-t":L()}],"rounded-r":[{"rounded-r":L()}],"rounded-b":[{"rounded-b":L()}],"rounded-l":[{"rounded-l":L()}],"rounded-ss":[{"rounded-ss":L()}],"rounded-se":[{"rounded-se":L()}],"rounded-ee":[{"rounded-ee":L()}],"rounded-es":[{"rounded-es":L()}],"rounded-tl":[{"rounded-tl":L()}],"rounded-tr":[{"rounded-tr":L()}],"rounded-br":[{"rounded-br":L()}],"rounded-bl":[{"rounded-bl":L()}],"border-w":[{border:oe()}],"border-w-x":[{"border-x":oe()}],"border-w-y":[{"border-y":oe()}],"border-w-s":[{"border-s":oe()}],"border-w-e":[{"border-e":oe()}],"border-w-t":[{"border-t":oe()}],"border-w-r":[{"border-r":oe()}],"border-w-b":[{"border-b":oe()}],"border-w-l":[{"border-l":oe()}],"divide-x":[{"divide-x":oe()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":oe()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...be(),"hidden","none"]}],"divide-style":[{divide:[...be(),"hidden","none"]}],"border-color":[{border:R()}],"border-color-x":[{"border-x":R()}],"border-color-y":[{"border-y":R()}],"border-color-s":[{"border-s":R()}],"border-color-e":[{"border-e":R()}],"border-color-t":[{"border-t":R()}],"border-color-r":[{"border-r":R()}],"border-color-b":[{"border-b":R()}],"border-color-l":[{"border-l":R()}],"divide-color":[{divide:R()}],"outline-style":[{outline:[...be(),"none","hidden"]}],"outline-offset":[{"outline-offset":[de,ee,Z]}],"outline-w":[{outline:["",de,zo,$n]}],"outline-color":[{outline:[e]}],shadow:[{shadow:["","none",c,Gk,Vk]}],"shadow-color":[{shadow:R()}],"inset-shadow":[{"inset-shadow":["none",ee,Z,f]}],"inset-shadow-color":[{"inset-shadow":R()}],"ring-w":[{ring:oe()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:R()}],"ring-offset-w":[{"ring-offset":[de,$n]}],"ring-offset-color":[{"ring-offset":R()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":R()}],opacity:[{opacity:[de,ee,Z]}],"mix-blend":[{"mix-blend":[...De(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":De()}],filter:[{filter:["","none",ee,Z]}],blur:[{blur:ve()}],brightness:[{brightness:[de,ee,Z]}],contrast:[{contrast:[de,ee,Z]}],"drop-shadow":[{"drop-shadow":["","none",d,ee,Z]}],grayscale:[{grayscale:["",de,ee,Z]}],"hue-rotate":[{"hue-rotate":[de,ee,Z]}],invert:[{invert:["",de,ee,Z]}],saturate:[{saturate:[de,ee,Z]}],sepia:[{sepia:["",de,ee,Z]}],"backdrop-filter":[{"backdrop-filter":["","none",ee,Z]}],"backdrop-blur":[{"backdrop-blur":ve()}],"backdrop-brightness":[{"backdrop-brightness":[de,ee,Z]}],"backdrop-contrast":[{"backdrop-contrast":[de,ee,Z]}],"backdrop-grayscale":[{"backdrop-grayscale":["",de,ee,Z]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[de,ee,Z]}],"backdrop-invert":[{"backdrop-invert":["",de,ee,Z]}],"backdrop-opacity":[{"backdrop-opacity":[de,ee,Z]}],"backdrop-saturate":[{"backdrop-saturate":[de,ee,Z]}],"backdrop-sepia":[{"backdrop-sepia":["",de,ee,Z]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":x()}],"border-spacing-x":[{"border-spacing-x":x()}],"border-spacing-y":[{"border-spacing-y":x()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ee,Z]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[de,"initial",ee,Z]}],ease:[{ease:["linear","initial",y,ee,Z]}],delay:[{delay:[de,ee,Z]}],animate:[{animate:["none",k,ee,Z]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[g,ee,Z]}],"perspective-origin":[{"perspective-origin":lt()}],rotate:[{rotate:rt()}],"rotate-x":[{"rotate-x":rt()}],"rotate-y":[{"rotate-y":rt()}],"rotate-z":[{"rotate-z":rt()}],scale:[{scale:pt()}],"scale-x":[{"scale-x":pt()}],"scale-y":[{"scale-y":pt()}],"scale-z":[{"scale-z":pt()}],"scale-3d":["scale-3d"],skew:[{skew:He()}],"skew-x":[{"skew-x":He()}],"skew-y":[{"skew-y":He()}],transform:[{transform:[ee,Z,"","none","gpu","cpu"]}],"transform-origin":[{origin:lt()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:I()}],"translate-x":[{"translate-x":I()}],"translate-y":[{"translate-y":I()}],"translate-z":[{"translate-z":I()}],"translate-none":["translate-none"],accent:[{accent:R()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:R()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ee,Z]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":x()}],"scroll-mx":[{"scroll-mx":x()}],"scroll-my":[{"scroll-my":x()}],"scroll-ms":[{"scroll-ms":x()}],"scroll-me":[{"scroll-me":x()}],"scroll-mt":[{"scroll-mt":x()}],"scroll-mr":[{"scroll-mr":x()}],"scroll-mb":[{"scroll-mb":x()}],"scroll-ml":[{"scroll-ml":x()}],"scroll-p":[{"scroll-p":x()}],"scroll-px":[{"scroll-px":x()}],"scroll-py":[{"scroll-py":x()}],"scroll-ps":[{"scroll-ps":x()}],"scroll-pe":[{"scroll-pe":x()}],"scroll-pt":[{"scroll-pt":x()}],"scroll-pr":[{"scroll-pr":x()}],"scroll-pb":[{"scroll-pb":x()}],"scroll-pl":[{"scroll-pl":x()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ee,Z]}],fill:[{fill:["none",...R()]}],"stroke-w":[{stroke:[de,zo,$n,Oi]}],stroke:[{stroke:["none",...R()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["before","after","placeholder","file","marker","selection","first-line","first-letter","backdrop","*","**"]}},ex=(e,{cacheSize:t,prefix:n,experimentalParseClassName:r,extend:o={},override:s={}})=>(qr(e,"cacheSize",t),qr(e,"prefix",n),qr(e,"experimentalParseClassName",r),Ko(e.theme,s.theme),Ko(e.classGroups,s.classGroups),Ko(e.conflictingClassGroups,s.conflictingClassGroups),Ko(e.conflictingClassGroupModifiers,s.conflictingClassGroupModifiers),qr(e,"orderSensitiveModifiers",s.orderSensitiveModifiers),Wo(e.theme,o.theme),Wo(e.classGroups,o.classGroups),Wo(e.conflictingClassGroups,o.conflictingClassGroups),Wo(e.conflictingClassGroupModifiers,o.conflictingClassGroupModifiers),gh(e,o,"orderSensitiveModifiers"),e),qr=(e,t,n)=>{n!==void 0&&(e[t]=n)},Ko=(e,t)=>{if(t)for(const n in t)qr(e,n,t[n])},Wo=(e,t)=>{if(t)for(const n in t)gh(e,t,n)},gh=(e,t,n)=>{const r=t[n];r!==void 0&&(e[n]=e[n]?e[n].concat(r):r)},tx=(e,...t)=>typeof e=="function"?Ra(Ia,e,...t):Ra(()=>ex(Ia(),e),...t),nx=Ra(Ia);var rx={twMerge:!0,twMergeConfig:{},responsiveVariants:!1},mh=e=>e||void 0,go=(...e)=>mh(sh(e).filter(Boolean).join(" ")),Ri=null,Xt={},Ma=!1,Hr=(...e)=>t=>t.twMerge?((!Ri||Ma)&&(Ma=!1,Ri=ct(Xt)?nx:tx({...Xt,extend:{theme:Xt.theme,classGroups:Xt.classGroups,conflictingClassGroupModifiers:Xt.conflictingClassGroupModifiers,conflictingClassGroups:Xt.conflictingClassGroups,...Xt.extend}})),mh(Ri(go(e)))):go(e),Nu=(e,t)=>{for(let n in t)e.hasOwnProperty(n)?e[n]=go(e[n],t[n]):e[n]=t[n];return e},ox=(e,t)=>{let{extend:n=null,slots:r={},variants:o={},compoundVariants:s=[],compoundSlots:i=[],defaultVariants:a={}}=e,l={...rx,...t},u=n!=null&&n.base?go(n.base,e==null?void 0:e.base):e==null?void 0:e.base,c=n!=null&&n.variants&&!ct(n.variants)?El(o,n.variants):o,f=n!=null&&n.defaultVariants&&!ct(n.defaultVariants)?{...n.defaultVariants,...a}:a;!ct(l.twMergeConfig)&&!gk(l.twMergeConfig,Xt)&&(Ma=!0,Xt=l.twMergeConfig);let d=ct(n==null?void 0:n.slots),p=ct(r)?{}:{base:go(e==null?void 0:e.base,d&&(n==null?void 0:n.base)),...r},g=d?p:Nu({...n==null?void 0:n.slots},ct(p)?{base:e==null?void 0:e.base}:p),h=ct(n==null?void 0:n.compoundVariants)?s:ih(n==null?void 0:n.compoundVariants,s),y=v=>{if(ct(c)&&ct(r)&&d)return Hr(u,v==null?void 0:v.class,v==null?void 0:v.className)(l);if(h&&!Array.isArray(h))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof h}`);if(i&&!Array.isArray(i))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof i}`);let m=(T,$,B=[],W)=>{let R=B;if(typeof $=="string")R=R.concat(Ru($).split(" ").map(z=>`${T}:${z}`));else if(Array.isArray($))R=R.concat($.reduce((z,L)=>z.concat(`${T}:${L}`),[]));else if(typeof $=="object"&&typeof W=="string"){for(let z in $)if($.hasOwnProperty(z)&&z===W){let L=$[z];if(L&&typeof L=="string"){let oe=Ru(L);R[W]?R[W]=R[W].concat(oe.split(" ").map(be=>`${T}:${be}`)):R[W]=oe.split(" ").map(be=>`${T}:${be}`)}else Array.isArray(L)&&L.length>0&&(R[W]=L.reduce((oe,be)=>oe.concat(`${T}:${be}`),[]))}}return R},b=(T,$=c,B=null,W=null)=>{var R;let z=$[T];if(!z||ct(z))return null;let L=(R=W==null?void 0:W[T])!=null?R:v==null?void 0:v[T];if(L===null)return null;let oe=Ou(L),be=Array.isArray(l.responsiveVariants)&&l.responsiveVariants.length>0||l.responsiveVariants===!0,De=f==null?void 0:f[T],ve=[];if(typeof oe=="object"&&be)for(let[pt,He]of Object.entries(oe)){let I=z[He];if(pt==="initial"){De=He;continue}Array.isArray(l.responsiveVariants)&&!l.responsiveVariants.includes(pt)||(ve=m(pt,I,ve,B))}let lt=oe!=null&&typeof oe!="object"?oe:Ou(De),rt=z[lt||"false"];return typeof ve=="object"&&typeof B=="string"&&ve[B]?Nu(ve,rt):ve.length>0?(ve.push(rt),B==="base"?ve.join(" "):ve):rt},_=()=>c?Object.keys(c).map(T=>b(T,c)):null,x=(T,$)=>{if(!c||typeof c!="object")return null;let B=new Array;for(let W in c){let R=b(W,c,T,$),z=T==="base"&&typeof R=="string"?R:R&&R[T];z&&(B[B.length]=z)}return B},S={};for(let T in v)v[T]!==void 0&&(S[T]=v[T]);let N=(T,$)=>{var B;let W=typeof(v==null?void 0:v[T])=="object"?{[T]:(B=v[T])==null?void 0:B.initial}:{};return{...f,...S,...W,...$}},O=(T=[],$)=>{let B=[];for(let{class:W,className:R,...z}of T){let L=!0;for(let[oe,be]of Object.entries(z)){let De=N(oe,$)[oe];if(Array.isArray(be)){if(!be.includes(De)){L=!1;break}}else{let ve=lt=>lt==null||lt===!1;if(ve(be)&&ve(De))continue;if(De!==be){L=!1;break}}}L&&(W&&B.push(W),R&&B.push(R))}return B},P=T=>{let $=O(h,T);if(!Array.isArray($))return $;let B={};for(let W of $)if(typeof W=="string"&&(B.base=Hr(B.base,W)(l)),typeof W=="object")for(let[R,z]of Object.entries(W))B[R]=Hr(B[R],z)(l);return B},q=T=>{if(i.length<1)return null;let $={};for(let{slots:B=[],class:W,className:R,...z}of i){if(!ct(z)){let L=!0;for(let oe of Object.keys(z)){let be=N(oe,T)[oe];if(be===void 0||(Array.isArray(z[oe])?!z[oe].includes(be):z[oe]!==be)){L=!1;break}}if(!L)continue}for(let L of B)$[L]=$[L]||[],$[L].push([W,R])}return $};if(!ct(r)||!d){let T={};if(typeof g=="object"&&!ct(g))for(let $ of Object.keys(g))T[$]=B=>{var W,R;return Hr(g[$],x($,B),((W=P(B))!=null?W:[])[$],((R=q(B))!=null?R:[])[$],B==null?void 0:B.class,B==null?void 0:B.className)(l)};return T}return Hr(u,_(),O(h),v==null?void 0:v.class,v==null?void 0:v.className)(l)},k=()=>{if(!(!c||typeof c!="object"))return Object.keys(c)};return y.variantKeys=k(),y.extend=n,y.base=u,y.slots=g,y.variants=c,y.defaultVariants=f,y.compoundSlots=i,y.compoundVariants=h,y},sx=e=>(t,n)=>ox(t,n?El(e,n):e);const ix=Ep;var Uu;const Kt=sx((Uu=ix.ui)==null?void 0:Uu.tv),ax=Object.freeze({left:0,top:0,width:16,height:16}),yh=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Tl=Object.freeze({...ax,...yh});Object.freeze({...Tl,body:"",hidden:!1});function lx(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const r in t)n+=" "+r+'="'+t[r]+'"';return'"+e+""}const cx=/(-?[0-9.]*[0-9]+[0-9.]*)/g,ux=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function $a(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const r=e.split(cx);if(r===null||!r.length)return e;const o=[];let s=r.shift(),i=ux.test(s);for(;;){if(i){const a=parseFloat(s);isNaN(a)?o.push(s):o.push(Math.ceil(a*t*n)/n)}else o.push(s);if(s=r.shift(),s===void 0)return o.join("");i=!i}}function fx(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function dx(e){return"data:image/svg+xml,"+fx(e)}function px(e){return'url("'+dx(e)+'")'}function hx(e){const[t,n,r,o]=e;if(r!==o){const s=Math.max(r,o);return[t-(s-r)/2,n-(s-o)/2,s,s]}return e}const gx=Object.freeze({width:null,height:null}),mx=Object.freeze({...gx,...yh});function yx(e,t="defs"){let n="";const r=e.indexOf("<"+t);for(;r>=0;){const o=e.indexOf(">",r),s=e.indexOf("",s);if(i===-1)break;n+=e.slice(o+1,s).trim(),e=e.slice(0,r).trim()+e.slice(i+1)}return{defs:n,content:e}}function bx(e,t){return e?""+e+""+t:t}function vx(e,t,n){const r=yx(e);return bx(r.defs,t+r.content+n)}const wx=e=>e==="unset"||e==="undefined"||e==="none";function _x(e,t){const n={...Tl,...e},r={...mx,...t},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,r].forEach(h=>{const y=[],k=h.hFlip,v=h.vFlip;let m=h.rotate;k?v?m+=2:(y.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),y.push("scale(-1 1)"),o.top=o.left=0):v&&(y.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),y.push("scale(1 -1)"),o.top=o.left=0);let b;switch(m<0&&(m-=Math.floor(m/4)*4),m=m%4,m){case 1:b=o.height/2+o.top,y.unshift("rotate(90 "+b.toString()+" "+b.toString()+")");break;case 2:y.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:b=o.width/2+o.left,y.unshift("rotate(-90 "+b.toString()+" "+b.toString()+")");break}m%2===1&&(o.left!==o.top&&(b=o.left,o.left=o.top,o.top=b),o.width!==o.height&&(b=o.width,o.width=o.height,o.height=b)),y.length&&(s=vx(s,'',""))});const i=r.width,a=r.height,l=o.width,u=o.height;let c,f;i===null?(f=a===null?"1em":a==="auto"?u:a,c=$a(f,l/u)):(c=i==="auto"?l:i,f=a===null?$a(c,u/l):a==="auto"?u:a);const d={},p=(h,y)=>{wx(y)||(d[h]=y.toString())};p("width",c),p("height",f);const g=[o.left,o.top,l,u];return d.viewBox=g.join(" "),{attributes:d,viewBox:g,body:s}}function kx(e){const t={display:"inline-block",width:"1em",height:"1em"},n=e.varName;switch(e.pseudoSelector&&(t.content="''"),e.mode){case"background":n&&(t["background-image"]="var(--"+n+")"),t["background-repeat"]="no-repeat",t["background-size"]="100% 100%";break;case"mask":t["background-color"]="currentColor",n&&(t["mask-image"]=t["-webkit-mask-image"]="var(--"+n+")"),t["mask-repeat"]=t["-webkit-mask-repeat"]="no-repeat",t["mask-size"]=t["-webkit-mask-size"]="100% 100%";break}return t}function xx(e,t){const n={},r=t.varName,o=_x(e);let s=o.viewBox;s[2]!==s[3]&&(t.forceSquare?s=hx(s):n.width=$a("1em",s[2]/s[3]));const i=lx(o.body.replace(/currentColor/g,t.color||"black"),{viewBox:`${s[0]} ${s[1]} ${s[2]} ${s[3]}`,width:`${s[2]}`,height:`${s[3]}`}),a=px(i);if(r)n["--"+r]=a;else switch(t.mode){case"background":n["background-image"]=a;break;case"mask":n["mask-image"]=n["-webkit-mask-image"]=a;break}return n}const Ii={selectorStart:{compressed:"{",compact:" {",expanded:" {"},selectorEnd:{compressed:"}",compact:`; } +`,expanded:`; +} +`},rule:{compressed:"{key}:",compact:" {key}: ",expanded:` + {key}: `}};function Ex(e,t="expanded"){const n=[];for(let r=0;r(console.warn(`[Icon] failed to load icon \`${e}\``),null)),va(e))}function bh(e){const t=St().icon,n=(t.collections||[]).sort((r,o)=>o.length-r.length);return F(()=>{var i;const r=e(),o=r.startsWith(t.cssSelectorPrefix)?r.slice(t.cssSelectorPrefix.length):r,s=((i=t.aliases)==null?void 0:i[o])||o;if(!s.includes(":")){const a=n.find(l=>s.startsWith(l+"-"));return a?a+":"+s.slice(a.length+1):s}return s})}function vh(e,t){if(e!==!1)return e===!0||e===null?t:e}let Br;function Tx(e){return e.replace(/([^\w-])/g,"\\$1")}function Px(){if(Br)return Br;Br=new Set;const e=n=>{if(n=n.replace(/^:where\((.*)\)$/,"$1").trim(),n.startsWith("."))return n},t=n=>{if(n!=null&&n.length)for(const r of n){r!=null&&r.cssRules&&t(r.cssRules);const o=r==null?void 0:r.selectorText;if(typeof o=="string"){const s=e(o);s&&Br.add(s)}}};if(typeof document<"u")for(const n of document.styleSheets)try{const r=n.cssRules||n.rules;t(r)}catch{}return Br}const Ax=fe({name:"NuxtIconCss",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e){const t=xe(),n=St().icon,r=F(()=>e.name?n.cssSelectorPrefix+e.name:"");function o(a){var c,f;if(!a)return;const l=va(a);if(l)return l;const u=(f=(c=t.payload)==null?void 0:c.data)==null?void 0:f[a];if(u)return vl(a,u),u}const s=F(()=>"."+Tx(r.value));function i(a,l=!0){let u=s.value;n.cssWherePseudo&&(u=`:where(${u})`);const c=Sx(a,{iconSelector:u,format:"compressed",customise:vh(e.customize,n.customize)});return n.cssLayer&&l?`@layer ${n.cssLayer} { ${c} }`:c}{const a=Px();async function l(u){if(a.has(s.value)||typeof document>"u")return;const c=document.createElement("style");c.textContent=i(u);const f=document.head.querySelector('style, link[rel="stylesheet"]');f?document.head.insertBefore(c,f):document.head.appendChild(c),a.add(s.value)}Ne(()=>e.name,()=>{if(a.has(s.value))return;const u=o(e.name);u?l(u):Cx(e.name).then(c=>{c&&l(c)}).catch(()=>null)},{immediate:!0})}return()=>ke("span",{class:["iconify",r.value]})}}),Ox=fe({name:"NuxtIconSvg",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:t}){const n=xe(),r=St().icon,o=bh(()=>e.name),s="i-"+o.value;if(o.value){const i=n.payload.data[s];i&&vl(o.value,i)}return()=>ke(M_,{icon:o.value,ssr:!0,customise:vh(e.customize,r.customize)},t)}}),wh=fe({name:"NuxtIcon",props:{name:{type:String,required:!0},mode:{type:String,required:!1,default:null},size:{type:[Number,String],required:!1,default:null},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:t}){const n=xe(),r=St().icon,o=bh(()=>e.name),s=F(()=>{var a;return((a=n.vueApp)==null?void 0:a.component(o.value))||((e.mode||r.mode)==="svg"?Ox:Ax)}),i=F(()=>{const a=e.size||r.size;return a?{fontSize:Number.isNaN(+a)?a:a+"px"}:null});return()=>ke(s.value,{...r.attrs,name:o.value,class:r.class,style:i.value,customize:e.customize},t)}}),Rx=Object.freeze(Object.defineProperty({__proto__:null,default:wh},Symbol.toStringTag,{value:"Module"})),$s={__name:"Icon",props:{name:{type:String,required:!0},mode:{type:String,required:!1},size:{type:[String,Number],required:!1},customize:{type:Function,required:!1}},setup(e){const n=Pr(Co(e,"name","mode","size","customize"));return(r,o)=>{const s=wh;return Y(),ne(s,qt(An(A(n))),null,16)}}},Ix="img",Lu=Symbol("nuxt-ui.avatar-group");function Mx(e){const t=Se(Lu,void 0),n=F(()=>e.size??(t==null?void 0:t.value.size));return at(Lu,F(()=>({size:n.value}))),{size:n}}const $x={slots:{root:"inline-flex items-center justify-center shrink-0 select-none overflow-hidden rounded-full align-middle bg-elevated",image:"h-full w-full rounded-[inherit] object-cover",fallback:"font-medium leading-none text-muted truncate",icon:"text-muted shrink-0"},variants:{size:{"3xs":{root:"size-4 text-[8px]"},"2xs":{root:"size-5 text-[10px]"},xs:{root:"size-6 text-xs"},sm:{root:"size-7 text-sm"},md:{root:"size-8 text-base"},lg:{root:"size-9 text-lg"},xl:{root:"size-10 text-xl"},"2xl":{root:"size-11 text-[22px]"},"3xl":{root:"size-12 text-2xl"}}},defaultVariants:{size:"md"}},_h=Object.assign({inheritAttrs:!1},{__name:"Avatar",props:{as:{type:null,required:!1,default:"span"},src:{type:String,required:!1},alt:{type:String,required:!1},icon:{type:String,required:!1},text:{type:String,required:!1},size:{type:null,required:!1},class:{type:null,required:!1},style:{type:null,required:!1},ui:{type:null,required:!1}},setup(e){const t=e,n=F(()=>t.text||(t.alt||"").split(" ").map(u=>u.charAt(0)).join("").substring(0,2)),r=St(),{size:o}=Mx(t),s=F(()=>{var u;return Kt({extend:Kt($x),...((u=r.ui)==null?void 0:u.avatar)||{}})({size:o.value})}),i=F(()=>({"3xs":16,"2xs":20,xs:24,sm:28,md:32,lg:36,xl:40,"2xl":44,"3xl":48})[t.size||"md"]),a=se(!1);Ne(()=>t.src,()=>{a.value&&(a.value=!1)});function l(){a.value=!0}return(u,c)=>{var f;return Y(),ne(A(Dt),{as:e.as,class:Ke(s.value.root({class:[(f=t.ui)==null?void 0:f.root,t.class]})),style:cn(t.style)},{default:ce(()=>{var d;return[e.src&&!a.value?(Y(),ne(Ln(A(Ix)),Te({key:0,role:"img",src:e.src,alt:e.alt,width:i.value,height:i.value},u.$attrs,{class:s.value.image({class:(d=t.ui)==null?void 0:d.image}),onError:l}),null,16,["src","alt","width","height","class"])):(Y(),ne(A(Is),qt(Te({key:1},u.$attrs)),{default:ce(()=>[ge(u.$slots,"default",{},()=>{var p,g;return[e.icon?(Y(),ne($s,{key:0,name:e.icon,class:Ke(s.value.icon({class:(p=t.ui)==null?void 0:p.icon}))},null,8,["name","class"])):(Y(),yt("span",{key:1,class:Ke(s.value.fallback({class:(g=t.ui)==null?void 0:g.fallback}))},qn(n.value||" "),3))]})]),_:3},16))]}),_:3},8,["as","class","style"])}}});function Nx(e){const t=St(),n=F(()=>Le(e)),r=F(()=>n.value.icon&&n.value.leading||n.value.icon&&!n.value.trailing||n.value.loading&&!n.value.trailing||!!n.value.leadingIcon),o=F(()=>n.value.icon&&n.value.trailing||n.value.loading&&n.value.trailing||!!n.value.trailingIcon),s=F(()=>n.value.loading?n.value.loadingIcon||t.ui.icons.loading:n.value.leadingIcon||n.value.icon),i=F(()=>n.value.loading&&!r.value?n.value.loadingIcon||t.ui.icons.loading:n.value.trailingIcon||n.value.icon);return{isLeading:r,isTrailing:o,leadingIconName:s,trailingIconName:i}}const Lx=Symbol("nuxt-ui.button-group");function jx(e){const t=Se(Lx,void 0);return{orientation:F(()=>t==null?void 0:t.value.orientation),size:F(()=>(e==null?void 0:e.size)??(t==null?void 0:t.value.size))}}const Dx=Symbol("nuxt-ui.form-options"),Fx=Symbol("nuxt-ui.form-events"),ju=Symbol("nuxt-ui.form-field"),Hx=Symbol("nuxt-ui.input-id"),Bx=Symbol("nuxt-ui.form-inputs"),Ux=Symbol("nuxt-ui.form-loading");function BS(e,t){const n=Se(Dx,void 0),r=Se(Fx,void 0),o=Se(ju,void 0),s=Se(Bx,void 0),i=Se(Hx,void 0);at(ju,void 0),o&&i&&((t==null?void 0:t.bind)===!1?i.value=void 0:e!=null&&e.id&&(i.value=e==null?void 0:e.id),s&&o.value.name&&i.value&&(s.value[o.value.name]={id:i.value,pattern:o.value.errorPattern}));function a(d,p,g){r&&o&&p&&r.emit({type:d,name:p,eager:g})}function l(){a("blur",o==null?void 0:o.value.name)}function u(){a("focus",o==null?void 0:o.value.name)}function c(){a("change",o==null?void 0:o.value.name)}const f=rk(()=>{a("input",o==null?void 0:o.value.name,o==null?void 0:o.value.eagerValidation)},(o==null?void 0:o.value.validateOnInputDelay)??(n==null?void 0:n.value.validateOnInputDelay)??0);return{id:F(()=>(e==null?void 0:e.id)??(i==null?void 0:i.value)),name:F(()=>(e==null?void 0:e.name)??(o==null?void 0:o.value.name)),size:F(()=>(e==null?void 0:e.size)??(o==null?void 0:o.value.size)),color:F(()=>o!=null&&o.value.error?"error":e==null?void 0:e.color),highlight:F(()=>o!=null&&o.value.error?!0:e==null?void 0:e.highlight),disabled:F(()=>(n==null?void 0:n.value.disabled)||(e==null?void 0:e.disabled)),emitFormBlur:l,emitFormInput:f,emitFormChange:c,emitFormFocus:u,ariaAttrs:F(()=>o!=null&&o.value?{"aria-describedby":(["error","hint","description","help"].filter(p=>{var g;return(g=o==null?void 0:o.value)==null?void 0:g[p]}).map(p=>`${o==null?void 0:o.value.ariaId}-${p}`)||[]).join(" "),"aria-invalid":!!(o!=null&&o.value.error)}:void 0)}}function Vx(e){const t=Object.keys(e),n=t.filter(s=>s.startsWith("aria-")),r=t.filter(s=>s.startsWith("data-")),o=["active","activeClass","ariaCurrentValue","as","disabled","exact","exactActiveClass","exactHash","exactQuery","external","href","download","inactiveClass","noPrefetch","noRel","prefetch","prefetchedClass","rel","replace","target","to","type","title","onClick",...n,...r];return Co(e,...o)}function qx(e,t){const n=ok(e,t).reduce((s,i)=>(i.type==="added"&&s.add(i.key),s),new Set),r=Object.fromEntries(Object.entries(e).filter(([s])=>!n.has(s))),o=Object.fromEntries(Object.entries(t).filter(([s])=>!n.has(s)));return yl(r,o)}const zx=(...e)=>e.find(t=>t!==void 0);function Kx(e){const t=e.componentName||"NuxtLink";function n(s){return typeof s=="string"&&s.startsWith("#")}function r(s,i,a){const l=a??e.trailingSlash;if(!s||l!=="append"&&l!=="remove")return s;if(typeof s=="string")return Go(s,l);const u="path"in s&&s.path!==void 0?s.path:i(s).path;return{...s,name:void 0,path:Go(u,l)}}function o(s){const i=nt(),a=Cr(),l=F(()=>!!s.target&&s.target!=="_self"),u=F(()=>{const y=s.to||s.href||"";return typeof y=="string"&&fn(y,{acceptRelative:!0})}),c=Vl("RouterLink"),f=c&&typeof c!="string"?c.useLink:void 0,d=F(()=>{if(s.external)return!0;const y=s.to||s.href||"";return typeof y=="object"?!1:y===""||u.value}),p=F(()=>{const y=s.to||s.href||"";return d.value?y:r(y,i.resolve,s.trailingSlash)}),g=d.value||f==null?void 0:f({...s,to:p}),h=F(()=>{var k;const y=s.trailingSlash??e.trailingSlash;if(!p.value||u.value||n(p.value))return p.value;if(d.value){const v=typeof p.value=="object"&&"path"in p.value?aa(p.value):p.value,m=typeof v=="object"?i.resolve(v).href:v;return Go(m,y)}return typeof p.value=="object"?((k=i.resolve(p.value))==null?void 0:k.href)??null:Go(Qs(a.app.baseURL,p.value),y)});return{to:p,hasTarget:l,isAbsoluteUrl:u,isExternal:d,href:h,isActive:(g==null?void 0:g.isActive)??F(()=>p.value===i.currentRoute.value.path),isExactActive:(g==null?void 0:g.isExactActive)??F(()=>p.value===i.currentRoute.value.path),route:(g==null?void 0:g.route)??F(()=>i.resolve(p.value)),async navigate(y){await ll(h.value,{replace:s.replace,external:d.value||l.value})}}}return fe({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:o,setup(s,{slots:i}){const a=nt(),{to:l,href:u,navigate:c,isExternal:f,hasTarget:d,isAbsoluteUrl:p}=o(s),g=Ze(!1),h=se(null),y=m=>{var b;h.value=s.custom?(b=m==null?void 0:m.$el)==null?void 0:b.nextElementSibling:m==null?void 0:m.$el};function k(m){var b,_;return!g.value&&(typeof s.prefetchOn=="string"?s.prefetchOn===m:((b=s.prefetchOn)==null?void 0:b[m])??((_=e.prefetchOn)==null?void 0:_[m]))&&(s.prefetch??e.prefetch)!==!1&&s.noPrefetch!==!0&&s.target!=="_blank"&&!Yx()}async function v(m=xe()){if(g.value)return;g.value=!0;const b=typeof l.value=="string"?l.value:f.value?aa(l.value):a.resolve(l.value).fullPath,_=f.value?new URL(b,window.location.href).href:b;await Promise.all([m.hooks.callHook("link:prefetch",_).catch(()=>{}),!f.value&&!d.value&&xp(l.value,a).catch(()=>{})])}if(k("visibility")){const m=xe();let b,_=null;jt(()=>{const x=Gx();ti(()=>{b=ya(()=>{var S;(S=h==null?void 0:h.value)!=null&&S.tagName&&(_=x.observe(h.value,async()=>{_==null||_(),_=null,await v(m)}))})})}),Qn(()=>{b&&gw(b),_==null||_(),_=null})}return()=>{var _;if(!f.value&&!d.value&&!n(l.value)){const x={ref:y,to:l.value,activeClass:s.activeClass||e.activeClass,exactActiveClass:s.exactActiveClass||e.exactActiveClass,replace:s.replace,ariaCurrentValue:s.ariaCurrentValue,custom:s.custom};return s.custom||(k("interaction")&&(x.onPointerenter=v.bind(null,void 0),x.onFocus=v.bind(null,void 0)),g.value&&(x.class=s.prefetchedClass||e.prefetchedClass),x.rel=s.rel||void 0),ke(Vl("RouterLink"),x,i.default)}const m=s.target||null,b=zx(s.noRel?"":s.rel,e.externalRelAttribute,p.value||d.value?"noopener noreferrer":"")||null;return s.custom?i.default?i.default({href:u.value,navigate:c,prefetch:v,get route(){if(!u.value)return;const x=new URL(u.value,window.location.href);return{path:x.pathname,fullPath:x.pathname,get query(){return il(x.search)},hash:x.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:u.value}},rel:b,target:m,isExternal:f.value||d.value,isActive:!1,isExactActive:!1}):null:ke("a",{ref:h,href:u.value||null,rel:b,target:m},(_=i.default)==null?void 0:_.call(i))}}})}const Wx=Kx(yb);function Go(e,t){const n=t==="append"?Pd:wr;return fn(e)&&!e.startsWith("http")?e:n(e,!0)}function Gx(){const e=xe();if(e._observer)return e._observer;let t=null;const n=new Map,r=(s,i)=>(t||(t=new IntersectionObserver(a=>{for(const l of a){const u=n.get(l.target);(l.isIntersecting||l.intersectionRatio>0)&&u&&u()}})),n.set(s,i),t.observe(s),()=>{n.delete(s),t==null||t.unobserve(s),n.size===0&&(t==null||t.disconnect(),t=null)});return e._observer={observe:r}}const Jx=/2g/;function Yx(){const e=navigator.connection;return!!(e&&(e.saveData||Jx.test(e.effectiveType)))}const kh={__name:"LinkBase",props:{as:{type:String,required:!1,default:"button"},type:{type:String,required:!1,default:"button"},disabled:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},href:{type:String,required:!1},navigate:{type:Function,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},active:{type:Boolean,required:!1},isExternal:{type:Boolean,required:!1}},setup(e){const t=e;function n(r){if(t.disabled){r.stopPropagation(),r.preventDefault();return}if(t.onClick)for(const o of Array.isArray(t.onClick)?t.onClick:[t.onClick])o(r);t.href&&t.navigate&&!t.isExternal&&t.navigate(r)}return(r,o)=>(Y(),ne(A(Dt),Te(e.href?{as:"a",href:e.disabled?void 0:e.href,"aria-disabled":e.disabled?"true":void 0,role:e.disabled?"link":void 0,tabindex:e.disabled?-1:void 0}:e.as==="button"?{as:e.as,type:e.type,disabled:e.disabled}:{as:e.as},{rel:e.rel,target:e.target,onClick:n}),{default:ce(()=>[ge(r.$slots,"default")]),_:3},16,["rel","target"]))}},Qx={base:"focus-visible:outline-primary",variants:{active:{true:"text-primary",false:"text-muted"},disabled:{true:"cursor-not-allowed opacity-75"}},compoundVariants:[{active:!1,disabled:!1,class:["hover:text-default","transition-colors"]}]},Xx=Object.assign({inheritAttrs:!1},{__name:"Link",props:{as:{type:null,required:!1,default:"button"},type:{type:null,required:!1,default:"button"},disabled:{type:Boolean,required:!1},active:{type:Boolean,required:!1,default:void 0},exact:{type:Boolean,required:!1},exactQuery:{type:[Boolean,String],required:!1},exactHash:{type:Boolean,required:!1},inactiveClass:{type:String,required:!1,default:""},custom:{type:Boolean,required:!1},raw:{type:Boolean,required:!1},class:{type:null,required:!1},to:{type:null,required:!1},href:{type:null,required:!1},external:{type:Boolean,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},noRel:{type:Boolean,required:!1},prefetchedClass:{type:String,required:!1},prefetch:{type:Boolean,required:!1},prefetchOn:{type:[String,Object],required:!1},noPrefetch:{type:Boolean,required:!1},activeClass:{type:String,required:!1,default:""},exactActiveClass:{type:String,required:!1},ariaCurrentValue:{type:String,required:!1,default:"page"},viewTransition:{type:Boolean,required:!1},replace:{type:Boolean,required:!1}},setup(e){const t=e,n=xo(),r=St(),o=Pr(Q1(t,"as","type","disabled","active","exact","exactQuery","exactHash","activeClass","inactiveClass","to","href","raw","custom","class")),s=F(()=>{var u;return Kt({extend:Kt(Qx),...ko({variants:{active:{true:t.activeClass,false:t.inactiveClass}}},((u=r.ui)==null?void 0:u.link)||{})})}),i=F(()=>t.to??t.href);function a({route:u,isActive:c,isExactActive:f}){if(t.active!==void 0)return t.active;if(t.exactQuery==="partial"){if(!qx(u.query,n.query))return!1}else if(t.exactQuery===!0&&!yl(u.query,n.query))return!1;return t.exactHash&&u.hash!==n.hash?!1:!!(t.exact&&f||!t.exact&&c)}function l({route:u,isActive:c,isExactActive:f}){const d=a({route:u,isActive:c,isExactActive:f});return t.raw?[t.class,d?t.activeClass:t.inactiveClass]:s.value({class:t.class,active:d,disabled:t.disabled})}return(u,c)=>{const f=Wx;return Y(),ne(f,Te(A(o),{to:i.value,custom:""}),{default:ce(({href:d,navigate:p,route:g,rel:h,target:y,isExternal:k,isActive:v,isExactActive:m})=>[e.custom?ge(u.$slots,"default",qt(Te({key:0},{...u.$attrs,...e.exact&&m?{"aria-current":t.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:d,navigate:p,rel:h,target:y,isExternal:k,active:a({route:g,isActive:v,isExactActive:m})}))):(Y(),ne(kh,Te({key:1},{...u.$attrs,...e.exact&&m?{"aria-current":t.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:d,navigate:p,rel:h,target:y,isExternal:k},{class:l({route:g,isActive:v,isExactActive:m})}),{default:ce(()=>[ge(u.$slots,"default",{active:a({route:g,isActive:v,isExactActive:m})})]),_:2},1040,["class"]))]),_:3},16,["to"])}}}),Zx={slots:{base:["rounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75","transition-colors"],label:"truncate",leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailingIcon:"shrink-0"},variants:{buttonGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:"",ghost:"",link:""},size:{xs:{base:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},sm:{base:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},md:{base:"px-2.5 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},lg:{base:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6"}},block:{true:{base:"w-full justify-center",trailingIcon:"ms-auto"}},square:{true:""},leading:{true:""},trailing:{true:""},loading:{true:""},active:{true:{base:""},false:{base:""}}},compoundVariants:[{color:"primary",variant:"solid",class:"text-inverted bg-primary hover:bg-primary/75 disabled:bg-primary aria-disabled:bg-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"},{color:"secondary",variant:"solid",class:"text-inverted bg-secondary hover:bg-secondary/75 disabled:bg-secondary aria-disabled:bg-secondary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary"},{color:"success",variant:"solid",class:"text-inverted bg-success hover:bg-success/75 disabled:bg-success aria-disabled:bg-success focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success"},{color:"info",variant:"solid",class:"text-inverted bg-info hover:bg-info/75 disabled:bg-info aria-disabled:bg-info focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info"},{color:"warning",variant:"solid",class:"text-inverted bg-warning hover:bg-warning/75 disabled:bg-warning aria-disabled:bg-warning focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning"},{color:"error",variant:"solid",class:"text-inverted bg-error hover:bg-error/75 disabled:bg-error aria-disabled:bg-error focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-error"},{color:"primary",variant:"outline",class:"ring ring-inset ring-primary/50 text-primary hover:bg-primary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-primary"},{color:"secondary",variant:"outline",class:"ring ring-inset ring-secondary/50 text-secondary hover:bg-secondary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary"},{color:"success",variant:"outline",class:"ring ring-inset ring-success/50 text-success hover:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-success"},{color:"info",variant:"outline",class:"ring ring-inset ring-info/50 text-info hover:bg-info/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-info"},{color:"warning",variant:"outline",class:"ring ring-inset ring-warning/50 text-warning hover:bg-warning/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-warning"},{color:"error",variant:"outline",class:"ring ring-inset ring-error/50 text-error hover:bg-error/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-error"},{color:"primary",variant:"soft",class:"text-primary bg-primary/10 hover:bg-primary/15 focus:outline-none focus-visible:bg-primary/15 disabled:bg-primary/10 aria-disabled:bg-primary/10"},{color:"secondary",variant:"soft",class:"text-secondary bg-secondary/10 hover:bg-secondary/15 focus:outline-none focus-visible:bg-secondary/15 disabled:bg-secondary/10 aria-disabled:bg-secondary/10"},{color:"success",variant:"soft",class:"text-success bg-success/10 hover:bg-success/15 focus:outline-none focus-visible:bg-success/15 disabled:bg-success/10 aria-disabled:bg-success/10"},{color:"info",variant:"soft",class:"text-info bg-info/10 hover:bg-info/15 focus:outline-none focus-visible:bg-info/15 disabled:bg-info/10 aria-disabled:bg-info/10"},{color:"warning",variant:"soft",class:"text-warning bg-warning/10 hover:bg-warning/15 focus:outline-none focus-visible:bg-warning/15 disabled:bg-warning/10 aria-disabled:bg-warning/10"},{color:"error",variant:"soft",class:"text-error bg-error/10 hover:bg-error/15 focus:outline-none focus-visible:bg-error/15 disabled:bg-error/10 aria-disabled:bg-error/10"},{color:"primary",variant:"subtle",class:"text-primary ring ring-inset ring-primary/25 bg-primary/10 hover:bg-primary/15 disabled:bg-primary/10 aria-disabled:bg-primary/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary"},{color:"secondary",variant:"subtle",class:"text-secondary ring ring-inset ring-secondary/25 bg-secondary/10 hover:bg-secondary/15 disabled:bg-secondary/10 aria-disabled:bg-secondary/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary"},{color:"success",variant:"subtle",class:"text-success ring ring-inset ring-success/25 bg-success/10 hover:bg-success/15 disabled:bg-success/10 aria-disabled:bg-success/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-success"},{color:"info",variant:"subtle",class:"text-info ring ring-inset ring-info/25 bg-info/10 hover:bg-info/15 disabled:bg-info/10 aria-disabled:bg-info/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-info"},{color:"warning",variant:"subtle",class:"text-warning ring ring-inset ring-warning/25 bg-warning/10 hover:bg-warning/15 disabled:bg-warning/10 aria-disabled:bg-warning/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-warning"},{color:"error",variant:"subtle",class:"text-error ring ring-inset ring-error/25 bg-error/10 hover:bg-error/15 disabled:bg-error/10 aria-disabled:bg-error/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-error"},{color:"primary",variant:"ghost",class:"text-primary hover:bg-primary/10 focus:outline-none focus-visible:bg-primary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"secondary",variant:"ghost",class:"text-secondary hover:bg-secondary/10 focus:outline-none focus-visible:bg-secondary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"success",variant:"ghost",class:"text-success hover:bg-success/10 focus:outline-none focus-visible:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"info",variant:"ghost",class:"text-info hover:bg-info/10 focus:outline-none focus-visible:bg-info/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"warning",variant:"ghost",class:"text-warning hover:bg-warning/10 focus:outline-none focus-visible:bg-warning/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"error",variant:"ghost",class:"text-error hover:bg-error/10 focus:outline-none focus-visible:bg-error/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"primary",variant:"link",class:"text-primary hover:text-primary/75 disabled:text-primary aria-disabled:text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary"},{color:"secondary",variant:"link",class:"text-secondary hover:text-secondary/75 disabled:text-secondary aria-disabled:text-secondary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary"},{color:"success",variant:"link",class:"text-success hover:text-success/75 disabled:text-success aria-disabled:text-success focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success"},{color:"info",variant:"link",class:"text-info hover:text-info/75 disabled:text-info aria-disabled:text-info focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info"},{color:"warning",variant:"link",class:"text-warning hover:text-warning/75 disabled:text-warning aria-disabled:text-warning focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning"},{color:"error",variant:"link",class:"text-error hover:text-error/75 disabled:text-error aria-disabled:text-error focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error"},{color:"neutral",variant:"solid",class:"text-inverted bg-inverted hover:bg-inverted/90 disabled:bg-inverted aria-disabled:bg-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-inverted"},{color:"neutral",variant:"outline",class:"ring ring-inset ring-accented text-default bg-default hover:bg-elevated disabled:bg-default aria-disabled:bg-default focus:outline-none focus-visible:ring-2 focus-visible:ring-inverted"},{color:"neutral",variant:"soft",class:"text-default bg-elevated hover:bg-accented/75 focus:outline-none focus-visible:bg-accented/75 disabled:bg-elevated aria-disabled:bg-elevated"},{color:"neutral",variant:"subtle",class:"ring ring-inset ring-accented text-default bg-elevated hover:bg-accented/75 disabled:bg-elevated aria-disabled:bg-elevated focus:outline-none focus-visible:ring-2 focus-visible:ring-inverted"},{color:"neutral",variant:"ghost",class:"text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent"},{color:"neutral",variant:"link",class:"text-muted hover:text-default disabled:text-muted aria-disabled:text-muted focus:outline-none focus-visible:ring-inset focus-visible:ring-2 focus-visible:ring-inverted"},{size:"xs",square:!0,class:"p-1"},{size:"sm",square:!0,class:"p-1.5"},{size:"md",square:!0,class:"p-1.5"},{size:"lg",square:!0,class:"p-2"},{size:"xl",square:!0,class:"p-2"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}}],defaultVariants:{color:"primary",variant:"solid",size:"md"}},Mi={__name:"Button",props:{label:{type:String,required:!1},color:{type:null,required:!1},activeColor:{type:null,required:!1},variant:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},ui:{type:null,required:!1},icon:{type:String,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:String,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:String,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:String,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},active:{type:Boolean,required:!1,default:void 0},exact:{type:Boolean,required:!1},exactQuery:{type:[Boolean,String],required:!1},exactHash:{type:Boolean,required:!1},inactiveClass:{type:String,required:!1,default:""},to:{type:null,required:!1},href:{type:null,required:!1},external:{type:Boolean,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},noRel:{type:Boolean,required:!1},prefetchedClass:{type:String,required:!1},prefetch:{type:Boolean,required:!1},prefetchOn:{type:[String,Object],required:!1},noPrefetch:{type:Boolean,required:!1},activeClass:{type:String,required:!1,default:""},exactActiveClass:{type:String,required:!1},ariaCurrentValue:{type:String,required:!1},viewTransition:{type:Boolean,required:!1},replace:{type:Boolean,required:!1}},setup(e){const t=e,n=Nf(),r=St(),{orientation:o,size:s}=jx(t),i=Pr(Vx(t)),a=se(!1),l=Se(Ux,void 0);async function u(y){a.value=!0;const k=Array.isArray(t.onClick)?t.onClick:[t.onClick];try{await Promise.all(k.map(v=>v==null?void 0:v(y)))}finally{a.value=!1}}const c=F(()=>t.loading||t.loadingAuto&&(a.value||(l==null?void 0:l.value)&&t.type==="submit")),{isLeading:f,isTrailing:d,leadingIconName:p,trailingIconName:g}=Nx(F(()=>({...t,loading:c.value}))),h=F(()=>{var y;return Kt({extend:Kt(Zx),...ko({variants:{active:{true:{base:t.activeClass},false:{base:t.inactiveClass}}}},((y=r.ui)==null?void 0:y.button)||{})})({color:t.color,variant:t.variant,size:s.value,loading:c.value,block:t.block,square:t.square||!n.default&&!t.label,leading:f.value,trailing:d.value,buttonGroup:o.value})});return(y,k)=>(Y(),ne(Xx,Te({type:e.type,disabled:e.disabled||c.value},A(nh)(A(i),["type","disabled","onClick"]),{custom:""}),{default:ce(({active:v,...m})=>{var b;return[ue(kh,Te(m,{class:h.value.base({class:[(b=t.ui)==null?void 0:b.base,t.class],active:v,...v&&e.activeVariant?{variant:e.activeVariant}:{},...v&&e.activeColor?{color:e.activeColor}:{}}),onClick:u}),{default:ce(()=>[ge(y.$slots,"leading",{},()=>{var _,x,S;return[A(f)&&A(p)?(Y(),ne($s,{key:0,name:A(p),class:Ke(h.value.leadingIcon({class:(_=t.ui)==null?void 0:_.leadingIcon,active:v}))},null,8,["name","class"])):e.avatar?(Y(),ne(_h,Te({key:1,size:((x=t.ui)==null?void 0:x.leadingAvatarSize)||h.value.leadingAvatarSize()},e.avatar,{class:h.value.leadingAvatar({class:(S=t.ui)==null?void 0:S.leadingAvatar,active:v})}),null,16,["size","class"])):Ue("",!0)]}),ge(y.$slots,"default",{},()=>{var _;return[e.label!==void 0&&e.label!==null?(Y(),yt("span",{key:0,class:Ke(h.value.label({class:(_=t.ui)==null?void 0:_.label,active:v}))},qn(e.label),3)):Ue("",!0)]}),ge(y.$slots,"trailing",{},()=>{var _;return[A(d)&&A(g)?(Y(),ne($s,{key:0,name:A(g),class:Ke(h.value.trailingIcon({class:(_=t.ui)==null?void 0:_.trailingIcon,active:v}))},null,8,["name","class"])):Ue("",!0)]})]),_:2},1040,["class"])]}),_:3},16,["type","disabled"]))}},eE={slots:{root:"relative group overflow-hidden bg-default shadow-lg rounded-lg ring ring-default p-4 flex gap-2.5 focus:outline-none",wrapper:"w-0 flex-1 flex flex-col",title:"text-sm font-medium text-highlighted",description:"text-sm text-muted",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xl",actions:"flex gap-1.5 shrink-0",progress:"absolute inset-x-0 bottom-0 h-1 z-[-1]",close:"p-0"},variants:{color:{primary:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",icon:"text-primary",progress:"bg-primary"},secondary:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary",icon:"text-secondary",progress:"bg-secondary"},success:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success",icon:"text-success",progress:"bg-success"},info:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info",icon:"text-info",progress:"bg-info"},warning:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning",icon:"text-warning",progress:"bg-warning"},error:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error",icon:"text-error",progress:"bg-error"},neutral:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-inverted",icon:"text-highlighted",progress:"bg-inverted"}},orientation:{horizontal:{root:"items-center",actions:"items-center"},vertical:{root:"items-start",actions:"items-start mt-2.5"}},title:{true:{description:"mt-1"}}},defaultVariants:{color:"primary"}},tE={__name:"Toast",props:{as:{type:null,required:!1},title:{type:[String,Object,Function],required:!1},description:{type:[String,Object,Function],required:!1},icon:{type:String,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:"vertical"},progress:{type:Boolean,required:!1,default:!0},actions:{type:Array,required:!1},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:String,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},type:{type:String,required:!1},duration:{type:Number,required:!1}},emits:["escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd","update:open"],setup(e,{expose:t,emit:n}){const r=e,o=n,s=Nf(),{t:i}=dk(),a=St(),l=A1(Co(r,"as","defaultOpen","open","duration","type"),o),u=F(()=>{var d;return Kt({extend:Kt(eE),...((d=a.ui)==null?void 0:d.toast)||{}})({color:r.color,orientation:r.orientation,title:!!r.title||!!s.title})}),c=se(),f=se(0);return jt(()=>{c.value&&setTimeout(()=>{var d;f.value=(d=c.value.$el.getBoundingClientRect())==null?void 0:d.height},0)}),t({height:f}),(d,p)=>{var g;return Y(),ne(A(V1),Te({ref_key:"el",ref:c},A(l),{"data-orientation":e.orientation,class:u.value.root({class:[(g=r.ui)==null?void 0:g.root,r.class]}),style:{"--height":f.value}}),{default:ce(({remaining:h,duration:y})=>{var k,v,m,b,_,x,S,N,O;return[ge(d.$slots,"leading",{},()=>{var P,q,T;return[e.avatar?(Y(),ne(_h,Te({key:0,size:((P=r.ui)==null?void 0:P.avatarSize)||u.value.avatarSize()},e.avatar,{class:u.value.avatar({class:(q=r.ui)==null?void 0:q.avatar})}),null,16,["size","class"])):e.icon?(Y(),ne($s,{key:1,name:e.icon,class:Ke(u.value.icon({class:(T=r.ui)==null?void 0:T.icon}))},null,8,["name","class"])):Ue("",!0)]}),nl("div",{class:Ke(u.value.wrapper({class:(k=r.ui)==null?void 0:k.wrapper}))},[e.title||s.title?(Y(),ne(A(q1),{key:0,class:Ke(u.value.title({class:(v=r.ui)==null?void 0:v.title}))},{default:ce(()=>[ge(d.$slots,"title",{},()=>[typeof e.title=="function"?(Y(),ne(Ln(e.title()),{key:0})):typeof e.title=="object"?(Y(),ne(Ln(e.title),{key:1})):(Y(),yt(Ie,{key:2},[mr(qn(e.title),1)],64))])]),_:3},8,["class"])):Ue("",!0),e.description||s.description?(Y(),ne(A(B1),{key:1,class:Ke(u.value.description({class:(m=r.ui)==null?void 0:m.description}))},{default:ce(()=>[ge(d.$slots,"description",{},()=>[typeof e.description=="function"?(Y(),ne(Ln(e.description()),{key:0})):typeof e.description=="object"?(Y(),ne(Ln(e.description),{key:1})):(Y(),yt(Ie,{key:2},[mr(qn(e.description),1)],64))])]),_:3},8,["class"])):Ue("",!0),e.orientation==="vertical"&&((b=e.actions)!=null&&b.length||s.actions)?(Y(),yt("div",{key:2,class:Ke(u.value.actions({class:(_=r.ui)==null?void 0:_.actions}))},[ge(d.$slots,"actions",{},()=>[(Y(!0),yt(Ie,null,gs(e.actions,(P,q)=>(Y(),ne(A(Cu),{key:q,"alt-text":P.label||"Action","as-child":"",onClick:p[0]||(p[0]=Zo(()=>{},["stop"]))},{default:ce(()=>[ue(Mi,Te({size:"xs",color:e.color},{ref_for:!0},P),null,16,["color"])]),_:2},1032,["alt-text"]))),128))])],2)):Ue("",!0)],2),e.orientation==="horizontal"&&((x=e.actions)!=null&&x.length||s.actions)||e.close?(Y(),yt("div",{key:0,class:Ke(u.value.actions({class:(S=r.ui)==null?void 0:S.actions,orientation:"horizontal"}))},[e.orientation==="horizontal"&&((N=e.actions)!=null&&N.length||s.actions)?ge(d.$slots,"actions",{key:0},()=>[(Y(!0),yt(Ie,null,gs(e.actions,(P,q)=>(Y(),ne(A(Cu),{key:q,"alt-text":P.label||"Action","as-child":"",onClick:p[1]||(p[1]=Zo(()=>{},["stop"]))},{default:ce(()=>[ue(Mi,Te({size:"xs",color:e.color},{ref_for:!0},P),null,16,["color"])]),_:2},1032,["alt-text"]))),128))]):Ue("",!0),e.close||s.close?(Y(),ne(A(Xp),{key:1,"as-child":""},{default:ce(()=>[ge(d.$slots,"close",{ui:u.value},()=>{var P;return[e.close?(Y(),ne(Mi,Te({key:0,icon:e.closeIcon||A(a).ui.icons.close,size:"md",color:"neutral",variant:"link","aria-label":A(i)("toast.close")},typeof e.close=="object"?e.close:{},{class:u.value.close({class:(P=r.ui)==null?void 0:P.close}),onClick:p[2]||(p[2]=Zo(()=>{},["stop"]))}),null,16,["icon","aria-label","class"])):Ue("",!0)]})]),_:3})):Ue("",!0)],2)):Ue("",!0),e.progress&&h>0&&y?(Y(),yt("div",{key:1,class:Ke(u.value.progress({class:(O=r.ui)==null?void 0:O.progress})),style:cn({width:`${h/y*100}%`})},null,6)):Ue("",!0)]}),_:3},16,["data-orientation","class","style"])}}},nE={slots:{viewport:"fixed flex flex-col w-[calc(100%-2rem)] sm:w-96 z-[100] data-[expanded=true]:h-(--height) focus:outline-none",base:"pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:invisible data-[state=closed]:animate-[toast-closed_200ms_ease-in-out] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_ease-in-out] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out"},variants:{position:{"top-left":{viewport:"left-4"},"top-center":{viewport:"left-1/2 transform -translate-x-1/2"},"top-right":{viewport:"right-4"},"bottom-left":{viewport:"left-4"},"bottom-center":{viewport:"left-1/2 transform -translate-x-1/2"},"bottom-right":{viewport:"right-4"}},swipeDirection:{up:"data-[swipe=end]:animate-[toast-slide-up_200ms_ease-out]",right:"data-[swipe=end]:animate-[toast-slide-right_200ms_ease-out]",down:"data-[swipe=end]:animate-[toast-slide-down_200ms_ease-out]",left:"data-[swipe=end]:animate-[toast-slide-left_200ms_ease-out]"}},compoundVariants:[{position:["top-left","top-center","top-right"],class:{viewport:"top-4",base:"top-0 data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out]"}},{position:["bottom-left","bottom-center","bottom-right"],class:{viewport:"bottom-4",base:"bottom-0 data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out]"}},{swipeDirection:["left","right"],class:"data-[swipe=move]:translate-x-(--reka-toast-swipe-move-x) data-[swipe=end]:translate-x-(--reka-toast-swipe-end-x) data-[swipe=cancel]:translate-x-0"},{swipeDirection:["up","down"],class:"data-[swipe=move]:translate-y-(--reka-toast-swipe-move-y) data-[swipe=end]:translate-y-(--reka-toast-swipe-end-y) data-[swipe=cancel]:translate-y-0"}],defaultVariants:{position:"bottom-right"}},rE={name:"Toaster"},oE=Object.assign(rE,{props:{position:{type:null,required:!1},expand:{type:Boolean,required:!1,default:!0},progress:{type:Boolean,required:!1,default:!0},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},label:{type:String,required:!1},duration:{type:Number,required:!1,default:5e3},swipeThreshold:{type:Number,required:!1}},setup(e){const t=e,{toasts:n,remove:r}=hk(),o=St(),s=Pr(Co(t,"duration","label","swipeThreshold")),i=pk(Rt(()=>t.portal)),a=F(()=>{switch(t.position){case"top-center":return"up";case"top-right":case"bottom-right":return"right";case"bottom-center":return"down";case"top-left":case"bottom-left":return"left"}return"right"}),l=F(()=>{var y;return Kt({extend:Kt(nE),...((y=o.ui)==null?void 0:y.toaster)||{}})({position:t.position,swipeDirection:a.value})});function u(y,k){y||r(k)}const c=se(!1),f=F(()=>t.expand||c.value),d=se([]),p=F(()=>d.value.reduce((y,{height:k})=>y+k+16,0)),g=F(()=>{var y;return((y=d.value[d.value.length-1])==null?void 0:y.height)||0});function h(y){return d.value.slice(y+1).reduce((k,{height:v})=>k+v+16,0)}return(y,k)=>(Y(),ne(A(R1),Te({"swipe-direction":a.value},A(s)),{default:ce(()=>[ge(y.$slots,"default"),(Y(!0),yt(Ie,null,gs(A(n),(v,m)=>{var b;return Y(),ne(tE,Te({key:v.id,ref_for:!0,ref_key:"refs",ref:d,progress:e.progress},{ref_for:!0},A(nh)(v,["id","close"]),{close:v.close,"data-expanded":f.value,"data-front":!f.value&&m===A(n).length-1,style:{"--index":m-A(n).length+A(n).length,"--before":A(n).length-1-m,"--offset":h(m),"--scale":f.value?"1":"calc(1 - var(--before) * var(--scale-factor))","--translate":f.value?"calc(var(--offset) * var(--translate-factor))":"calc(var(--before) * var(--gap))","--transform":"translateY(var(--translate)) scale(var(--scale))"},class:l.value.base({class:[(b=t.ui)==null?void 0:b.base,v.onClick?"cursor-pointer":void 0]}),"onUpdate:open":_=>u(_,v.id),onClick:_=>v.onClick&&v.onClick(v)}),null,16,["progress","close","data-expanded","data-front","style","class","onUpdate:open","onClick"])}),128)),ue(A(U1),qt(An(A(i))),{default:ce(()=>{var v,m,b;return[ue(A(K1),{"data-expanded":f.value,class:Ke(l.value.viewport({class:[(v=t.ui)==null?void 0:v.viewport,t.class]})),style:cn({"--scale-factor":"0.05","--translate-factor":(m=e.position)!=null&&m.startsWith("top")?"1px":"-1px","--gap":(b=e.position)!=null&&b.startsWith("top")?"16px":"-16px","--front-height":`${g.value}px`,"--height":`${p.value}px`}),onMouseenter:k[0]||(k[0]=_=>c.value=!0),onMouseleave:k[1]||(k[1]=_=>c.value=!1)},null,8,["data-expanded","class","style"])]}),_:1},16)]),_:3},16,["swipe-direction"]))}});function sE(){const e=Ot([]),t=(u,c)=>{const{props:f,defaultOpen:d,destroyOnClose:p}=c||{},g=et({id:Symbol(""),isOpen:!!d,component:Va(u),isMounted:!!d,destroyOnClose:!!p,props:f||{}});return e.push(g),{...g,open:h=>n(g.id,h),close:h=>r(g.id,h),patch:h=>i(g.id,h)}},n=(u,c)=>{const f=a(u);return c&&i(f.id,c),f.isOpen=!0,f.isMounted=!0,{id:u,isMounted:f.isMounted,isOpen:f.isOpen,result:new Promise(d=>f.resolvePromise=d)}},r=(u,c)=>{const f=a(u);f.isOpen=!1,f.resolvePromise&&(f.resolvePromise(c),f.resolvePromise=void 0)},o=()=>{e.forEach(u=>r(u.id))},s=u=>{const c=a(u);if(c.isMounted=!1,c.destroyOnClose){const f=e.findIndex(d=>d.id===u);e.splice(f,1)}},i=(u,c)=>{const f=a(u);Object.entries(c).forEach(([d,p])=>{f.props[d]=p})},a=u=>{const c=e.find(f=>f.id===u);if(!c)throw new Error("Overlay not found");return c};return{overlays:e,open:n,close:r,closeAll:o,create:t,patch:i,unMount:s,isOpen:u=>a(u).isOpen}}const iE=Zp(sE),aE={__name:"OverlayProvider",setup(e){const{overlays:t,unMount:n,close:r}=iE(),o=F(()=>t.filter(a=>a.isMounted)),s=a=>{r(a),n(a)},i=(a,l)=>{r(a,l)};return(a,l)=>(Y(!0),yt(Ie,null,gs(o.value,u=>(Y(),ne(Ln(u.component),Te({key:u.id},{ref_for:!0},u.props,{open:u.isOpen,"onUpdate:open":c=>u.isOpen=c,onClose:c=>i(u.id,c),"onAfter:leave":c=>s(u.id)}),null,16,["open","onUpdate:open","onClose","onAfter:leave"]))),128))}},lE={name:"App"},cE=Object.assign(lE,{props:{tooltip:{type:Object,required:!1},toaster:{type:[Object,null],required:!1},locale:{type:null,required:!1},portal:{type:null,required:!1,default:"body"},scrollBody:{type:[Boolean,Object],required:!1},nonce:{type:String,required:!1}},setup(e){const t=e,n=Pr(Co(t,"scrollBody")),r=Rt(()=>t.tooltip),o=Rt(()=>t.toaster),s=Rt(()=>t.locale);at(rh,s);const i=Rt(()=>t.portal);return at(Ta,i),(a,l)=>{var u,c;return Y(),ne(A(m1),Te({"use-id":()=>xg(),dir:(u=s.value)==null?void 0:u.dir,locale:(c=s.value)==null?void 0:c.code},A(n)),{default:ce(()=>[ue(A(G1),qt(An(r.value)),{default:ce(()=>[e.toaster!==null?(Y(),ne(oE,qt(Te({key:0},o.value)),{default:ce(()=>[ge(a.$slots,"default")]),_:3},16)):ge(a.$slots,"default",{key:1}),ue(aE)]),_:3},16)]),_:3},16,["use-id","dir","locale"])}}}),uE=()=>jn("color-mode").value,Du="Terraform Registry",Fu="A private Terraform module registry for managing and distributing infrastructure modules.",fE=fe({__name:"app",setup(e){const t=uE(),n=F(()=>t.value==="dark"?"#020617":"white");return rp({meta:[{charset:"utf-8"},{name:"viewport",content:"width=device-width, initial-scale=1"},{key:"theme-color",name:"theme-color",content:n}],link:[{rel:"icon",href:"/favicon.ico"}],htmlAttrs:{lang:"en"}}),_v({title:Du,description:Fu,ogTitle:Du,ogDescription:Fu}),(r,o)=>{const s=F_,i=B_,a=G_,l=cE;return Y(),ne(l,null,{default:ce(()=>[ue(s),ue(a,null,{default:ce(()=>[ue(i)]),_:1})]),_:1})}}}),dE={__name:"nuxt-error-page",props:{error:Object},setup(e){const n=e.error;n.stack&&n.stack.split(` +`).splice(1).map(f=>({text:f.replace("webpack:/","").replace(".vue",".js").trim(),internal:f.includes("node_modules")&&!f.includes(".cache")||f.includes("internal")||f.includes("new Promise")})).map(f=>`${f.text}`).join(` +`);const r=Number(n.statusCode||500),o=r===404,s=n.statusMessage??(o?"Page Not Found":"Internal Server Error"),i=n.message||n.toString(),a=void 0,c=o?hs(()=>rn(()=>import("./YGikTPtL.js"),__vite__mapDeps([10,11,12]),import.meta.url)):hs(()=>rn(()=>import("./D6LYtxie.js"),__vite__mapDeps([13,11,14]),import.meta.url));return(f,d)=>(Y(),ne(A(c),qt(An({statusCode:A(r),statusMessage:A(s),description:A(i),stack:A(a)})),null,16))}},pE={key:0},Hu={__name:"nuxt-root",setup(e){const t=()=>null,n=xe(),r=n.deferHydration();if(n.isHydrating){const u=n.hooks.hookOnce("app:error",r);nt().beforeEach(u)}const o=!1;at(Wn,xo()),n.hooks.callHookWith(u=>u.map(c=>c()),"vue:setup");const s=Xs(),i=!1,a=/bot\b|chrome-lighthouse|facebookexternalhit|google\b|googlebot/i;Mf((u,c,f)=>{if(n.hooks.callHook("vue:error",u,c,f).catch(d=>console.error("[nuxt] Error in `vue:error` hook",d)),a.test(navigator.userAgent))return n.hooks.callHook("app:error",u),console.error(`[nuxt] Not rendering error page for bot with user agent \`${navigator.userAgent}\`:`,u),!1;if(Wd(u)&&(u.fatal||u.unhandled))return n.runWithContext(()=>Nn(u)),!1});const l=!1;return(u,c)=>(Y(),ne(tl,{onResolve:A(r)},{default:ce(()=>[A(i)?(Y(),yt("div",pE)):A(s)?(Y(),ne(A(dE),{key:1,error:A(s)},null,8,["error"])):A(l)?(Y(),ne(A(t),{key:2,context:A(l)},null,8,["context"])):A(o)?(Y(),ne(Ln(A(o)),{key:3})):(Y(),ne(A(fE),{key:4}))]),_:1},8,["onResolve"]))}};let Bu;{let e;Bu=async function(){var i,a;if(e)return e;const r=!!(((i=window.__NUXT__)==null?void 0:i.serverRendered)??((a=document.getElementById("__NUXT_DATA__"))==null?void 0:a.dataset.ssr)==="true")?Sd(Hu):Zi(Hu),o=kb({vueApp:r});async function s(l){var u;await o.callHook("app:error",l),(u=o.payload).error||(u.error=Vn(l))}r.config.errorHandler=s,o.hook("app:suspense:resolve",()=>{r.config.errorHandler===s&&(r.config.errorHandler=void 0)});try{await Sb(o,N_)}catch(l){s(l)}try{await o.hooks.callHook("app:created",r),await o.hooks.callHook("app:beforeMount",r),r.mount(vb),await o.hooks.callHook("app:mounted",r),await tt()}catch(l){s(l)}return r},e=Bu().catch(t=>{throw console.error("Error while mounting app:",t),t})}export{Yn as $,ge as A,_h as B,Te as C,Ke as D,A1 as E,Ie as F,Co as G,pk as H,Rt as I,qt as J,An as K,NE as L,Bp as M,gS as N,TE as O,Dt as P,bd as Q,zE as R,JE as S,BS as T,jx as U,Nx as V,FS as W,bS as X,Ze as Y,Ne as Z,Wx as _,nl as a,vE as a$,gr as a0,yE as a1,yl as a2,h1 as a3,OS as a4,oi as a5,$t as a6,Wt as a7,u1 as a8,v1 as a9,LS as aA,qp as aB,je as aC,jS as aD,DS as aE,ko as aF,Zp as aG,et as aH,HS as aI,sk as aJ,Xx as aK,Vx as aL,kh as aM,Q1 as aN,nh as aO,$E as aP,kg as aQ,Sf as aR,cS as aS,Gu as aT,xE as aU,rS as aV,Mg as aW,as as aX,hr as aY,tl as aZ,Bn as a_,tt as aa,xr as ab,xl as ac,GE as ad,Pn as ae,qE as af,vS as ag,ln as ah,cn as ai,SS as aj,kS as ak,er as al,Xn as am,RS as an,Zo as ao,P1 as ap,Ng as aq,Pr as ar,xS as as,Ln as at,w1 as au,wS as av,TS as aw,CS as ax,kf as ay,AS as az,ue as b,at as b$,Rm as b0,hS as b1,wE as b2,ol as b3,kE as b4,Nt as b5,bo as b6,We as b7,Ds as b8,zt as b9,mS as bA,AE as bB,IE as bC,RE as bD,OE as bE,eS as bF,yS as bG,Se as bH,Em as bI,Ua as bJ,Fn as bK,an as bL,ZE as bM,kt as bN,Cn as bO,Va as bP,Af as bQ,Qn as bR,If as bS,Of as bT,Mf as bU,Dg as bV,jg as bW,Lg as bX,Wa as bY,pg as bZ,SE as b_,lS as ba,Zi as bb,tm as bc,KE as bd,em as be,Sd as bf,QE as bg,yo as bh,hs as bi,Jm as bj,jE as bk,DE as bl,BE as bm,FE as bn,LE as bo,fS as bp,HE as bq,oS as br,gE as bs,Bs as bt,Fe as bu,_E as bv,za as bw,ke as bx,Sr as by,Gs as bz,yt as c,df as c0,EE as c1,ds as c2,bt as c3,XE as c4,fy as c5,Vl as c6,ME as c7,aS as c8,so as c9,Sm as cA,nS as cB,sm as cC,WE as cD,UE as cE,tS as cF,CE as cG,_S as cH,T1 as cI,IS as cJ,Ai as cK,Jp as cL,MS as cM,$S as cN,NS as cO,PS as cP,ES as cQ,Ql as ca,sS as cb,Sn as cc,Ot as cd,rm as ce,iS as cf,mE as cg,zr as ch,me as ci,Le as cj,YE as ck,bE as cl,VE as cm,pS as cn,uS as co,Qm as cp,xg as cq,om as cr,dS as cs,PE as ct,Ef as cu,iy as cv,vd as cw,sy as cx,Xi as cy,Nm as cz,mr as d,fe as e,cw as f,F as g,jt as h,Mi as i,A as j,Pe as k,ne as l,Ue as m,$s as n,Y as o,gs as p,xo as q,se as r,ll as s,qn as t,rp as u,Nf as v,ce as w,dk as x,St as y,Kt as z}; diff --git a/TerraformRegistry/web/_nuxt/C0rx7CO6.js b/TerraformRegistry/web/_nuxt/C0rx7CO6.js new file mode 100644 index 0000000..0191961 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/C0rx7CO6.js @@ -0,0 +1 @@ +import{v as y,y as g,g as b,z as p,l as h,o as t,w as k,c as l,m as i,D as o,A as d,j as C,P as q}from"./BnS3deBy.js";const x={slots:{root:"rounded-lg",header:"p-4 sm:px-6",body:"p-4 sm:p-6",footer:"p-4 sm:px-6"},variants:{variant:{solid:{root:"bg-inverted text-inverted"},outline:{root:"bg-default ring ring-default divide-y divide-default"},soft:{root:"bg-elevated/50 divide-y divide-default"},subtle:{root:"bg-elevated/50 ring ring-default divide-y divide-default"}}},defaultVariants:{variant:"outline"}},$={__name:"Card",props:{as:{type:null,required:!1},variant:{type:null,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1}},setup(u){const e=u,r=y(),m=g(),s=b(()=>{var a;return p({extend:p(x),...((a=m.ui)==null?void 0:a.card)||{}})({variant:e.variant})});return(a,B)=>{var n;return t(),h(C(q),{as:u.as,class:o(s.value.root({class:[(n=e.ui)==null?void 0:n.root,e.class]}))},{default:k(()=>{var c,v,f;return[r.header?(t(),l("div",{key:0,class:o(s.value.header({class:(c=e.ui)==null?void 0:c.header}))},[d(a.$slots,"header")],2)):i("",!0),r.default?(t(),l("div",{key:1,class:o(s.value.body({class:(v=e.ui)==null?void 0:v.body}))},[d(a.$slots,"default")],2)):i("",!0),r.footer?(t(),l("div",{key:2,class:o(s.value.footer({class:(f=e.ui)==null?void 0:f.footer}))},[d(a.$slots,"footer")],2)):i("",!0)]}),_:3},8,["as","class"])}}};export{$ as _}; diff --git a/TerraformRegistry/web/_nuxt/CBbkJY-x.js b/TerraformRegistry/web/_nuxt/CBbkJY-x.js new file mode 100644 index 0000000..726e064 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/CBbkJY-x.js @@ -0,0 +1 @@ +import{e as _,f as d,r as x,h,s as f,c as p,a as t,l as n,m as g,j as s,t as i,w,i as y,o as a,d as b,n as k}from"./BnS3deBy.js";const v={class:"min-h-screen bg-slate-900 flex items-center justify-center px-4"},B={class:"text-center"},C={class:"w-16 h-16 mx-auto mb-4 bg-blue-600 rounded-xl flex items-center justify-center"},j={class:"text-2xl font-bold text-slate-100 mb-2"},A={class:"text-slate-400 mb-6"},T=_({__name:"callback",setup(N){const{checkSession:l,isAuthenticated:r}=d(),e=x(!1);return h(async()=>{try{await l(),r.value?await f("/"):e.value=!0}catch{e.value=!0}}),(u,o)=>{const c=k,m=y;return a(),p("div",v,[t("div",B,[t("div",C,[s(e)?(a(),n(c,{key:1,name:"i-lucide-x-circle",class:"text-2xl text-white"})):(a(),n(c,{key:0,name:"i-lucide-loader-2",class:"text-2xl text-white animate-spin"}))]),t("h1",j,i(s(e)?"Authentication Failed":"Completing Sign In..."),1),t("p",A,i(s(e)?"There was a problem signing you in.":"Please wait while we complete your authentication."),1),s(e)?(a(),n(m,{key:0,to:"/login",color:"primary",size:"lg"},{default:w(()=>o[0]||(o[0]=[b(" Back to Login ")])),_:1,__:[0]})):g("",!0)])])}}});export{T as default}; diff --git a/TerraformRegistry/web/_nuxt/ChEe6xeu.js b/TerraformRegistry/web/_nuxt/ChEe6xeu.js new file mode 100644 index 0000000..f01995e --- /dev/null +++ b/TerraformRegistry/web/_nuxt/ChEe6xeu.js @@ -0,0 +1 @@ +import{g as M,r as E,Y as jn,Z as Fe,$ as Uo,a0 as jo,a1 as Ze,j as a,a2 as Dt,a3 as pe,a4 as Go,e as T,a5 as te,a6 as $e,a7 as F,l as C,o as b,w,A as I,P as J,N as un,h as xe,a8 as pt,b as D,C as R,m as K,a9 as Se,aa as Le,ab as Be,ac as We,ad as Gn,c as U,ae as Yn,af as Xn,ag as Yo,ah as Ae,ai as Jn,aj as Mt,J as j,K as Y,ak as Xo,al as Zt,am as Ft,an as yt,E as Q,ao as ze,ap as zt,aq as Jo,ar as dn,as as Zn,at as Ne,au as cn,k as fn,av as Zo,aw as Qo,ax as ea,ay as Qn,az as At,F as ie,M as pn,aA as gn,aB as ta,v as Ue,aC as na,d as Oe,t as ce,L as vn,aD as oa,aE as aa,y as je,G as nt,H as Vt,I as re,aF as gt,z as ge,D as z,aG as ia,aH as sa,p as ye,aI as eo,B as to,n as le,aJ as he,aK as St,aL as Tt,aM as Qe,a as X,x as no,aN as la,aO as oo,aP as ao,f as io,i as so}from"./BnS3deBy.js";import{_ as ra}from"./DzDAta3s.js";import{u as ke,h as lo,i as ro,j as uo,k as ua,F as da,L as ca,l as fa,m as vt,S as pa,I as ga,n as mn,o as Qt,p as co,q as va,r as ma,_ as ha,b as ya,c as ba,d as En,e as Rn,f as wa,a as xa,g as ka}from"./DsdUjOsK.js";import{u as Ca}from"./BB080qx0.js";const Oa=["top","right","bottom","left"],Ve=Math.min,de=Math.max,_t=Math.round,Pt=Math.floor,Ie=e=>({x:e,y:e}),Ba={left:"right",right:"left",bottom:"top",top:"bottom"},Ia={start:"end",end:"start"};function en(e,n,t){return de(e,Ve(n,t))}function _e(e,n){return typeof e=="function"?e(n):e}function Ee(e){return e.split("-")[0]}function at(e){return e.split("-")[1]}function hn(e){return e==="x"?"y":"x"}function yn(e){return e==="y"?"height":"width"}function De(e){return["top","bottom"].includes(Ee(e))?"y":"x"}function bn(e){return hn(De(e))}function Pa(e,n,t){t===void 0&&(t=!1);const o=at(e),i=bn(e),s=yn(i);let l=i==="x"?o===(t?"end":"start")?"right":"left":o==="start"?"bottom":"top";return n.reference[s]>n.floating[s]&&(l=Et(l)),[l,Et(l)]}function $a(e){const n=Et(e);return[tn(e),n,tn(n)]}function tn(e){return e.replace(/start|end/g,n=>Ia[n])}function Sa(e,n,t){const o=["left","right"],i=["right","left"],s=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return t?n?i:o:n?o:i;case"left":case"right":return n?s:l;default:return[]}}function Ta(e,n,t,o){const i=at(e);let s=Sa(Ee(e),t==="start",o);return i&&(s=s.map(l=>l+"-"+i),n&&(s=s.concat(s.map(tn)))),s}function Et(e){return e.replace(/left|right|bottom|top/g,n=>Ba[n])}function La(e){return{top:0,right:0,bottom:0,left:0,...e}}function fo(e){return typeof e!="number"?La(e):{top:e,right:e,bottom:e,left:e}}function Rt(e){const{x:n,y:t,width:o,height:i}=e;return{width:o,height:i,top:t,left:n,right:n+o,bottom:t+i,x:n,y:t}}function Mn(e,n,t){let{reference:o,floating:i}=e;const s=De(n),l=bn(n),r=yn(l),u=Ee(n),f=s==="y",c=o.x+o.width/2-i.width/2,d=o.y+o.height/2-i.height/2,v=o[r]/2-i[r]/2;let m;switch(u){case"top":m={x:c,y:o.y-i.height};break;case"bottom":m={x:c,y:o.y+o.height};break;case"right":m={x:o.x+o.width,y:d};break;case"left":m={x:o.x-i.width,y:d};break;default:m={x:o.x,y:o.y}}switch(at(n)){case"start":m[l]-=v*(t&&f?-1:1);break;case"end":m[l]+=v*(t&&f?-1:1);break}return m}const Da=async(e,n,t)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:l}=t,r=s.filter(Boolean),u=await(l.isRTL==null?void 0:l.isRTL(n));let f=await l.getElementRects({reference:e,floating:n,strategy:i}),{x:c,y:d}=Mn(f,o,u),v=o,m={},g=0;for(let h=0;h({name:"arrow",options:e,async fn(n){const{x:t,y:o,placement:i,rects:s,platform:l,elements:r,middlewareData:u}=n,{element:f,padding:c=0}=_e(e,n)||{};if(f==null)return{};const d=fo(c),v={x:t,y:o},m=bn(i),g=yn(m),h=await l.getDimensions(f),y=m==="y",B=y?"top":"left",x=y?"bottom":"right",O=y?"clientHeight":"clientWidth",k=s.reference[g]+s.reference[m]-v[m]-s.floating[g],p=v[m]-s.reference[m],S=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f));let $=S?S[O]:0;(!$||!await(l.isElement==null?void 0:l.isElement(S)))&&($=r.floating[O]||s.floating[g]);const L=k/2-p/2,P=$/2-h[g]/2-1,A=Ve(d[B],P),_=Ve(d[x],P),N=A,H=$-h[g]-_,V=$/2-h[g]/2+L,q=en(N,V,H),G=!u.arrow&&at(i)!=null&&V!==q&&s.reference[g]/2-(Vq<=0)){var _,N;const q=(((_=s.flip)==null?void 0:_.index)||0)+1,G=$[q];if(G){var H;const Z=d==="alignment"?x!==De(G):!1,ee=((H=A[0])==null?void 0:H.overflows[0])>0;if(!Z||ee)return{data:{index:q,overflows:A},reset:{placement:G}}}let W=(N=A.filter(Z=>Z.overflows[0]<=0).sort((Z,ee)=>Z.overflows[1]-ee.overflows[1])[0])==null?void 0:N.placement;if(!W)switch(m){case"bestFit":{var V;const Z=(V=A.filter(ee=>{if(S){const ne=De(ee.placement);return ne===x||ne==="y"}return!0}).map(ee=>[ee.placement,ee.overflows.filter(ne=>ne>0).reduce((ne,ue)=>ne+ue,0)]).sort((ee,ne)=>ee[1]-ne[1])[0])==null?void 0:V[0];Z&&(W=Z);break}case"initialPlacement":W=r;break}if(i!==W)return{reset:{placement:W}}}return{}}}};function Fn(e,n){return{top:e.top-n.height,right:e.right-n.width,bottom:e.bottom-n.height,left:e.left-n.width}}function zn(e){return Oa.some(n=>e[n]>=0)}const Ea=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(n){const{rects:t}=n,{strategy:o="referenceHidden",...i}=_e(e,n);switch(o){case"referenceHidden":{const s=await mt(n,{...i,elementContext:"reference"}),l=Fn(s,t.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:zn(l)}}}case"escaped":{const s=await mt(n,{...i,altBoundary:!0}),l=Fn(s,t.floating);return{data:{escapedOffsets:l,escaped:zn(l)}}}default:return{}}}}};async function Ra(e,n){const{placement:t,platform:o,elements:i}=e,s=await(o.isRTL==null?void 0:o.isRTL(i.floating)),l=Ee(t),r=at(t),u=De(t)==="y",f=["left","top"].includes(l)?-1:1,c=s&&u?-1:1,d=_e(n,e);let{mainAxis:v,crossAxis:m,alignmentAxis:g}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return r&&typeof g=="number"&&(m=r==="end"?g*-1:g),u?{x:m*c,y:v*f}:{x:v*f,y:m*c}}const Ma=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(n){var t,o;const{x:i,y:s,placement:l,middlewareData:r}=n,u=await Ra(n,e);return l===((t=r.offset)==null?void 0:t.placement)&&(o=r.arrow)!=null&&o.alignmentOffset?{}:{x:i+u.x,y:s+u.y,data:{...u,placement:l}}}}},Fa=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(n){const{x:t,y:o,placement:i}=n,{mainAxis:s=!0,crossAxis:l=!1,limiter:r={fn:y=>{let{x:B,y:x}=y;return{x:B,y:x}}},...u}=_e(e,n),f={x:t,y:o},c=await mt(n,u),d=De(Ee(i)),v=hn(d);let m=f[v],g=f[d];if(s){const y=v==="y"?"top":"left",B=v==="y"?"bottom":"right",x=m+c[y],O=m-c[B];m=en(x,m,O)}if(l){const y=d==="y"?"top":"left",B=d==="y"?"bottom":"right",x=g+c[y],O=g-c[B];g=en(x,g,O)}const h=r.fn({...n,[v]:m,[d]:g});return{...h,data:{x:h.x-t,y:h.y-o,enabled:{[v]:s,[d]:l}}}}}},za=function(e){return e===void 0&&(e={}),{options:e,fn(n){const{x:t,y:o,placement:i,rects:s,middlewareData:l}=n,{offset:r=0,mainAxis:u=!0,crossAxis:f=!0}=_e(e,n),c={x:t,y:o},d=De(i),v=hn(d);let m=c[v],g=c[d];const h=_e(r,n),y=typeof h=="number"?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(u){const O=v==="y"?"height":"width",k=s.reference[v]-s.floating[O]+y.mainAxis,p=s.reference[v]+s.reference[O]-y.mainAxis;mp&&(m=p)}if(f){var B,x;const O=v==="y"?"width":"height",k=["top","left"].includes(Ee(i)),p=s.reference[d]-s.floating[O]+(k&&((B=l.offset)==null?void 0:B[d])||0)+(k?0:y.crossAxis),S=s.reference[d]+s.reference[O]+(k?0:((x=l.offset)==null?void 0:x[d])||0)-(k?y.crossAxis:0);gS&&(g=S)}return{[v]:m,[d]:g}}}},Va=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(n){var t,o;const{placement:i,rects:s,platform:l,elements:r}=n,{apply:u=()=>{},...f}=_e(e,n),c=await mt(n,f),d=Ee(i),v=at(i),m=De(i)==="y",{width:g,height:h}=s.floating;let y,B;d==="top"||d==="bottom"?(y=d,B=v===(await(l.isRTL==null?void 0:l.isRTL(r.floating))?"start":"end")?"left":"right"):(B=d,y=v==="end"?"top":"bottom");const x=h-c.top-c.bottom,O=g-c.left-c.right,k=Ve(h-c[y],x),p=Ve(g-c[B],O),S=!n.middlewareData.shift;let $=k,L=p;if((t=n.middlewareData.shift)!=null&&t.enabled.x&&(L=O),(o=n.middlewareData.shift)!=null&&o.enabled.y&&($=x),S&&!v){const A=de(c.left,0),_=de(c.right,0),N=de(c.top,0),H=de(c.bottom,0);m?L=g-2*(A!==0||_!==0?A+_:de(c.left,c.right)):$=h-2*(N!==0||H!==0?N+H:de(c.top,c.bottom))}await u({...n,availableWidth:L,availableHeight:$});const P=await l.getDimensions(r.floating);return g!==P.width||h!==P.height?{reset:{rects:!0}}:{}}}};function Kt(){return typeof window<"u"}function Ge(e){return wn(e)?(e.nodeName||"").toLowerCase():"#document"}function fe(e){var n;return(e==null||(n=e.ownerDocument)==null?void 0:n.defaultView)||window}function Te(e){var n;return(n=(wn(e)?e.ownerDocument:e.document)||window.document)==null?void 0:n.documentElement}function wn(e){return Kt()?e instanceof Node||e instanceof fe(e).Node:!1}function be(e){return Kt()?e instanceof Element||e instanceof fe(e).Element:!1}function Pe(e){return Kt()?e instanceof HTMLElement||e instanceof fe(e).HTMLElement:!1}function Vn(e){return!Kt()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof fe(e).ShadowRoot}function bt(e){const{overflow:n,overflowX:t,overflowY:o,display:i}=we(e);return/auto|scroll|overlay|hidden|clip/.test(n+o+t)&&!["inline","contents"].includes(i)}function Ka(e){return["table","td","th"].includes(Ge(e))}function qt(e){return[":popover-open",":modal"].some(n=>{try{return e.matches(n)}catch{return!1}})}function xn(e){const n=kn(),t=be(e)?we(e):e;return["transform","translate","scale","rotate","perspective"].some(o=>t[o]?t[o]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!n&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!n&&(t.filter?t.filter!=="none":!1)||["transform","translate","scale","rotate","perspective","filter"].some(o=>(t.willChange||"").includes(o))||["paint","layout","strict","content"].some(o=>(t.contain||"").includes(o))}function qa(e){let n=Ke(e);for(;Pe(n)&&!ot(n);){if(xn(n))return n;if(qt(n))return null;n=Ke(n)}return null}function kn(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function ot(e){return["html","body","#document"].includes(Ge(e))}function we(e){return fe(e).getComputedStyle(e)}function Nt(e){return be(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ke(e){if(Ge(e)==="html")return e;const n=e.assignedSlot||e.parentNode||Vn(e)&&e.host||Te(e);return Vn(n)?n.host:n}function po(e){const n=Ke(e);return ot(n)?e.ownerDocument?e.ownerDocument.body:e.body:Pe(n)&&bt(n)?n:po(n)}function ht(e,n,t){var o;n===void 0&&(n=[]),t===void 0&&(t=!0);const i=po(e),s=i===((o=e.ownerDocument)==null?void 0:o.body),l=fe(i);if(s){const r=nn(l);return n.concat(l,l.visualViewport||[],bt(i)?i:[],r&&t?ht(r):[])}return n.concat(i,ht(i,[],t))}function nn(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function go(e){const n=we(e);let t=parseFloat(n.width)||0,o=parseFloat(n.height)||0;const i=Pe(e),s=i?e.offsetWidth:t,l=i?e.offsetHeight:o,r=_t(t)!==s||_t(o)!==l;return r&&(t=s,o=l),{width:t,height:o,$:r}}function Cn(e){return be(e)?e:e.contextElement}function tt(e){const n=Cn(e);if(!Pe(n))return Ie(1);const t=n.getBoundingClientRect(),{width:o,height:i,$:s}=go(n);let l=(s?_t(t.width):t.width)/o,r=(s?_t(t.height):t.height)/i;return(!l||!Number.isFinite(l))&&(l=1),(!r||!Number.isFinite(r))&&(r=1),{x:l,y:r}}const Na=Ie(0);function vo(e){const n=fe(e);return!kn()||!n.visualViewport?Na:{x:n.visualViewport.offsetLeft,y:n.visualViewport.offsetTop}}function Ha(e,n,t){return n===void 0&&(n=!1),!t||n&&t!==fe(e)?!1:n}function He(e,n,t,o){n===void 0&&(n=!1),t===void 0&&(t=!1);const i=e.getBoundingClientRect(),s=Cn(e);let l=Ie(1);n&&(o?be(o)&&(l=tt(o)):l=tt(e));const r=Ha(s,t,o)?vo(s):Ie(0);let u=(i.left+r.x)/l.x,f=(i.top+r.y)/l.y,c=i.width/l.x,d=i.height/l.y;if(s){const v=fe(s),m=o&&be(o)?fe(o):o;let g=v,h=nn(g);for(;h&&o&&m!==g;){const y=tt(h),B=h.getBoundingClientRect(),x=we(h),O=B.left+(h.clientLeft+parseFloat(x.paddingLeft))*y.x,k=B.top+(h.clientTop+parseFloat(x.paddingTop))*y.y;u*=y.x,f*=y.y,c*=y.x,d*=y.y,u+=O,f+=k,g=fe(h),h=nn(g)}}return Rt({width:c,height:d,x:u,y:f})}function On(e,n){const t=Nt(e).scrollLeft;return n?n.left+t:He(Te(e)).left+t}function mo(e,n,t){t===void 0&&(t=!1);const o=e.getBoundingClientRect(),i=o.left+n.scrollLeft-(t?0:On(e,o)),s=o.top+n.scrollTop;return{x:i,y:s}}function Wa(e){let{elements:n,rect:t,offsetParent:o,strategy:i}=e;const s=i==="fixed",l=Te(o),r=n?qt(n.floating):!1;if(o===l||r&&s)return t;let u={scrollLeft:0,scrollTop:0},f=Ie(1);const c=Ie(0),d=Pe(o);if((d||!d&&!s)&&((Ge(o)!=="body"||bt(l))&&(u=Nt(o)),Pe(o))){const m=He(o);f=tt(o),c.x=m.x+o.clientLeft,c.y=m.y+o.clientTop}const v=l&&!d&&!s?mo(l,u,!0):Ie(0);return{width:t.width*f.x,height:t.height*f.y,x:t.x*f.x-u.scrollLeft*f.x+c.x+v.x,y:t.y*f.y-u.scrollTop*f.y+c.y+v.y}}function Ua(e){return Array.from(e.getClientRects())}function ja(e){const n=Te(e),t=Nt(e),o=e.ownerDocument.body,i=de(n.scrollWidth,n.clientWidth,o.scrollWidth,o.clientWidth),s=de(n.scrollHeight,n.clientHeight,o.scrollHeight,o.clientHeight);let l=-t.scrollLeft+On(e);const r=-t.scrollTop;return we(o).direction==="rtl"&&(l+=de(n.clientWidth,o.clientWidth)-i),{width:i,height:s,x:l,y:r}}function Ga(e,n){const t=fe(e),o=Te(e),i=t.visualViewport;let s=o.clientWidth,l=o.clientHeight,r=0,u=0;if(i){s=i.width,l=i.height;const f=kn();(!f||f&&n==="fixed")&&(r=i.offsetLeft,u=i.offsetTop)}return{width:s,height:l,x:r,y:u}}function Ya(e,n){const t=He(e,!0,n==="fixed"),o=t.top+e.clientTop,i=t.left+e.clientLeft,s=Pe(e)?tt(e):Ie(1),l=e.clientWidth*s.x,r=e.clientHeight*s.y,u=i*s.x,f=o*s.y;return{width:l,height:r,x:u,y:f}}function Kn(e,n,t){let o;if(n==="viewport")o=Ga(e,t);else if(n==="document")o=ja(Te(e));else if(be(n))o=Ya(n,t);else{const i=vo(e);o={x:n.x-i.x,y:n.y-i.y,width:n.width,height:n.height}}return Rt(o)}function ho(e,n){const t=Ke(e);return t===n||!be(t)||ot(t)?!1:we(t).position==="fixed"||ho(t,n)}function Xa(e,n){const t=n.get(e);if(t)return t;let o=ht(e,[],!1).filter(r=>be(r)&&Ge(r)!=="body"),i=null;const s=we(e).position==="fixed";let l=s?Ke(e):e;for(;be(l)&&!ot(l);){const r=we(l),u=xn(l);!u&&r.position==="fixed"&&(i=null),(s?!u&&!i:!u&&r.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||bt(l)&&!u&&ho(e,l))?o=o.filter(c=>c!==l):i=r,l=Ke(l)}return n.set(e,o),o}function Ja(e){let{element:n,boundary:t,rootBoundary:o,strategy:i}=e;const l=[...t==="clippingAncestors"?qt(n)?[]:Xa(n,this._c):[].concat(t),o],r=l[0],u=l.reduce((f,c)=>{const d=Kn(n,c,i);return f.top=de(d.top,f.top),f.right=Ve(d.right,f.right),f.bottom=Ve(d.bottom,f.bottom),f.left=de(d.left,f.left),f},Kn(n,r,i));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function Za(e){const{width:n,height:t}=go(e);return{width:n,height:t}}function Qa(e,n,t){const o=Pe(n),i=Te(n),s=t==="fixed",l=He(e,!0,s,n);let r={scrollLeft:0,scrollTop:0};const u=Ie(0);function f(){u.x=On(i)}if(o||!o&&!s)if((Ge(n)!=="body"||bt(i))&&(r=Nt(n)),o){const m=He(n,!0,s,n);u.x=m.x+n.clientLeft,u.y=m.y+n.clientTop}else i&&f();s&&!o&&i&&f();const c=i&&!o&&!s?mo(i,r):Ie(0),d=l.left+r.scrollLeft-u.x-c.x,v=l.top+r.scrollTop-u.y-c.y;return{x:d,y:v,width:l.width,height:l.height}}function Yt(e){return we(e).position==="static"}function qn(e,n){if(!Pe(e)||we(e).position==="fixed")return null;if(n)return n(e);let t=e.offsetParent;return Te(e)===t&&(t=t.ownerDocument.body),t}function yo(e,n){const t=fe(e);if(qt(e))return t;if(!Pe(e)){let i=Ke(e);for(;i&&!ot(i);){if(be(i)&&!Yt(i))return i;i=Ke(i)}return t}let o=qn(e,n);for(;o&&Ka(o)&&Yt(o);)o=qn(o,n);return o&&ot(o)&&Yt(o)&&!xn(o)?t:o||qa(e)||t}const ei=async function(e){const n=this.getOffsetParent||yo,t=this.getDimensions,o=await t(e.floating);return{reference:Qa(e.reference,await n(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function ti(e){return we(e).direction==="rtl"}const ni={convertOffsetParentRelativeRectToViewportRelativeRect:Wa,getDocumentElement:Te,getClippingRect:Ja,getOffsetParent:yo,getElementRects:ei,getClientRects:Ua,getDimensions:Za,getScale:tt,isElement:be,isRTL:ti};function bo(e,n){return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height}function oi(e,n){let t=null,o;const i=Te(e);function s(){var r;clearTimeout(o),(r=t)==null||r.disconnect(),t=null}function l(r,u){r===void 0&&(r=!1),u===void 0&&(u=1),s();const f=e.getBoundingClientRect(),{left:c,top:d,width:v,height:m}=f;if(r||n(),!v||!m)return;const g=Pt(d),h=Pt(i.clientWidth-(c+v)),y=Pt(i.clientHeight-(d+m)),B=Pt(c),O={rootMargin:-g+"px "+-h+"px "+-y+"px "+-B+"px",threshold:de(0,Ve(1,u))||1};let k=!0;function p(S){const $=S[0].intersectionRatio;if($!==u){if(!k)return l();$?l(!1,$):o=setTimeout(()=>{l(!1,1e-7)},1e3)}$===1&&!bo(f,e.getBoundingClientRect())&&l(),k=!1}try{t=new IntersectionObserver(p,{...O,root:i.ownerDocument})}catch{t=new IntersectionObserver(p,O)}t.observe(e)}return l(!0),s}function ai(e,n,t,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:u=!1}=o,f=Cn(e),c=i||s?[...f?ht(f):[],...ht(n)]:[];c.forEach(B=>{i&&B.addEventListener("scroll",t,{passive:!0}),s&&B.addEventListener("resize",t)});const d=f&&r?oi(f,t):null;let v=-1,m=null;l&&(m=new ResizeObserver(B=>{let[x]=B;x&&x.target===f&&m&&(m.unobserve(n),cancelAnimationFrame(v),v=requestAnimationFrame(()=>{var O;(O=m)==null||O.observe(n)})),t()}),f&&!u&&m.observe(f),m.observe(n));let g,h=u?He(e):null;u&&y();function y(){const B=He(e);h&&!bo(h,B)&&t(),h=B,g=requestAnimationFrame(y)}return t(),()=>{var B;c.forEach(x=>{i&&x.removeEventListener("scroll",t),s&&x.removeEventListener("resize",t)}),d==null||d(),(B=m)==null||B.disconnect(),m=null,u&&cancelAnimationFrame(g)}}const ii=Ma,si=Fa,Nn=_a,li=Va,ri=Ea,ui=Aa,di=za,ci=(e,n,t)=>{const o=new Map,i={platform:ni,...t},s={...i.platform,_c:o};return Da(e,n,{...i,platform:s})};function fi(e){return e!=null&&typeof e=="object"&&"$el"in e}function on(e){if(fi(e)){const n=e.$el;return wn(n)&&Ge(n)==="#comment"?null:n}return e}function et(e){return typeof e=="function"?e():a(e)}function pi(e){return{name:"arrow",options:e,fn(n){const t=on(et(e.element));return t==null?{}:ui({element:t,padding:e.padding}).fn(n)}}}function wo(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Hn(e,n){const t=wo(e);return Math.round(n*t)/t}function gi(e,n,t){t===void 0&&(t={});const o=t.whileElementsMounted,i=M(()=>{var $;return($=et(t.open))!=null?$:!0}),s=M(()=>et(t.middleware)),l=M(()=>{var $;return($=et(t.placement))!=null?$:"bottom"}),r=M(()=>{var $;return($=et(t.strategy))!=null?$:"absolute"}),u=M(()=>{var $;return($=et(t.transform))!=null?$:!0}),f=M(()=>on(e.value)),c=M(()=>on(n.value)),d=E(0),v=E(0),m=E(r.value),g=E(l.value),h=jn({}),y=E(!1),B=M(()=>{const $={position:m.value,left:"0",top:"0"};if(!c.value)return $;const L=Hn(c.value,d.value),P=Hn(c.value,v.value);return u.value?{...$,transform:"translate("+L+"px, "+P+"px)",...wo(c.value)>=1.5&&{willChange:"transform"}}:{position:m.value,left:L+"px",top:P+"px"}});let x;function O(){if(f.value==null||c.value==null)return;const $=i.value;ci(f.value,c.value,{middleware:s.value,placement:l.value,strategy:r.value}).then(L=>{d.value=L.x,v.value=L.y,m.value=L.strategy,g.value=L.placement,h.value=L.middlewareData,y.value=$!==!1})}function k(){typeof x=="function"&&(x(),x=void 0)}function p(){if(k(),o===void 0){O();return}if(f.value!=null&&c.value!=null){x=o(f.value,c.value,O);return}}function S(){i.value||(y.value=!1)}return Fe([s,l,r,i],O,{flush:"sync"}),Fe([f,c],p,{flush:"sync"}),Fe(i,S,{flush:"sync"}),Uo()&&jo(k),{x:Ze(d),y:Ze(v),strategy:Ze(m),placement:Ze(g),middlewareData:Ze(h),isPositioned:Ze(y),floatingStyles:B,update:O}}function vi(e){return e==null}function mi(e,n){return vi(e)?!1:Array.isArray(e)?e.some(t=>Dt(t,n)):Dt(e,n)}function hi({type:e,defaultValue:n,modelValue:t}){const o=t||n;return t!==void 0||n!==void 0?Array.isArray(o)?"multiple":"single":e??"single"}function yi({type:e,defaultValue:n,modelValue:t}){return e||hi({type:e,defaultValue:n,modelValue:t})}function bi({type:e,defaultValue:n}){return n!==void 0?n:e==="single"?void 0:[]}function wi(e,n){const t=M(()=>yi(e)),o=pe(e,"modelValue",n,{defaultValue:bi(e),passive:e.modelValue===void 0,deep:!0});function i(l){if(t.value==="single")o.value=Dt(l,o.value)?void 0:l;else{const r=Array.isArray(o.value)?[...o.value||[]]:[o.value].filter(Boolean);if(mi(r,l)){const u=r.findIndex(f=>Dt(f,l));r.splice(u,1)}else r.push(l);o.value=r}}const s=M(()=>t.value==="single");return{modelValue:o,changeModelValue:i,isSingle:s}}function wt(e){const n=Go({dir:E("ltr")});return M(()=>{var t;return(e==null?void 0:e.value)||((t=n.dir)==null?void 0:t.value)||"ltr"})}const[Bn,xi]=te("AccordionRoot"),ki=T({__name:"AccordionRoot",props:{collapsible:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},dir:{},orientation:{default:"vertical"},unmountOnHide:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},type:{},modelValue:{},defaultValue:{}},emits:["update:modelValue"],setup(e,{emit:n}){const t=e,o=n,{dir:i,disabled:s,unmountOnHide:l}=$e(t),r=wt(i),{modelValue:u,changeModelValue:f,isSingle:c}=wi(t,o),{forwardRef:d,currentElement:v}=F();return xi({disabled:s,direction:r,orientation:t.orientation,parentElement:v,isSingle:c,collapsible:t.collapsible,modelValue:u,changeModelValue:f,unmountOnHide:l}),(m,g)=>(b(),C(a(J),{ref:a(d),"as-child":m.asChild,as:m.as},{default:w(()=>[I(m.$slots,"default",{modelValue:a(u)})]),_:3},8,["as-child","as"]))}}),[xo,Ci]=te("CollapsibleRoot"),Oi=T({__name:"CollapsibleRoot",props:{defaultOpen:{type:Boolean,default:!1},open:{type:Boolean,default:void 0},disabled:{type:Boolean},unmountOnHide:{type:Boolean,default:!0},asChild:{type:Boolean},as:{}},emits:["update:open"],setup(e,{expose:n,emit:t}){const o=e,s=pe(o,"open",t,{defaultValue:o.defaultOpen,passive:o.open===void 0}),{disabled:l,unmountOnHide:r}=$e(o);return Ci({contentId:"",disabled:l,open:s,unmountOnHide:r,onOpenToggle:()=>{l.value||(s.value=!s.value)}}),n({open:s}),F(),(u,f)=>(b(),C(a(J),{as:u.as,"as-child":o.asChild,"data-state":a(s)?"open":"closed","data-disabled":a(l)?"":void 0},{default:w(()=>[I(u.$slots,"default",{open:a(s)})]),_:3},8,["as","as-child","data-state","data-disabled"]))}}),Bi=["INPUT","TEXTAREA"];function Ht(e,n,t,o={}){if(!n||o.enableIgnoredElement&&Bi.includes(n.nodeName))return null;const{arrowKeyOptions:i="both",attributeName:s="[data-reka-collection-item]",itemsArray:l=[],loop:r=!0,dir:u="ltr",preventScroll:f=!0,focus:c=!1}=o,[d,v,m,g,h,y]=[e.key==="ArrowRight",e.key==="ArrowLeft",e.key==="ArrowUp",e.key==="ArrowDown",e.key==="Home",e.key==="End"],B=m||g,x=d||v;if(!h&&!y&&(!B&&!x||i==="vertical"&&x||i==="horizontal"&&B))return null;const O=t?Array.from(t.querySelectorAll(s)):l;if(!O.length)return null;f&&e.preventDefault();let k=null;return x||B?k=ko(O,n,{goForward:B?g:u==="ltr"?d:v,loop:r}):h?k=O.at(0)||null:y&&(k=O.at(-1)||null),c&&(k==null||k.focus()),k}function ko(e,n,t,o=e.length){if(--o===0)return null;const i=e.indexOf(n),s=t.goForward?i+1:i-1;if(!t.loop&&(s<0||s>=e.length))return null;const l=(s+e.length)%e.length,r=e[l];return r?r.hasAttribute("disabled")&&r.getAttribute("disabled")!=="false"?ko(e,r,t,o):r:null}const[Co,Ii]=te("AccordionItem"),Pi=T({__name:"AccordionItem",props:{disabled:{type:Boolean},value:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e,{expose:n}){const t=e,o=Bn(),i=M(()=>o.isSingle.value?t.value===o.modelValue.value:Array.isArray(o.modelValue.value)&&o.modelValue.value.includes(t.value)),s=M(()=>o.disabled.value||t.disabled),l=M(()=>s.value?"":void 0),r=M(()=>i.value?"open":"closed");n({open:i,dataDisabled:l});const{currentRef:u,currentElement:f}=F();Ii({open:i,dataState:r,disabled:s,dataDisabled:l,triggerId:"",currentRef:u,currentElement:f,value:M(()=>t.value)});function c(d){var h;const v=d.target;if(Array.from(((h=o.parentElement.value)==null?void 0:h.querySelectorAll("[data-reka-collection-item]"))??[]).findIndex(y=>y===v)===-1)return null;Ht(d,f.value,o.parentElement.value,{arrowKeyOptions:o.orientation,dir:o.direction.value,focus:!0})}return(d,v)=>(b(),C(a(Oi),{"data-orientation":a(o).orientation,"data-disabled":l.value,"data-state":r.value,disabled:s.value,open:i.value,as:t.as,"as-child":t.asChild,"unmount-on-hide":a(o).unmountOnHide.value,onKeydown:un(c,["up","down","left","right","home","end"])},{default:w(()=>[I(d.$slots,"default",{open:i.value})]),_:3},8,["data-orientation","data-disabled","data-state","disabled","open","as","as-child","unmount-on-hide"]))}}),$i=T({inheritAttrs:!1,__name:"CollapsibleContent",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["contentFound"],setup(e,{emit:n}){const t=e,o=n,i=xo();i.contentId||(i.contentId=ke(void 0,"reka-collapsible-content"));const s=E(),{forwardRef:l,currentElement:r}=F(),u=E(0),f=E(0),c=M(()=>i.open.value),d=E(c.value),v=E();Fe(()=>{var g;return[c.value,(g=s.value)==null?void 0:g.present]},async()=>{await Le();const g=r.value;if(!g)return;v.value=v.value||{transitionDuration:g.style.transitionDuration,animationName:g.style.animationName},g.style.transitionDuration="0s",g.style.animationName="none";const h=g.getBoundingClientRect();f.value=h.height,u.value=h.width,d.value||(g.style.transitionDuration=v.value.transitionDuration,g.style.animationName=v.value.animationName)},{immediate:!0});const m=M(()=>d.value&&i.open.value);return xe(()=>{requestAnimationFrame(()=>{d.value=!1})}),pt(r,"beforematch",g=>{requestAnimationFrame(()=>{i.onOpenToggle(),o("contentFound")})}),(g,h)=>(b(),C(a(Se),{ref_key:"presentRef",ref:s,present:g.forceMount||a(i).open.value,"force-mount":!0},{default:w(({present:y})=>{var B;return[D(a(J),R(g.$attrs,{id:a(i).contentId,ref:a(l),"as-child":t.asChild,as:g.as,hidden:y?void 0:a(i).unmountOnHide.value?"":"until-found","data-state":m.value?void 0:a(i).open.value?"open":"closed","data-disabled":(B=a(i).disabled)!=null&&B.value?"":void 0,style:{"--reka-collapsible-content-height":`${f.value}px`,"--reka-collapsible-content-width":`${u.value}px`}}),{default:w(()=>[!a(i).unmountOnHide.value||y?I(g.$slots,"default",{key:0}):K("",!0)]),_:2},1040,["id","as-child","as","hidden","data-state","data-disabled","style"])]}),_:3},8,["present"]))}}),Si=T({__name:"AccordionContent",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){const n=e,t=Bn(),o=Co();return F(),(i,s)=>(b(),C(a($i),{role:"region","as-child":n.asChild,as:i.as,"force-mount":n.forceMount,"aria-labelledby":a(o).triggerId,"data-state":a(o).dataState.value,"data-disabled":a(o).dataDisabled.value,"data-orientation":a(t).orientation,style:{"--reka-accordion-content-width":"var(--reka-collapsible-content-width)","--reka-accordion-content-height":"var(--reka-collapsible-content-height)"},onContentFound:s[0]||(s[0]=l=>a(t).changeModelValue(a(o).value.value))},{default:w(()=>[I(i.$slots,"default")]),_:3},8,["as-child","as","force-mount","aria-labelledby","data-state","data-disabled","data-orientation"]))}}),Ti=T({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e;F();const t=xo();return(o,i)=>{var s,l;return b(),C(a(J),{type:o.as==="button"?"button":void 0,as:o.as,"as-child":n.asChild,"aria-controls":a(t).contentId,"aria-expanded":a(t).open.value,"data-state":a(t).open.value?"open":"closed","data-disabled":(s=a(t).disabled)!=null&&s.value?"":void 0,disabled:(l=a(t).disabled)==null?void 0:l.value,onClick:a(t).onOpenToggle},{default:w(()=>[I(o.$slots,"default")]),_:3},8,["type","as","as-child","aria-controls","aria-expanded","data-state","data-disabled","disabled","onClick"])}}}),Wn=T({__name:"AccordionTrigger",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e,t=Bn(),o=Co();o.triggerId||(o.triggerId=ke(void 0,"reka-accordion-trigger"));function i(){const s=t.isSingle.value&&o.open.value&&!t.collapsible;o.disabled.value||s||t.changeModelValue(o.value.value)}return(s,l)=>(b(),C(a(Ti),{id:a(o).triggerId,ref:a(o).currentRef,"data-reka-collection-item":"",as:n.as,"as-child":n.asChild,"aria-disabled":a(o).disabled.value||void 0,"aria-expanded":a(o).open.value||!1,"data-disabled":a(o).dataDisabled.value,"data-orientation":a(t).orientation,"data-state":a(o).dataState.value,disabled:a(o).disabled.value,onClick:i},{default:w(()=>[I(s.$slots,"default")]),_:3},8,["id","as","as-child","aria-disabled","aria-expanded","data-disabled","data-orientation","data-state","disabled"]))}}),Li="rovingFocusGroup.onEntryFocus",Di={bubbles:!1,cancelable:!0};function Ai(e,n=!1){const t=Be();for(const o of e)if(o===t||(o.focus({preventScroll:n}),Be()!==t))return}const[ar,_i]=te("RovingFocusGroup"),Ei=T({__name:"RovingFocusGroup",props:{orientation:{default:void 0},dir:{},loop:{type:Boolean,default:!1},currentTabStopId:{},defaultCurrentTabStopId:{},preventScrollOnEntryFocus:{type:Boolean,default:!1},asChild:{type:Boolean},as:{}},emits:["entryFocus","update:currentTabStopId"],setup(e,{expose:n,emit:t}){const o=e,i=t,{loop:s,orientation:l,dir:r}=$e(o),u=wt(r),f=pe(o,"currentTabStopId",i,{defaultValue:o.defaultCurrentTabStopId,passive:o.currentTabStopId===void 0}),c=E(!1),d=E(!1),v=E(0),{getItems:m,CollectionSlot:g}=We({isProvider:!0});function h(B){const x=!d.value;if(B.currentTarget&&B.target===B.currentTarget&&x&&!c.value){const O=new CustomEvent(Li,Di);if(B.currentTarget.dispatchEvent(O),i("entryFocus",O),!O.defaultPrevented){const k=m().map(L=>L.ref).filter(L=>L.dataset.disabled!==""),p=k.find(L=>L.getAttribute("data-active")===""),S=k.find(L=>L.id===f.value),$=[p,S,...k].filter(Boolean);Ai($,o.preventScrollOnEntryFocus)}}d.value=!1}function y(){setTimeout(()=>{d.value=!1},1)}return n({getItems:m}),_i({loop:s,dir:u,orientation:l,currentTabStopId:f,onItemFocus:B=>{f.value=B},onItemShiftTab:()=>{c.value=!0},onFocusableItemAdd:()=>{v.value++},onFocusableItemRemove:()=>{v.value--}}),(B,x)=>(b(),C(a(g),null,{default:w(()=>[D(a(J),{tabindex:c.value||v.value===0?-1:0,"data-orientation":a(l),as:B.as,"as-child":B.asChild,dir:a(u),style:{outline:"none"},onMousedown:x[0]||(x[0]=O=>d.value=!0),onMouseup:y,onFocus:h,onBlur:x[1]||(x[1]=O=>c.value=!1)},{default:w(()=>[I(B.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),[Oo,Ri]=te("PopperRoot"),xt=T({inheritAttrs:!1,__name:"PopperRoot",setup(e){const n=E();return Ri({anchor:n,onAnchorChange:t=>n.value=t}),(t,o)=>I(t.$slots,"default")}}),kt=T({__name:"PopperAnchor",props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){const n=e,{forwardRef:t,currentElement:o}=F(),i=Oo();return Gn(()=>{i.onAnchorChange(n.reference??o.value)}),(s,l)=>(b(),C(a(J),{ref:a(t),as:s.as,"as-child":s.asChild},{default:w(()=>[I(s.$slots,"default")]),_:3},8,["as","as-child"]))}}),Mi={key:0,d:"M0 0L6 6L12 0"},Fi={key:1,d:"M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0"},zi=T({__name:"Arrow",props:{width:{default:10},height:{default:5},rounded:{type:Boolean},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(J),R(n,{width:t.width,height:t.height,viewBox:t.asChild?void 0:"0 0 12 6",preserveAspectRatio:t.asChild?void 0:"none"}),{default:w(()=>[I(t.$slots,"default",{},()=>[t.rounded?(b(),U("path",Fi)):(b(),U("path",Mi))])]),_:3},16,["width","height","viewBox","preserveAspectRatio"]))}});function Vi(e){return e!==null}function Ki(e){return{name:"transformOrigin",options:e,fn(n){var y,B,x;const{placement:t,rects:o,middlewareData:i}=n,l=((y=i.arrow)==null?void 0:y.centerOffset)!==0,r=l?0:e.arrowWidth,u=l?0:e.arrowHeight,[f,c]=an(t),d={start:"0%",center:"50%",end:"100%"}[c],v=(((B=i.arrow)==null?void 0:B.x)??0)+r/2,m=(((x=i.arrow)==null?void 0:x.y)??0)+u/2;let g="",h="";return f==="bottom"?(g=l?d:`${v}px`,h=`${-u}px`):f==="top"?(g=l?d:`${v}px`,h=`${o.floating.height+u}px`):f==="right"?(g=`${-u}px`,h=l?d:`${m}px`):f==="left"&&(g=`${o.floating.width+u}px`,h=l?d:`${m}px`),{data:{x:g,y:h}}}}}function an(e){const[n,t="center"]=e.split("-");return[n,t]}function qi(e){const n=E(),t=M(()=>{var i;return((i=n.value)==null?void 0:i.width)??0}),o=M(()=>{var i;return((i=n.value)==null?void 0:i.height)??0});return xe(()=>{const i=Yn(e);if(i){n.value={width:i.offsetWidth,height:i.offsetHeight};const s=new ResizeObserver(l=>{if(!Array.isArray(l)||!l.length)return;const r=l[0];let u,f;if("borderBoxSize"in r){const c=r.borderBoxSize,d=Array.isArray(c)?c[0]:c;u=d.inlineSize,f=d.blockSize}else u=i.offsetWidth,f=i.offsetHeight;n.value={width:u,height:f}});return s.observe(i,{box:"border-box"}),()=>s.unobserve(i)}else n.value=void 0}),{width:t,height:o}}const Bo={side:"bottom",sideOffset:0,align:"center",alignOffset:0,arrowPadding:0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:"partial",hideWhenDetached:!1,positionStrategy:"fixed",updatePositionStrategy:"optimized",prioritizePosition:!1},[Ni,Hi]=te("PopperContent"),Wt=T({inheritAttrs:!1,__name:"PopperContent",props:Xn({side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},{...Bo}),emits:["placed"],setup(e,{emit:n}){const t=e,o=n,i=Oo(),{forwardRef:s,currentElement:l}=F(),r=E(),u=E(),{width:f,height:c}=qi(u),d=M(()=>t.side+(t.align!=="center"?`-${t.align}`:"")),v=M(()=>typeof t.collisionPadding=="number"?t.collisionPadding:{top:0,right:0,bottom:0,left:0,...t.collisionPadding}),m=M(()=>Array.isArray(t.collisionBoundary)?t.collisionBoundary:[t.collisionBoundary]),g=M(()=>({padding:v.value,boundary:m.value.filter(Vi),altBoundary:m.value.length>0})),h=Yo(()=>[ii({mainAxis:t.sideOffset+c.value,alignmentAxis:t.alignOffset}),t.prioritizePosition&&t.avoidCollisions&&Nn({...g.value}),t.avoidCollisions&&si({mainAxis:!0,crossAxis:!!t.prioritizePosition,limiter:t.sticky==="partial"?di():void 0,...g.value}),!t.prioritizePosition&&t.avoidCollisions&&Nn({...g.value}),li({...g.value,apply:({elements:_,rects:N,availableWidth:H,availableHeight:V})=>{const{width:q,height:G}=N.reference,W=_.floating.style;W.setProperty("--reka-popper-available-width",`${H}px`),W.setProperty("--reka-popper-available-height",`${V}px`),W.setProperty("--reka-popper-anchor-width",`${q}px`),W.setProperty("--reka-popper-anchor-height",`${G}px`)}}),u.value&&pi({element:u.value,padding:t.arrowPadding}),Ki({arrowWidth:f.value,arrowHeight:c.value}),t.hideWhenDetached&&ri({strategy:"referenceHidden",...g.value})]),y=M(()=>t.reference??i.anchor.value),{floatingStyles:B,placement:x,isPositioned:O,middlewareData:k}=gi(y,r,{strategy:t.positionStrategy,placement:d,whileElementsMounted:(..._)=>ai(..._,{layoutShift:!t.disableUpdateOnLayoutShift,animationFrame:t.updatePositionStrategy==="always"}),middleware:h}),p=M(()=>an(x.value)[0]),S=M(()=>an(x.value)[1]);Gn(()=>{O.value&&o("placed")});const $=M(()=>{var _;return((_=k.value.arrow)==null?void 0:_.centerOffset)!==0}),L=E("");Ae(()=>{l.value&&(L.value=window.getComputedStyle(l.value).zIndex)});const P=M(()=>{var _;return((_=k.value.arrow)==null?void 0:_.x)??0}),A=M(()=>{var _;return((_=k.value.arrow)==null?void 0:_.y)??0});return Hi({placedSide:p,onArrowChange:_=>u.value=_,arrowX:P,arrowY:A,shouldHideArrow:$}),(_,N)=>{var H,V,q;return b(),U("div",{ref_key:"floatingRef",ref:r,"data-reka-popper-content-wrapper":"",style:Jn({...a(B),transform:a(O)?a(B).transform:"translate(0, -200%)",minWidth:"max-content",zIndex:L.value,"--reka-popper-transform-origin":[(H=a(k).transformOrigin)==null?void 0:H.x,(V=a(k).transformOrigin)==null?void 0:V.y].join(" "),...((q=a(k).hide)==null?void 0:q.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}})},[D(a(J),R({ref:a(s)},_.$attrs,{"as-child":t.asChild,as:_.as,"data-side":p.value,"data-align":S.value,style:{animation:a(O)?void 0:"none"}}),{default:w(()=>[I(_.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","style"])],4)}}}),Wi={top:"bottom",right:"left",bottom:"top",left:"right"},Ut=T({inheritAttrs:!1,__name:"PopperArrow",props:{width:{},height:{},rounded:{type:Boolean},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const{forwardRef:n}=F(),t=Ni(),o=M(()=>Wi[t.placedSide.value]);return(i,s)=>{var l,r,u,f;return b(),U("span",{ref:c=>{a(t).onArrowChange(c)},style:Jn({position:"absolute",left:(l=a(t).arrowX)!=null&&l.value?`${(r=a(t).arrowX)==null?void 0:r.value}px`:void 0,top:(u=a(t).arrowY)!=null&&u.value?`${(f=a(t).arrowY)==null?void 0:f.value}px`:void 0,[o.value]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a(t).placedSide.value],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a(t).placedSide.value],visibility:a(t).shouldHideArrow.value?"hidden":void 0})},[D(zi,R(i.$attrs,{ref:a(n),style:{display:"block"},as:i.as,"as-child":i.asChild,rounded:i.rounded,width:i.width,height:i.height}),{default:w(()=>[I(i.$slots,"default")]),_:3},16,["as","as-child","rounded","width","height"])],4)}}});function Ui(e){const n=Mt("",1e3);return{search:n,handleTypeaheadSearch:(i,s)=>{n.value=n.value+i;{const l=Be(),r=s.map(v=>{var m,g;return{...v,textValue:((m=v.value)==null?void 0:m.textValue)??((g=v.ref.textContent)==null?void 0:g.trim())??""}}),u=r.find(v=>v.ref===l),f=r.map(v=>v.textValue),c=Gi(f,n.value,u==null?void 0:u.textValue),d=r.find(v=>v.textValue===c);return d&&d.ref.focus(),d==null?void 0:d.ref}},resetTypeahead:()=>{n.value=""}}}function ji(e,n){return e.map((t,o)=>e[(n+o)%e.length])}function Gi(e,n,t){const i=n.length>1&&Array.from(n).every(f=>f===n[0])?n[0]:n,s=t?e.indexOf(t):-1;let l=ji(e,Math.max(s,0));i.length===1&&(l=l.filter(f=>f!==t));const u=l.find(f=>f.toLowerCase().startsWith(i.toLowerCase()));return u!==t?u:void 0}const Yi=T({__name:"MenuArrow",props:{width:{},height:{},rounded:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){const n=e;return(t,o)=>(b(),C(a(Ut),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}});function Xi(){const e=E(!1);return xe(()=>{pt("keydown",()=>{e.value=!0},{capture:!0,passive:!0}),pt(["pointerdown","pointermove"],()=>{e.value=!1},{capture:!0,passive:!0})}),e}const Ji=Xo(Xi),[Ye,Io]=te(["MenuRoot","MenuSub"],"MenuContext"),[Ct,Zi]=te("MenuRoot"),Qi=T({__name:"MenuRoot",props:{open:{type:Boolean,default:!1},dir:{},modal:{type:Boolean,default:!0}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n,{modal:i,dir:s}=$e(t),l=wt(s),r=pe(t,"open",o),u=E(),f=Ji();return Io({open:r,onOpenChange:c=>{r.value=c},content:u,onContentChange:c=>{u.value=c}}),Zi({onClose:()=>{r.value=!1},isUsingKeyboardRef:f,dir:l,modal:i}),(c,d)=>(b(),C(a(xt),null,{default:w(()=>[I(c.$slots,"default")]),_:3}))}});let Xt=0;function Po(){Ae(e=>{if(!Zt)return;const n=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",n[0]??Un()),document.body.insertAdjacentElement("beforeend",n[1]??Un()),Xt++,e(()=>{Xt===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(t=>t.remove()),Xt--})})}function Un(){const e=document.createElement("span");return e.setAttribute("data-reka-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}const[In,es]=te("MenuContent"),Pn=T({__name:"MenuContentImpl",props:Xn({loop:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},disableOutsideScroll:{type:Boolean},trapFocus:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},{...Bo}),emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus","dismiss"],setup(e,{emit:n}){const t=e,o=n,i=Ye(),s=Ct(),{trapFocus:l,disableOutsidePointerEvents:r,loop:u}=$e(t);Po(),lo(r.value);const f=E(""),c=E(0),d=E(0),v=E(null),m=E("right"),g=E(0),h=E(null),y=E(),{forwardRef:B,currentElement:x}=F(),{handleTypeaheadSearch:O}=Ui();Fe(x,P=>{i.onContentChange(P)}),Ft(()=>{window.clearTimeout(c.value)});function k(P){var _,N;return m.value===((_=v.value)==null?void 0:_.side)&&ua(P,(N=v.value)==null?void 0:N.area)}async function p(P){var A;o("openAutoFocus",P),!P.defaultPrevented&&(P.preventDefault(),(A=x.value)==null||A.focus({preventScroll:!0}))}function S(P){var W;if(P.defaultPrevented)return;const _=P.target.closest("[data-reka-menu-content]")===P.currentTarget,N=P.ctrlKey||P.altKey||P.metaKey,H=P.key.length===1,V=Ht(P,Be(),x.value,{loop:u.value,arrowKeyOptions:"vertical",dir:s==null?void 0:s.dir.value,focus:!0,attributeName:"[data-reka-collection-item]:not([data-disabled])"});if(V)return V==null?void 0:V.focus();if(P.code==="Space")return;const q=((W=y.value)==null?void 0:W.getItems())??[];if(_&&(P.key==="Tab"&&P.preventDefault(),!N&&H&&O(P.key,q)),P.target!==x.value||!da.includes(P.key))return;P.preventDefault();const G=[...q.map(Z=>Z.ref)];ca.includes(P.key)&&G.reverse(),fa(G)}function $(P){var A,_;(_=(A=P==null?void 0:P.currentTarget)==null?void 0:A.contains)!=null&&_.call(A,P.target)||(window.clearTimeout(c.value),f.value="")}function L(P){var N;if(!vt(P))return;const A=P.target,_=g.value!==P.clientX;if((N=P==null?void 0:P.currentTarget)!=null&&N.contains(A)&&_){const H=P.clientX>g.value?"right":"left";m.value=H,g.value=P.clientX}}return es({onItemEnter:P=>!!k(P),onItemLeave:P=>{var A;k(P)||((A=x.value)==null||A.focus(),h.value=null)},onTriggerLeave:P=>!!k(P),searchRef:f,pointerGraceTimerRef:d,onPointerGraceIntentChange:P=>{v.value=P}}),(P,A)=>(b(),C(a(uo),{"as-child":"",trapped:a(l),onMountAutoFocus:p,onUnmountAutoFocus:A[7]||(A[7]=_=>o("closeAutoFocus",_))},{default:w(()=>[D(a(yt),{"as-child":"","disable-outside-pointer-events":a(r),onEscapeKeyDown:A[2]||(A[2]=_=>o("escapeKeyDown",_)),onPointerDownOutside:A[3]||(A[3]=_=>o("pointerDownOutside",_)),onFocusOutside:A[4]||(A[4]=_=>o("focusOutside",_)),onInteractOutside:A[5]||(A[5]=_=>o("interactOutside",_)),onDismiss:A[6]||(A[6]=_=>o("dismiss"))},{default:w(()=>[D(a(Ei),{ref_key:"rovingFocusGroupRef",ref:y,"current-tab-stop-id":h.value,"onUpdate:currentTabStopId":A[0]||(A[0]=_=>h.value=_),"as-child":"",orientation:"vertical",dir:a(s).dir.value,loop:a(u),onEntryFocus:A[1]||(A[1]=_=>{o("entryFocus",_),a(s).isUsingKeyboardRef.value||_.preventDefault()})},{default:w(()=>[D(a(Wt),{ref:a(B),role:"menu",as:P.as,"as-child":P.asChild,"aria-orientation":"vertical","data-reka-menu-content":"","data-state":a(ro)(a(i).open.value),dir:a(s).dir.value,side:P.side,"side-offset":P.sideOffset,align:P.align,"align-offset":P.alignOffset,"avoid-collisions":P.avoidCollisions,"collision-boundary":P.collisionBoundary,"collision-padding":P.collisionPadding,"arrow-padding":P.arrowPadding,"prioritize-position":P.prioritizePosition,"position-strategy":P.positionStrategy,"update-position-strategy":P.updatePositionStrategy,sticky:P.sticky,"hide-when-detached":P.hideWhenDetached,reference:P.reference,onKeydown:S,onBlur:$,onPointermove:L},{default:w(()=>[I(P.$slots,"default")]),_:3},8,["as","as-child","data-state","dir","side","side-offset","align","align-offset","avoid-collisions","collision-boundary","collision-padding","arrow-padding","prioritize-position","position-strategy","update-position-strategy","sticky","hide-when-detached","reference"])]),_:3},8,["current-tab-stop-id","dir","loop"])]),_:3},8,["disable-outside-pointer-events"])]),_:3},8,["trapped"]))}}),$o=T({inheritAttrs:!1,__name:"MenuItemImpl",props:{disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},setup(e){const n=e,t=In(),{forwardRef:o}=F(),{CollectionItem:i}=We(),s=E(!1);async function l(u){if(!u.defaultPrevented&&vt(u)){if(n.disabled)t.onItemLeave(u);else if(!t.onItemEnter(u)){const c=u.currentTarget;c==null||c.focus({preventScroll:!0})}}}async function r(u){await Le(),!u.defaultPrevented&&vt(u)&&t.onItemLeave(u)}return(u,f)=>(b(),C(a(i),{value:{textValue:u.textValue}},{default:w(()=>[D(a(J),R({ref:a(o),role:"menuitem",tabindex:"-1"},u.$attrs,{as:u.as,"as-child":u.asChild,"aria-disabled":u.disabled||void 0,"data-disabled":u.disabled?"":void 0,"data-highlighted":s.value?"":void 0,onPointermove:l,onPointerleave:r,onFocus:f[0]||(f[0]=async c=>{await Le(),!(c.defaultPrevented||u.disabled)&&(s.value=!0)}),onBlur:f[1]||(f[1]=async c=>{await Le(),!c.defaultPrevented&&(s.value=!1)})}),{default:w(()=>[I(u.$slots,"default")]),_:3},16,["as","as-child","aria-disabled","data-disabled","data-highlighted"])]),_:3},8,["value"]))}}),$n=T({__name:"MenuItem",props:{disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select"],setup(e,{emit:n}){const t=e,o=n,{forwardRef:i,currentElement:s}=F(),l=Ct(),r=In(),u=E(!1);async function f(){const c=s.value;if(!t.disabled&&c){const d=new CustomEvent(ga,{bubbles:!0,cancelable:!0});o("select",d),await Le(),d.defaultPrevented?u.value=!1:l.onClose()}}return(c,d)=>(b(),C($o,R(t,{ref:a(i),onClick:f,onPointerdown:d[0]||(d[0]=()=>{u.value=!0}),onPointerup:d[1]||(d[1]=async v=>{var m;await Le(),!v.defaultPrevented&&(u.value||(m=v.currentTarget)==null||m.click())}),onKeydown:d[2]||(d[2]=async v=>{const m=a(r).searchRef.value!=="";c.disabled||m&&v.key===" "||a(pa).includes(v.key)&&(v.currentTarget.click(),v.preventDefault())})}),{default:w(()=>[I(c.$slots,"default")]),_:3},16))}}),[ts,So]=te(["MenuCheckboxItem","MenuRadioItem"],"MenuItemIndicatorContext"),ns=T({__name:"MenuItemIndicator",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{default:"span"}},setup(e){const n=ts({modelValue:E(!1)});return(t,o)=>(b(),C(a(Se),{present:t.forceMount||a(Qt)(a(n).modelValue.value)||a(n).modelValue.value===!0},{default:w(()=>[D(a(J),{as:t.as,"as-child":t.asChild,"data-state":a(mn)(a(n).modelValue.value)},{default:w(()=>[I(t.$slots,"default")]),_:3},8,["as","as-child","data-state"])]),_:3},8,["present"]))}}),os=T({__name:"MenuCheckboxItem",props:{modelValue:{type:[Boolean,String],default:!1},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select","update:modelValue"],setup(e,{emit:n}){const t=e,o=n,i=pe(t,"modelValue",o);return So({modelValue:i}),(s,l)=>(b(),C($n,R({role:"menuitemcheckbox"},t,{"aria-checked":a(Qt)(a(i))?"mixed":a(i),"data-state":a(mn)(a(i)),onSelect:l[0]||(l[0]=async r=>{o("select",r),a(Qt)(a(i))?i.value=!0:i.value=!a(i)})}),{default:w(()=>[I(s.$slots,"default",{modelValue:a(i)})]),_:3},16,["aria-checked","data-state"]))}}),as=T({__name:"MenuRootContentModal",props:{loop:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=Q(t,o),s=Ye(),{forwardRef:l,currentElement:r}=F();return co(r),(u,f)=>(b(),C(Pn,R(a(i),{ref:a(l),"trap-focus":a(s).open.value,"disable-outside-pointer-events":a(s).open.value,"disable-outside-scroll":!0,onDismiss:f[0]||(f[0]=c=>a(s).onOpenChange(!1)),onFocusOutside:f[1]||(f[1]=ze(c=>o("focusOutside",c),["prevent"]))}),{default:w(()=>[I(u.$slots,"default")]),_:3},16,["trap-focus","disable-outside-pointer-events"]))}}),is=T({__name:"MenuRootContentNonModal",props:{loop:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const i=Q(e,n),s=Ye();return(l,r)=>(b(),C(Pn,R(a(i),{"trap-focus":!1,"disable-outside-pointer-events":!1,"disable-outside-scroll":!1,onDismiss:r[0]||(r[0]=u=>a(s).onOpenChange(!1))}),{default:w(()=>[I(l.$slots,"default")]),_:3},16))}}),ss=T({__name:"MenuContent",props:{forceMount:{type:Boolean},loop:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const i=Q(e,n),s=Ye(),l=Ct();return(r,u)=>(b(),C(a(Se),{present:r.forceMount||a(s).open.value},{default:w(()=>[a(l).modal.value?(b(),C(as,j(R({key:0},{...r.$attrs,...a(i)})),{default:w(()=>[I(r.$slots,"default")]),_:3},16)):(b(),C(is,j(R({key:1},{...r.$attrs,...a(i)})),{default:w(()=>[I(r.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),To=T({__name:"MenuGroup",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e;return(t,o)=>(b(),C(a(J),R({role:"group"},n),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),ls=T({__name:"MenuLabel",props:{asChild:{type:Boolean},as:{default:"div"}},setup(e){const n=e;return(t,o)=>(b(),C(a(J),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),rs=T({__name:"MenuPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const n=e;return(t,o)=>(b(),C(a(zt),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),[us,ds]=te("MenuRadioGroup"),cs=T({__name:"MenuRadioGroup",props:{modelValue:{default:""},asChild:{type:Boolean},as:{}},emits:["update:modelValue"],setup(e,{emit:n}){const t=e,i=pe(t,"modelValue",n);return ds({modelValue:i,onValueChange:s=>{i.value=s}}),(s,l)=>(b(),C(To,j(Y(t)),{default:w(()=>[I(s.$slots,"default",{modelValue:a(i)})]),_:3},16))}}),fs=T({__name:"MenuRadioItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select"],setup(e,{emit:n}){const t=e,o=n,{value:i}=$e(t),s=us(),l=M(()=>s.modelValue.value===(i==null?void 0:i.value));return So({modelValue:l}),(r,u)=>(b(),C($n,R({role:"menuitemradio"},t,{"aria-checked":l.value,"data-state":a(mn)(l.value),onSelect:u[0]||(u[0]=async f=>{o("select",f),a(s).onValueChange(a(i))})}),{default:w(()=>[I(r.$slots,"default")]),_:3},16,["aria-checked","data-state"]))}}),ps=T({__name:"MenuSeparator",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e;return(t,o)=>(b(),C(a(J),R(n,{role:"separator","aria-orientation":"horizontal"}),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),[Lo,gs]=te("MenuSub"),vs=T({__name:"MenuSub",props:{open:{type:Boolean,default:void 0}},emits:["update:open"],setup(e,{emit:n}){const t=e,i=pe(t,"open",n,{defaultValue:!1,passive:t.open===void 0}),s=Ye(),l=E(),r=E();return Ae(u=>{(s==null?void 0:s.open.value)===!1&&(i.value=!1),u(()=>i.value=!1)}),Io({open:i,onOpenChange:u=>{i.value=u},content:r,onContentChange:u=>{r.value=u}}),gs({triggerId:"",contentId:"",trigger:l,onTriggerChange:u=>{l.value=u}}),(u,f)=>(b(),C(a(xt),null,{default:w(()=>[I(u.$slots,"default")]),_:3}))}}),ms=T({__name:"MenuSubContent",props:{forceMount:{type:Boolean},loop:{type:Boolean},sideOffset:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean,default:!0},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const i=Q(e,n),s=Ye(),l=Ct(),r=Lo(),{forwardRef:u,currentElement:f}=F();return r.contentId||(r.contentId=ke(void 0,"reka-menu-sub-content")),(c,d)=>(b(),C(a(Se),{present:c.forceMount||a(s).open.value},{default:w(()=>[D(Pn,R(a(i),{id:a(r).contentId,ref:a(u),"aria-labelledby":a(r).triggerId,align:"start",side:a(l).dir.value==="rtl"?"left":"right","disable-outside-pointer-events":!1,"disable-outside-scroll":!1,"trap-focus":!1,onOpenAutoFocus:d[0]||(d[0]=ze(v=>{var m;a(l).isUsingKeyboardRef.value&&((m=a(f))==null||m.focus())},["prevent"])),onCloseAutoFocus:d[1]||(d[1]=ze(()=>{},["prevent"])),onFocusOutside:d[2]||(d[2]=v=>{v.defaultPrevented||v.target!==a(r).trigger.value&&a(s).onOpenChange(!1)}),onEscapeKeyDown:d[3]||(d[3]=v=>{a(l).onClose(),v.preventDefault()}),onKeydown:d[4]||(d[4]=v=>{var h,y;const m=(h=v.currentTarget)==null?void 0:h.contains(v.target),g=a(va)[a(l).dir.value].includes(v.key);m&&g&&(a(s).onOpenChange(!1),(y=a(r).trigger.value)==null||y.focus(),v.preventDefault())})}),{default:w(()=>[I(c.$slots,"default")]),_:3},16,["id","aria-labelledby","side"])]),_:3},8,["present"]))}}),Do=T({__name:"MenuAnchor",props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){const n=e;return(t,o)=>(b(),C(a(kt),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),hs=T({__name:"MenuSubTrigger",props:{disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},setup(e){const n=e,t=Ye(),o=Ct(),i=Lo(),s=In(),l=E(null);i.triggerId||(i.triggerId=ke(void 0,"reka-menu-sub-trigger"));function r(){l.value&&window.clearTimeout(l.value),l.value=null}Ft(()=>{r()});function u(d){!vt(d)||s.onItemEnter(d)||!n.disabled&&!t.open.value&&!l.value&&(s.onPointerGraceIntentChange(null),l.value=window.setTimeout(()=>{t.onOpenChange(!0),r()},100))}async function f(d){var m,g;if(!vt(d))return;r();const v=(m=t.content.value)==null?void 0:m.getBoundingClientRect();if(v!=null&&v.width){const h=(g=t.content.value)==null?void 0:g.dataset.side,y=h==="right",B=y?-5:5,x=v[y?"left":"right"],O=v[y?"right":"left"];s.onPointerGraceIntentChange({area:[{x:d.clientX+B,y:d.clientY},{x,y:v.top},{x:O,y:v.top},{x:O,y:v.bottom},{x,y:v.bottom}],side:h}),window.clearTimeout(s.pointerGraceTimerRef.value),s.pointerGraceTimerRef.value=window.setTimeout(()=>s.onPointerGraceIntentChange(null),300)}else{if(s.onTriggerLeave(d))return;s.onPointerGraceIntentChange(null)}}async function c(d){var m;const v=s.searchRef.value!=="";n.disabled||v&&d.key===" "||ma[o.dir.value].includes(d.key)&&(t.onOpenChange(!0),await Le(),(m=t.content.value)==null||m.focus(),d.preventDefault())}return(d,v)=>(b(),C(Do,{"as-child":""},{default:w(()=>[D($o,R(n,{id:a(i).triggerId,ref:m=>{var g;(g=a(i))==null||g.onTriggerChange(m==null?void 0:m.$el)},"aria-haspopup":"menu","aria-expanded":a(t).open.value,"aria-controls":a(i).contentId,"data-state":a(ro)(a(t).open.value),onClick:v[0]||(v[0]=async m=>{n.disabled||m.defaultPrevented||(m.currentTarget.focus(),a(t).open.value||a(t).onOpenChange(!0))}),onPointermove:u,onPointerleave:f,onKeydown:c}),{default:w(()=>[I(d.$slots,"default")]),_:3},16,["id","aria-expanded","aria-controls","data-state"])]),_:3}))}}),[Xe,ys]=te("PopoverRoot"),bs=T({__name:"PopoverRoot",props:{defaultOpen:{type:Boolean,default:!1},open:{type:Boolean,default:void 0},modal:{type:Boolean,default:!1}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n,{modal:i}=$e(t),s=pe(t,"open",o,{defaultValue:t.defaultOpen,passive:t.open===void 0}),l=E(),r=E(!1);return ys({contentId:"",triggerId:"",modal:i,open:s,onOpenChange:u=>{s.value=u},onOpenToggle:()=>{s.value=!s.value},triggerElement:l,hasCustomAnchor:r}),(u,f)=>(b(),C(a(xt),null,{default:w(()=>[I(u.$slots,"default",{open:a(s)})]),_:3}))}}),ws=T({__name:"PopoverAnchor",props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){const n=e;F();const t=Xe();return Jo(()=>{t.hasCustomAnchor.value=!0}),Ft(()=>{t.hasCustomAnchor.value=!1}),(o,i)=>(b(),C(a(kt),j(Y(n)),{default:w(()=>[I(o.$slots,"default")]),_:3},16))}}),xs=T({__name:"PopoverArrow",props:{width:{default:10},height:{default:5},rounded:{type:Boolean},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(Ut),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),ks=T({__name:"PopoverClose",props:{asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e;F();const t=Xe();return(o,i)=>(b(),C(a(J),{type:o.as==="button"?"button":void 0,as:o.as,"as-child":n.asChild,onClick:i[0]||(i[0]=s=>a(t).onOpenChange(!1))},{default:w(()=>[I(o.$slots,"default")]),_:3},8,["type","as","as-child"]))}}),Cs=T({__name:"PopoverPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const n=e;return(t,o)=>(b(),C(a(zt),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),Ao=T({__name:"PopoverContentImpl",props:{trapFocus:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=dn(Zn(t,"trapFocus","disableOutsidePointerEvents")),{forwardRef:s}=F(),l=Xe();return Po(),(r,u)=>(b(),C(a(uo),{"as-child":"",loop:"",trapped:r.trapFocus,onMountAutoFocus:u[5]||(u[5]=f=>o("openAutoFocus",f)),onUnmountAutoFocus:u[6]||(u[6]=f=>o("closeAutoFocus",f))},{default:w(()=>[D(a(yt),{"as-child":"","disable-outside-pointer-events":r.disableOutsidePointerEvents,onPointerDownOutside:u[0]||(u[0]=f=>o("pointerDownOutside",f)),onInteractOutside:u[1]||(u[1]=f=>o("interactOutside",f)),onEscapeKeyDown:u[2]||(u[2]=f=>o("escapeKeyDown",f)),onFocusOutside:u[3]||(u[3]=f=>o("focusOutside",f)),onDismiss:u[4]||(u[4]=f=>a(l).onOpenChange(!1))},{default:w(()=>[D(a(Wt),R(a(i),{id:a(l).contentId,ref:a(s),"data-state":a(l).open.value?"open":"closed","aria-labelledby":a(l).triggerId,style:{"--reka-popover-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-popover-content-available-width":"var(--reka-popper-available-width)","--reka-popover-content-available-height":"var(--reka-popper-available-height)","--reka-popover-trigger-width":"var(--reka-popper-anchor-width)","--reka-popover-trigger-height":"var(--reka-popper-anchor-height)"},role:"dialog"}),{default:w(()=>[I(r.$slots,"default")]),_:3},16,["id","data-state","aria-labelledby"])]),_:3},8,["disable-outside-pointer-events"])]),_:3},8,["trapped"]))}}),Os=T({__name:"PopoverContentModal",props:{side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=Xe(),s=E(!1);lo(!0);const l=Q(t,o),{forwardRef:r,currentElement:u}=F();return co(u),(f,c)=>(b(),C(Ao,R(a(l),{ref:a(r),"trap-focus":a(i).open.value,"disable-outside-pointer-events":"",onCloseAutoFocus:c[0]||(c[0]=ze(d=>{var v;o("closeAutoFocus",d),s.value||(v=a(i).triggerElement.value)==null||v.focus()},["prevent"])),onPointerDownOutside:c[1]||(c[1]=d=>{o("pointerDownOutside",d);const v=d.detail.originalEvent,m=v.button===0&&v.ctrlKey===!0,g=v.button===2||m;s.value=g}),onFocusOutside:c[2]||(c[2]=ze(()=>{},["prevent"]))}),{default:w(()=>[I(f.$slots,"default")]),_:3},16,["trap-focus"]))}}),Bs=T({__name:"PopoverContentNonModal",props:{side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=Xe(),s=E(!1),l=E(!1),r=Q(t,o);return(u,f)=>(b(),C(Ao,R(a(r),{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:f[0]||(f[0]=c=>{var d;o("closeAutoFocus",c),c.defaultPrevented||(s.value||(d=a(i).triggerElement.value)==null||d.focus(),c.preventDefault()),s.value=!1,l.value=!1}),onInteractOutside:f[1]||(f[1]=async c=>{var m;o("interactOutside",c),c.defaultPrevented||(s.value=!0,c.detail.originalEvent.type==="pointerdown"&&(l.value=!0));const d=c.target;((m=a(i).triggerElement.value)==null?void 0:m.contains(d))&&c.preventDefault(),c.detail.originalEvent.type==="focusin"&&l.value&&c.preventDefault()})}),{default:w(()=>[I(u.$slots,"default")]),_:3},16))}}),Is=T({__name:"PopoverContent",props:{forceMount:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=Xe(),s=Q(t,o),{forwardRef:l}=F();return i.contentId||(i.contentId=ke(void 0,"reka-popover-content")),(r,u)=>(b(),C(a(Se),{present:r.forceMount||a(i).open.value},{default:w(()=>[a(i).modal.value?(b(),C(Os,R({key:0},a(s),{ref:a(l)}),{default:w(()=>[I(r.$slots,"default")]),_:3},16)):(b(),C(Bs,R({key:1},a(s),{ref:a(l)}),{default:w(()=>[I(r.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),Ps=T({__name:"PopoverTrigger",props:{asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e,t=Xe(),{forwardRef:o,currentElement:i}=F();return t.triggerId||(t.triggerId=ke(void 0,"reka-popover-trigger")),xe(()=>{t.triggerElement.value=i.value}),(s,l)=>(b(),C(Ne(a(t).hasCustomAnchor.value?a(J):a(kt)),{"as-child":""},{default:w(()=>[D(a(J),{id:a(t).triggerId,ref:a(o),type:s.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":a(t).open.value,"aria-controls":a(t).contentId,"data-state":a(t).open.value?"open":"closed",as:s.as,"as-child":n.asChild,onClick:a(t).onOpenToggle},{default:w(()=>[I(s.$slots,"default")]),_:3},8,["id","type","aria-expanded","aria-controls","data-state","as","as-child","onClick"])]),_:3}))}}),_o=T({__name:"DropdownMenuArrow",props:{width:{default:10},height:{default:5},rounded:{type:Boolean},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(Yi),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),$s=T({__name:"DropdownMenuCheckboxItem",props:{modelValue:{type:[Boolean,String]},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select","update:modelValue"],setup(e,{emit:n}){const t=e,i=cn(n);return F(),(s,l)=>(b(),C(a(os),j(Y({...t,...a(i)})),{default:w(()=>[I(s.$slots,"default")]),_:3},16))}}),[Eo,Ss]=te("DropdownMenuRoot"),Ro=T({__name:"DropdownMenuRoot",props:{defaultOpen:{type:Boolean},open:{type:Boolean,default:void 0},dir:{},modal:{type:Boolean,default:!0}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n;F();const i=pe(t,"open",o,{defaultValue:t.defaultOpen,passive:t.open===void 0}),s=E(),{modal:l,dir:r}=$e(t),u=wt(r);return Ss({open:i,onOpenChange:f=>{i.value=f},onOpenToggle:()=>{i.value=!i.value},triggerId:"",triggerElement:s,contentId:"",modal:l,dir:u}),(f,c)=>(b(),C(a(Qi),{open:a(i),"onUpdate:open":c[0]||(c[0]=d=>fn(i)?i.value=d:null),dir:a(u),modal:a(l)},{default:w(()=>[I(f.$slots,"default",{open:a(i)})]),_:3},8,["open","dir","modal"]))}}),Ts=T({__name:"DropdownMenuContent",props:{forceMount:{type:Boolean},loop:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(e,{emit:n}){const i=Q(e,n);F();const s=Eo(),l=E(!1);function r(u){u.defaultPrevented||(l.value||setTimeout(()=>{var f;(f=s.triggerElement.value)==null||f.focus()},0),l.value=!1,u.preventDefault())}return s.contentId||(s.contentId=ke(void 0,"reka-dropdown-menu-content")),(u,f)=>{var c;return b(),C(a(ss),R(a(i),{id:a(s).contentId,"aria-labelledby":(c=a(s))==null?void 0:c.triggerId,style:{"--reka-dropdown-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-dropdown-menu-content-available-width":"var(--reka-popper-available-width)","--reka-dropdown-menu-content-available-height":"var(--reka-popper-available-height)","--reka-dropdown-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-dropdown-menu-trigger-height":"var(--reka-popper-anchor-height)"},onCloseAutoFocus:r,onInteractOutside:f[0]||(f[0]=d=>{var h;if(d.defaultPrevented)return;const v=d.detail.originalEvent,m=v.button===0&&v.ctrlKey===!0,g=v.button===2||m;(!a(s).modal.value||g)&&(l.value=!0),(h=a(s).triggerElement.value)!=null&&h.contains(d.target)&&d.preventDefault()})}),{default:w(()=>[I(u.$slots,"default")]),_:3},16,["id","aria-labelledby"])}}}),Ls=T({__name:"DropdownMenuGroup",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(To),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),Ds=T({__name:"DropdownMenuItem",props:{disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select"],setup(e,{emit:n}){const t=e,i=cn(n);return F(),(s,l)=>(b(),C(a($n),j(Y({...t,...a(i)})),{default:w(()=>[I(s.$slots,"default")]),_:3},16))}}),As=T({__name:"DropdownMenuItemIndicator",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(ns),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),_s=T({__name:"DropdownMenuLabel",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(ls),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),Es=T({__name:"DropdownMenuPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const n=e;return(t,o)=>(b(),C(a(rs),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),Rs=T({__name:"DropdownMenuRadioGroup",props:{modelValue:{},asChild:{type:Boolean},as:{}},emits:["update:modelValue"],setup(e,{emit:n}){const t=e,i=cn(n);return F(),(s,l)=>(b(),C(a(cs),j(Y({...t,...a(i)})),{default:w(()=>[I(s.$slots,"default")]),_:3},16))}}),Ms=T({__name:"DropdownMenuRadioItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},emits:["select"],setup(e,{emit:n}){const i=Q(e,n);return F(),(s,l)=>(b(),C(a(fs),j(Y(a(i))),{default:w(()=>[I(s.$slots,"default")]),_:3},16))}}),Fs=T({__name:"DropdownMenuSeparator",props:{asChild:{type:Boolean},as:{}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(ps),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),zs=T({__name:"DropdownMenuSub",props:{defaultOpen:{type:Boolean},open:{type:Boolean,default:void 0}},emits:["update:open"],setup(e,{emit:n}){const t=e,i=pe(t,"open",n,{passive:t.open===void 0,defaultValue:t.defaultOpen??!1});return F(),(s,l)=>(b(),C(a(vs),{open:a(i),"onUpdate:open":l[0]||(l[0]=r=>fn(i)?i.value=r:null)},{default:w(()=>[I(s.$slots,"default",{open:a(i)})]),_:3},8,["open"]))}}),Vs=T({__name:"DropdownMenuSubContent",props:{forceMount:{type:Boolean},loop:{type:Boolean},sideOffset:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:n}){const i=Q(e,n);return F(),(s,l)=>(b(),C(a(ms),R(a(i),{style:{"--reka-dropdown-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-dropdown-menu-content-available-width":"var(--reka-popper-available-width)","--reka-dropdown-menu-content-available-height":"var(--reka-popper-available-height)","--reka-dropdown-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-dropdown-menu-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:w(()=>[I(s.$slots,"default")]),_:3},16))}}),Ks=T({__name:"DropdownMenuSubTrigger",props:{disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(hs),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),Mo=T({__name:"DropdownMenuTrigger",props:{disabled:{type:Boolean},asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e,t=Eo(),{forwardRef:o,currentElement:i}=F();return xe(()=>{t.triggerElement=i}),t.triggerId||(t.triggerId=ke(void 0,"reka-dropdown-menu-trigger")),(s,l)=>(b(),C(a(Do),{"as-child":""},{default:w(()=>[D(a(J),{id:a(t).triggerId,ref:a(o),type:s.as==="button"?"button":void 0,"as-child":n.asChild,as:s.as,"aria-haspopup":"menu","aria-expanded":a(t).open.value,"aria-controls":a(t).open.value?a(t).contentId:void 0,"data-disabled":s.disabled?"":void 0,disabled:s.disabled,"data-state":a(t).open.value?"open":"closed",onClick:l[0]||(l[0]=async r=>{var u;!s.disabled&&r.button===0&&r.ctrlKey===!1&&((u=a(t))==null||u.onOpenToggle(),await Le(),a(t).open.value&&r.preventDefault())}),onKeydown:l[1]||(l[1]=un(r=>{s.disabled||(["Enter"," "].includes(r.key)&&a(t).onOpenToggle(),r.key==="ArrowDown"&&a(t).onOpenChange(!0),["Enter"," ","ArrowDown"].includes(r.key)&&r.preventDefault())},["enter","space","arrow-down"]))},{default:w(()=>[I(s.$slots,"default")]),_:3},8,["id","type","as-child","as","aria-expanded","aria-controls","data-disabled","disabled","data-state"])]),_:3}))}}),qs=T({__name:"HoverCardArrow",props:{width:{default:10},height:{default:5},rounded:{type:Boolean},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(Ut),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}});function sn(e){return n=>n.pointerType==="touch"?void 0:e()}function Ns(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});for(;t.nextNode();)n.push(t.currentNode);return n}const[Sn,Hs]=te("HoverCardRoot"),Ws=T({__name:"HoverCardRoot",props:{defaultOpen:{type:Boolean,default:!1},open:{type:Boolean,default:void 0},openDelay:{default:700},closeDelay:{default:300}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n,{openDelay:i,closeDelay:s}=$e(t);F();const l=pe(t,"open",o,{defaultValue:t.defaultOpen,passive:t.open===void 0}),r=E(0),u=E(0),f=E(!1),c=E(!1),d=E(!1),v=E();function m(){clearTimeout(u.value),r.value=window.setTimeout(()=>l.value=!0,i.value)}function g(){clearTimeout(r.value),!f.value&&!c.value&&(u.value=window.setTimeout(()=>l.value=!1,s.value))}function h(){l.value=!1}return Hs({open:l,onOpenChange(y){l.value=y},onOpen:m,onClose:g,onDismiss:h,hasSelectionRef:f,isPointerDownOnContentRef:c,isPointerInTransitRef:d,triggerElement:v}),(y,B)=>(b(),C(a(xt),null,{default:w(()=>[I(y.$slots,"default",{open:a(l)})]),_:3}))}});function Fo(e,n){const t=Mt(!1,300),o=E(null),i=Zo();function s(){o.value=null,t.value=!1}function l(r,u){const f=r.currentTarget,c={x:r.clientX,y:r.clientY},d=Us(c,f.getBoundingClientRect()),v=js(c,d),m=Gs(u.getBoundingClientRect()),g=Xs([...v,...m]);o.value=g,t.value=!0}return Ae(r=>{if(e.value&&n.value){const u=c=>l(c,n.value),f=c=>l(c,e.value);e.value.addEventListener("pointerleave",u),n.value.addEventListener("pointerleave",f),r(()=>{var c,d;(c=e.value)==null||c.removeEventListener("pointerleave",u),(d=n.value)==null||d.removeEventListener("pointerleave",f)})}}),Ae(r=>{var u;if(o.value){const f=c=>{var y,B;if(!o.value||!(c.target instanceof HTMLElement))return;const d=c.target,v={x:c.clientX,y:c.clientY},m=((y=e.value)==null?void 0:y.contains(d))||((B=n.value)==null?void 0:B.contains(d)),g=!Ys(v,o.value),h=!!d.closest("[data-grace-area-trigger]");m?s():(g||h)&&(s(),i.trigger())};(u=e.value)==null||u.ownerDocument.addEventListener("pointermove",f),r(()=>{var c;return(c=e.value)==null?void 0:c.ownerDocument.removeEventListener("pointermove",f)})}}),{isPointerInTransit:t,onPointerExit:i.on}}function Us(e,n){const t=Math.abs(n.top-e.y),o=Math.abs(n.bottom-e.y),i=Math.abs(n.right-e.x),s=Math.abs(n.left-e.x);switch(Math.min(t,o,i,s)){case s:return"left";case i:return"right";case t:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function js(e,n,t=5){const o=[];switch(n){case"top":o.push({x:e.x-t,y:e.y+t},{x:e.x+t,y:e.y+t});break;case"bottom":o.push({x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t});break;case"left":o.push({x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t});break;case"right":o.push({x:e.x-t,y:e.y-t},{x:e.x-t,y:e.y+t});break}return o}function Gs(e){const{top:n,right:t,bottom:o,left:i}=e;return[{x:i,y:n},{x:t,y:n},{x:t,y:o},{x:i,y:o}]}function Ys(e,n){const{x:t,y:o}=e;let i=!1;for(let s=0,l=n.length-1;so!=c>o&&t<(f-r)*(o-u)/(c-u)+r&&(i=!i)}return i}function Xs(e){const n=e.slice();return n.sort((t,o)=>t.xo.x?1:t.yo.y?1:0),Js(n)}function Js(e){if(e.length<=1)return e.slice();const n=[];for(let o=0;o=2;){const s=n[n.length-1],l=n[n.length-2];if((s.x-l.x)*(i.y-l.y)>=(s.y-l.y)*(i.x-l.x))n.pop();else break}n.push(i)}n.pop();const t=[];for(let o=e.length-1;o>=0;o--){const i=e[o];for(;t.length>=2;){const s=t[t.length-1],l=t[t.length-2];if((s.x-l.x)*(i.y-l.y)>=(s.y-l.y)*(i.x-l.x))t.pop();else break}t.push(i)}return t.pop(),n.length===1&&t.length===1&&n[0].x===t[0].x&&n[0].y===t[0].y?n:n.concat(t)}const Zs=T({__name:"HoverCardContentImpl",props:{side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:n}){const t=e,o=n,i=dn(t),{forwardRef:s,currentElement:l}=F(),r=Sn(),{isPointerInTransit:u,onPointerExit:f}=Fo(r.triggerElement,l);Qo(r.isPointerInTransitRef,u,{direction:"rtl"}),f(()=>{r.onClose()});const c=E(!1);let d;Ae(m=>{if(c.value){const g=document.body;d=g.style.userSelect||g.style.webkitUserSelect,g.style.userSelect="none",g.style.webkitUserSelect="none",m(()=>{g.style.userSelect=d,g.style.webkitUserSelect=d})}});function v(){c.value=!1,r.isPointerDownOnContentRef.value=!1,Le(()=>{var g;((g=document.getSelection())==null?void 0:g.toString())!==""&&(r.hasSelectionRef.value=!0)})}return xe(()=>{l.value&&(document.addEventListener("pointerup",v),Ns(l.value).forEach(g=>g.setAttribute("tabindex","-1")))}),Ft(()=>{document.removeEventListener("pointerup",v),r.hasSelectionRef.value=!1,r.isPointerDownOnContentRef.value=!1}),(m,g)=>(b(),C(a(yt),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:g[1]||(g[1]=h=>o("escapeKeyDown",h)),onPointerDownOutside:g[2]||(g[2]=h=>o("pointerDownOutside",h)),onFocusOutside:g[3]||(g[3]=ze(h=>o("focusOutside",h),["prevent"])),onDismiss:a(r).onDismiss},{default:w(()=>[D(a(Wt),R({...a(i),...m.$attrs},{ref:a(s),"data-state":a(r).open.value?"open":"closed",style:{userSelect:c.value?"text":void 0,WebkitUserSelect:c.value?"text":void 0,"--reka-hover-card-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-hover-card-content-available-width":"var(--reka-popper-available-width)","--reka-hover-card-content-available-height":"var(--reka-popper-available-height)","--reka-hover-card-trigger-width":"var(--reka-popper-anchor-width)","--reka-hover-card-trigger-height":"var(--reka-popper-anchor-height)"},onPointerdown:g[0]||(g[0]=h=>{h.currentTarget.contains(h.target)&&(c.value=!0),a(r).hasSelectionRef.value=!1,a(r).isPointerDownOnContentRef.value=!0})}),{default:w(()=>[I(m.$slots,"default")]),_:3},16,["data-state","style"])]),_:3},8,["onDismiss"]))}}),Qs=T({__name:"HoverCardContent",props:{forceMount:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:n}){const i=Q(e,n),{forwardRef:s}=F(),l=Sn();return(r,u)=>(b(),C(a(Se),{present:r.forceMount||a(l).open.value},{default:w(()=>[D(Zs,R(a(i),{ref:a(s),onPointerenter:u[0]||(u[0]=f=>a(sn)(a(l).onOpen)(f))}),{default:w(()=>[I(r.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),el=T({__name:"HoverCardPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const n=e;return(t,o)=>(b(),C(a(zt),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),tl=T({__name:"HoverCardTrigger",props:{reference:{},asChild:{type:Boolean},as:{default:"a"}},setup(e){const{forwardRef:n,currentElement:t}=F(),o=Sn();o.triggerElement=t;function i(){setTimeout(()=>{!o.isPointerInTransitRef.value&&!o.open.value&&o.onClose()},0)}return(s,l)=>(b(),C(a(kt),{"as-child":"",reference:s.reference},{default:w(()=>[D(a(J),{ref:a(n),"as-child":s.asChild,as:s.as,"data-state":a(o).open.value?"open":"closed","data-grace-area-trigger":"",onPointerenter:l[0]||(l[0]=r=>a(sn)(a(o).onOpen)(r)),onPointerleave:l[1]||(l[1]=r=>a(sn)(i)(r)),onFocus:l[2]||(l[2]=r=>a(o).onOpen()),onBlur:l[3]||(l[3]=r=>a(o).onClose())},{default:w(()=>[I(s.$slots,"default")]),_:3},8,["as-child","as","data-state"])]),_:3},8,["reference"]))}});function jt(e){return e?"open":"closed"}function zo(e,n){return`${e}-trigger-${n}`}function Tn(e,n){return`${e}-content-${n}`}const nl="navigationMenu.linkSelect",Lt="navigationMenu.rootContentDismiss";function ln(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const i=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||i?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function Vo(e){const n=Be();return e.some(t=>t===n?!0:(t.focus(),Be()!==n))}function ol(e){return e.forEach(n=>{n.dataset.tabindex=n.getAttribute("tabindex")||"",n.setAttribute("tabindex","-1")}),()=>{e.forEach(n=>{const t=n.dataset.tabindex;n.setAttribute("tabindex",t)})}}function Ko(e){return n=>n.pointerType==="mouse"?e(n):void 0}const[Je,al]=te(["NavigationMenuRoot","NavigationMenuSub"],"NavigationMenuContext"),il=T({__name:"NavigationMenuRoot",props:{modelValue:{default:void 0},defaultValue:{},dir:{},orientation:{default:"horizontal"},delayDuration:{default:200},skipDelayDuration:{default:300},disableClickTrigger:{type:Boolean,default:!1},disableHoverTrigger:{type:Boolean,default:!1},disablePointerLeaveClose:{type:Boolean},unmountOnHide:{type:Boolean,default:!0},asChild:{type:Boolean},as:{default:"nav"}},emits:["update:modelValue"],setup(e,{emit:n}){const t=e,i=pe(t,"modelValue",n,{defaultValue:t.defaultValue??"",passive:t.modelValue===void 0}),s=E(""),{forwardRef:l,currentElement:r}=F(),u=E(),f=E(),c=E(),{getItems:d,CollectionSlot:v}=We({key:"NavigationMenu",isProvider:!0}),{delayDuration:m,skipDelayDuration:g,dir:h,disableClickTrigger:y,disableHoverTrigger:B,unmountOnHide:x}=$e(t),O=wt(h),k=Mt(!1,g),p=M(()=>i.value!==""||k.value?150:m.value),S=ea($=>{typeof $=="string"&&(s.value=i.value,i.value=$)},p);return Ae(()=>{if(!i.value)return;const $=d().map(L=>L.ref);c.value=$.find(L=>L.id.includes(i.value))}),al({isRootMenu:!0,modelValue:i,previousValue:s,baseId:ke(void 0,"reka-navigation-menu"),disableClickTrigger:y,disableHoverTrigger:B,dir:O,unmountOnHide:x,orientation:t.orientation,rootNavigationMenu:r,indicatorTrack:u,activeTrigger:c,onIndicatorTrackChange:$=>{u.value=$},viewport:f,onViewportChange:$=>{f.value=$},onTriggerEnter:$=>{S($)},onTriggerLeave:()=>{k.value=!0,S("")},onContentEnter:()=>{S()},onContentLeave:()=>{t.disablePointerLeaveClose||S("")},onItemSelect:$=>{s.value=i.value,i.value=$},onItemDismiss:()=>{s.value=i.value,i.value=""}}),($,L)=>(b(),C(a(v),null,{default:w(()=>[D(a(J),{ref:a(l),"aria-label":"Main",as:$.as,"as-child":$.asChild,"data-orientation":$.orientation,dir:a(O),"data-reka-navigation-menu":""},{default:w(()=>[I($.$slots,"default",{modelValue:a(i)})]),_:3},8,["as","as-child","data-orientation","dir"])]),_:3}))}}),[Ln,sl]=te("NavigationMenuItem"),ll=T({__name:"NavigationMenuItem",props:{value:{},asChild:{type:Boolean},as:{default:"li"}},setup(e){const n=e;F();const{getItems:t}=We({key:"NavigationMenu"}),o=Je(),i=ke(n.value),s=E(),l=E(),r=Tn(o.baseId,i);let u=()=>({});const f=E(!1);async function c(g="start"){const h=document.getElementById(r);if(h){u();const y=ln(h);y.length&&Vo(g==="start"?y:y.reverse())}}function d(){const g=document.getElementById(r);if(g){const h=ln(g);h.length&&(u=ol(h))}}sl({value:i,contentId:r,triggerRef:s,focusProxyRef:l,wasEscapeCloseRef:f,onEntryKeyDown:c,onFocusProxyEnter:c,onContentFocusOutside:d,onRootContentClose:d});function v(){var g;o.onItemDismiss(),(g=s.value)==null||g.focus()}function m(g){const h=Be();if(g.keyCode===32||g.key==="Enter")if(o.modelValue.value===i){v(),g.preventDefault();return}else{g.target.click(),g.preventDefault();return}const y=t().filter(x=>{var O;return(O=x.ref.parentElement)==null?void 0:O.hasAttribute("data-menu-item")}).map(x=>x.ref);if(!y.includes(h))return;const B=Ht(g,h,void 0,{itemsArray:y,loop:!1});B&&(B==null||B.focus()),g.preventDefault(),g.stopPropagation()}return(g,h)=>(b(),C(a(J),{"as-child":g.asChild,as:g.as,"data-menu-item":"",onKeydown:un(m,["up","down","left","right","home","end","space"])},{default:w(()=>[I(g.$slots,"default")]),_:3},8,["as-child","as"]))}}),rl=T({__name:"NavigationMenuContentImpl",props:{disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:n}){const t=e,o=n,{getItems:i}=We({key:"NavigationMenu"}),{forwardRef:s,currentElement:l}=F(),r=Je(),u=Ln(),f=zo(r.baseId,u.value),c=Tn(r.baseId,u.value),d=E(null),v=M(()=>{const x=i().map(L=>L.ref.id.split("trigger-")[1]);r.dir.value==="rtl"&&x.reverse();const O=x.indexOf(r.modelValue.value),k=x.indexOf(r.previousValue.value),p=u.value===r.modelValue.value,S=k===x.indexOf(u.value);if(!p&&!S)return d.value;const $=(()=>{if(O!==k){if(p&&k!==-1)return O>k?"from-end":"from-start";if(S&&O!==-1)return O>k?"to-start":"to-end"}return null})();return d.value=$,$});function m(x){var k,p;if(o("focusOutside",x),o("interactOutside",x),x.detail.originalEvent.target.hasAttribute("data-navigation-menu-trigger")&&x.preventDefault(),!x.defaultPrevented){u.onContentFocusOutside();const S=x.target;(p=(k=r.rootNavigationMenu)==null?void 0:k.value)!=null&&p.contains(S)&&x.preventDefault()}}function g(x){var O;if(o("pointerDownOutside",x),!x.defaultPrevented){const k=x.target,p=i().some($=>$.ref.contains(k)),S=r.isRootMenu&&((O=r.viewport.value)==null?void 0:O.contains(k));(p||S||!r.isRootMenu)&&x.preventDefault()}}Ae(x=>{const O=l.value;if(r.isRootMenu&&O){const k=()=>{var p;r.onItemDismiss(),u.onRootContentClose(),O.contains(Be())&&((p=u.triggerRef.value)==null||p.focus())};O.addEventListener(Lt,k),x(()=>O.removeEventListener(Lt,k))}});function h(x){var O,k;o("escapeKeyDown",x),x.defaultPrevented||(r.onItemDismiss(),(k=(O=u.triggerRef)==null?void 0:O.value)==null||k.focus(),u.wasEscapeCloseRef.value=!0)}function y(x){var $;if(x.target.closest("[data-reka-navigation-menu]")!==r.rootNavigationMenu.value)return;const O=x.altKey||x.ctrlKey||x.metaKey,k=x.key==="Tab"&&!O,p=ln(x.currentTarget);if(k){const L=Be(),P=p.findIndex(N=>N===L),_=x.shiftKey?p.slice(0,P).reverse():p.slice(P+1,p.length);if(Vo(_))x.preventDefault();else{($=u.focusProxyRef.value)==null||$.focus();return}}const S=Ht(x,Be(),void 0,{itemsArray:p,loop:!1,enableIgnoredElement:!0});S==null||S.focus()}function B(){var O;const x=new Event(Lt,{bubbles:!0,cancelable:!0});(O=l.value)==null||O.dispatchEvent(x)}return(x,O)=>(b(),C(a(yt),R({id:a(c),ref:a(s),"aria-labelledby":a(f),"data-motion":v.value,"data-state":a(jt)(a(r).modelValue.value===a(u).value),"data-orientation":a(r).orientation},t,{onKeydown:y,onEscapeKeyDown:h,onPointerDownOutside:g,onFocusOutside:m,onDismiss:B}),{default:w(()=>[I(x.$slots,"default")]),_:3},16,["id","aria-labelledby","data-motion","data-state","data-orientation"]))}}),ul=T({inheritAttrs:!1,__name:"NavigationMenuContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:n}){const t=e,o=n,i=Q(Zn(t,"forceMount"),o),{forwardRef:s}=F(),l=Je(),r=Ln(),u=M(()=>r.value===l.modelValue.value),f=M(()=>l.viewport.value&&!l.modelValue.value&&l.previousValue.value?l.previousValue.value===r.value:!1);return(c,d)=>(b(),C(Qn,{to:a(Zt)&&a(l).viewport.value?a(l).viewport.value:"body",disabled:a(Zt)&&a(l).viewport.value?!a(l).viewport.value:!0},[D(a(Se),{present:c.forceMount||u.value||f.value,"force-mount":!a(l).unmountOnHide.value},{default:w(({present:v})=>[D(rl,R({ref:a(s),"data-state":a(jt)(u.value),style:{pointerEvents:!u.value&&a(l).isRootMenu?"none":void 0}},{...c.$attrs,...a(i)},{hidden:!v,onPointerenter:d[0]||(d[0]=m=>a(l).onContentEnter(a(r).value)),onPointerleave:d[1]||(d[1]=m=>a(Ko)(()=>a(l).onContentLeave())(m)),onPointerDownOutside:d[2]||(d[2]=m=>o("pointerDownOutside",m)),onFocusOutside:d[3]||(d[3]=m=>o("focusOutside",m)),onInteractOutside:d[4]||(d[4]=m=>o("interactOutside",m))}),{default:w(()=>[I(c.$slots,"default")]),_:2},1040,["data-state","style","hidden"])]),_:3},8,["present","force-mount"])],8,["to","disabled"]))}}),dl=T({inheritAttrs:!1,__name:"NavigationMenuIndicator",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(e){const n=e,{forwardRef:t}=F(),o=Je(),i=E(),s=M(()=>o.orientation==="horizontal"),l=M(()=>!!o.modelValue.value),{activeTrigger:r}=o;function u(){r.value&&(i.value={size:s.value?r.value.offsetWidth:r.value.offsetHeight,position:s.value?r.value.offsetLeft:r.value.offsetTop})}return Ae(()=>{o.modelValue.value&&u()}),At(r,u),At(o.indicatorTrack,u),(f,c)=>a(o).indicatorTrack.value?(b(),C(Qn,{key:0,to:a(o).indicatorTrack.value},[D(a(Se),{present:f.forceMount||l.value},{default:w(()=>[D(a(J),R({ref:a(t),"aria-hidden":"true","data-state":l.value?"visible":"hidden","data-orientation":a(o).orientation,"as-child":n.asChild,as:f.as,style:{...i.value?{"--reka-navigation-menu-indicator-size":`${i.value.size}px`,"--reka-navigation-menu-indicator-position":`${i.value.position}px`}:{}}},f.$attrs),{default:w(()=>[I(f.$slots,"default")]),_:3},16,["data-state","data-orientation","as-child","as","style"])]),_:3},8,["present"])],8,["to"])):K("",!0)}}),Jt=T({__name:"NavigationMenuLink",props:{active:{type:Boolean},asChild:{type:Boolean},as:{default:"a"}},emits:["select"],setup(e,{emit:n}){const t=e,o=n,{CollectionItem:i}=We({key:"NavigationMenu"});F();async function s(l){var u;const r=new CustomEvent(nl,{bubbles:!0,cancelable:!0,detail:{originalEvent:l}});if(o("select",r),!r.defaultPrevented&&!l.metaKey){const f=new CustomEvent(Lt,{bubbles:!0,cancelable:!0});(u=l.target)==null||u.dispatchEvent(f)}}return(l,r)=>(b(),C(a(i),null,{default:w(()=>[D(a(J),{as:l.as,"data-active":l.active?"":void 0,"aria-current":l.active?"page":void 0,"as-child":t.asChild,onClick:s},{default:w(()=>[I(l.$slots,"default")]),_:3},8,["as","data-active","aria-current","as-child"])]),_:3}))}}),cl=T({inheritAttrs:!1,__name:"NavigationMenuList",props:{asChild:{type:Boolean},as:{default:"ul"}},setup(e){const n=e,t=Je(),{forwardRef:o,currentElement:i}=F();return xe(()=>{t.onIndicatorTrackChange(i.value)}),(s,l)=>(b(),C(a(J),{ref:a(o),style:{position:"relative"}},{default:w(()=>[D(a(J),R(s.$attrs,{"as-child":n.asChild,as:s.as,"data-orientation":a(t).orientation}),{default:w(()=>[I(s.$slots,"default")]),_:3},16,["as-child","as","data-orientation"])]),_:3},512))}}),fl=["aria-owns"],pl=T({inheritAttrs:!1,__name:"NavigationMenuTrigger",props:{disabled:{type:Boolean},asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e,t=Je(),o=Ln(),{CollectionItem:i}=We({key:"NavigationMenu"}),{forwardRef:s,currentElement:l}=F(),r=E(""),u=E(""),f=Mt(!1,300),c=E(!1),d=M(()=>o.value===t.modelValue.value);xe(()=>{o.triggerRef=l,r.value=zo(t.baseId,o.value),u.value=Tn(t.baseId,o.value)});function v(){t.disableHoverTrigger.value||(c.value=!1,o.wasEscapeCloseRef.value=!1)}function m(O){if(!t.disableHoverTrigger.value&&O.pointerType==="mouse"){if(n.disabled||c.value||o.wasEscapeCloseRef.value||f.value)return;t.onTriggerEnter(o.value),f.value=!0}}function g(O){if(!t.disableHoverTrigger.value&&O.pointerType==="mouse"){if(n.disabled)return;t.onTriggerLeave(),f.value=!1}}function h(O){O.pointerType==="mouse"&&t.disableClickTrigger.value||f.value||(d.value?t.onItemSelect(""):t.onItemSelect(o.value),c.value=d.value)}function y(O){const p={horizontal:"ArrowDown",vertical:t.dir.value==="rtl"?"ArrowLeft":"ArrowRight"}[t.orientation];d.value&&O.key===p&&(o.onEntryKeyDown(),O.preventDefault(),O.stopPropagation())}function B(O){o.focusProxyRef.value=Yn(O)}function x(O){const k=document.getElementById(o.contentId),p=O.relatedTarget,S=p===l.value,$=k==null?void 0:k.contains(p);(S||!$)&&o.onFocusProxyEnter(S?"start":"end")}return(O,k)=>(b(),U(ie,null,[D(a(i),null,{default:w(()=>[D(a(J),R({id:r.value,ref:a(s),disabled:O.disabled,"data-disabled":O.disabled?"":void 0,"data-state":a(jt)(d.value),"data-navigation-menu-trigger":"","aria-expanded":d.value,"aria-controls":u.value,"as-child":n.asChild,as:O.as},O.$attrs,{onPointerenter:v,onPointermove:m,onPointerleave:g,onClick:h,onKeydown:y}),{default:w(()=>[I(O.$slots,"default")]),_:3},16,["id","disabled","data-disabled","data-state","aria-expanded","aria-controls","as-child","as"])]),_:3}),d.value?(b(),U(ie,{key:0},[D(a(pn),{ref:B,"aria-hidden":"true",tabindex:0,onFocus:x}),a(t).viewport?(b(),U("span",{key:0,"aria-owns":u.value},null,8,fl)):K("",!0)],64)):K("",!0)],64))}}),gl=T({inheritAttrs:!1,__name:"NavigationMenuViewport",props:{forceMount:{type:Boolean},align:{default:"center"},asChild:{type:Boolean},as:{}},setup(e){var m;const n=e,{forwardRef:t,currentElement:o}=F(),i=Je(),{activeTrigger:s,rootNavigationMenu:l,modelValue:r}=i,u=E(),f=E(),c=M(()=>!!i.modelValue.value);Fe(o,()=>{i.onViewportChange(o.value)});const d=E();Fe([r,c],()=>{o.value&&requestAnimationFrame(()=>{var h;const g=(h=o.value)==null?void 0:h.querySelector("[data-state=open]");d.value=g})},{immediate:!0,flush:"post"});function v(){if(d.value&&s.value&&l.value){const g=document.documentElement.offsetWidth,h=document.documentElement.offsetHeight,y=l.value.getBoundingClientRect(),B=s.value.getBoundingClientRect(),{offsetWidth:x,offsetHeight:O}=d.value,k=B.left-y.left,p=B.top-y.top;let S=null,$=null;switch(n.align){case"start":S=k,$=p;break;case"end":S=k-x+B.width,$=p-O+B.height;break;default:S=k-x/2+B.width/2,$=p-O/2+B.height/2}const L=10;S+y.leftg-L&&(S-=P-g+L,Sh-L&&($-=A-h+L,${d.value&&(u.value={width:d.value.offsetWidth,height:d.value.offsetHeight},v())}),At([(m=globalThis.document)==null?void 0:m.body,l],()=>{v()}),(g,h)=>(b(),C(a(Se),{present:g.forceMount||c.value,"force-mount":!a(i).unmountOnHide.value,onAfterLeave:h[2]||(h[2]=()=>{u.value=void 0,f.value=void 0})},{default:w(({present:y})=>{var B,x,O,k;return[D(a(J),R(g.$attrs,{ref:a(t),as:g.as,"as-child":g.asChild,"data-state":a(jt)(c.value),"data-orientation":a(i).orientation,style:{pointerEvents:!c.value&&a(i).isRootMenu?"none":void 0,"--reka-navigation-menu-viewport-width":u.value?`${(B=u.value)==null?void 0:B.width}px`:void 0,"--reka-navigation-menu-viewport-height":u.value?`${(x=u.value)==null?void 0:x.height}px`:void 0,"--reka-navigation-menu-viewport-left":f.value?`${(O=f.value)==null?void 0:O.left}px`:void 0,"--reka-navigation-menu-viewport-top":f.value?`${(k=f.value)==null?void 0:k.top}px`:void 0},hidden:!y,onPointerenter:h[0]||(h[0]=p=>a(i).onContentEnter(a(i).modelValue.value)),onPointerleave:h[1]||(h[1]=p=>a(Ko)(()=>a(i).onContentLeave())(p))}),{default:w(()=>[I(g.$slots,"default")]),_:2},1040,["as","as-child","data-state","data-orientation","style","hidden"])]}),_:3},8,["present","force-mount"]))}}),vl=T({__name:"TooltipArrow",props:{width:{default:10},height:{default:5},asChild:{type:Boolean},as:{default:"svg"}},setup(e){const n=e;return F(),(t,o)=>(b(),C(a(Ut),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),qo="tooltip.open",[Gt,ml]=te("TooltipRoot"),hl=T({__name:"TooltipRoot",props:{defaultOpen:{type:Boolean,default:!1},open:{type:Boolean,default:void 0},delayDuration:{default:void 0},disableHoverableContent:{type:Boolean,default:void 0},disableClosingTrigger:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},ignoreNonKeyboardFocus:{type:Boolean,default:void 0}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n;F();const i=gn(),s=M(()=>t.disableHoverableContent??i.disableHoverableContent.value),l=M(()=>t.disableClosingTrigger??i.disableClosingTrigger.value),r=M(()=>t.disabled??i.disabled.value),u=M(()=>t.delayDuration??i.delayDuration.value),f=M(()=>t.ignoreNonKeyboardFocus??i.ignoreNonKeyboardFocus.value),c=pe(t,"open",o,{defaultValue:t.defaultOpen,passive:t.open===void 0});Fe(c,O=>{i.onClose&&(O?(i.onOpen(),document.dispatchEvent(new CustomEvent(qo))):i.onClose())});const d=E(!1),v=E(),m=M(()=>c.value?d.value?"delayed-open":"instant-open":"closed"),{start:g,stop:h}=ta(()=>{d.value=!0,c.value=!0},u,{immediate:!1});function y(){h(),d.value=!1,c.value=!0}function B(){h(),c.value=!1}function x(){g()}return ml({contentId:"",open:c,stateAttribute:m,trigger:v,onTriggerChange(O){v.value=O},onTriggerEnter(){i.isOpenDelayed.value?x():y()},onTriggerLeave(){s.value?B():h()},onOpen:y,onClose:B,disableHoverableContent:s,disableClosingTrigger:l,disabled:r,ignoreNonKeyboardFocus:f}),(O,k)=>(b(),C(a(xt),null,{default:w(()=>[I(O.$slots,"default",{open:a(c)})]),_:3}))}}),No=T({__name:"TooltipContentImpl",props:{ariaLabel:{},asChild:{type:Boolean},as:{},side:{default:"top"},sideOffset:{default:0},align:{default:"center"},alignOffset:{},avoidCollisions:{type:Boolean,default:!0},collisionBoundary:{default:()=>[]},collisionPadding:{default:0},arrowPadding:{default:0},sticky:{default:"partial"},hideWhenDetached:{type:Boolean,default:!1},positionStrategy:{},updatePositionStrategy:{}},emits:["escapeKeyDown","pointerDownOutside"],setup(e,{emit:n}){const t=e,o=n,i=Gt(),{forwardRef:s}=F(),l=Ue(),r=M(()=>{var c;return(c=l.default)==null?void 0:c.call(l,{})}),u=M(()=>{var v;if(t.ariaLabel)return t.ariaLabel;let c="";function d(m){typeof m.children=="string"&&m.type!==na?c+=m.children:Array.isArray(m.children)&&m.children.forEach(g=>d(g))}return(v=r.value)==null||v.forEach(m=>d(m)),c}),f=M(()=>{const{ariaLabel:c,...d}=t;return d});return xe(()=>{pt(window,"scroll",c=>{const d=c.target;d!=null&&d.contains(i.trigger.value)&&i.onClose()}),pt(window,qo,i.onClose)}),(c,d)=>(b(),C(a(yt),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:d[0]||(d[0]=v=>o("escapeKeyDown",v)),onPointerDownOutside:d[1]||(d[1]=v=>{var m;a(i).disableClosingTrigger.value&&((m=a(i).trigger.value)!=null&&m.contains(v.target))&&v.preventDefault(),o("pointerDownOutside",v)}),onFocusOutside:d[2]||(d[2]=ze(()=>{},["prevent"])),onDismiss:d[3]||(d[3]=v=>a(i).onClose())},{default:w(()=>[D(a(Wt),R({ref:a(s),"data-state":a(i).stateAttribute.value},{...c.$attrs,...f.value},{style:{"--reka-tooltip-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-tooltip-content-available-width":"var(--reka-popper-available-width)","--reka-tooltip-content-available-height":"var(--reka-popper-available-height)","--reka-tooltip-trigger-width":"var(--reka-popper-anchor-width)","--reka-tooltip-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:w(()=>[I(c.$slots,"default"),D(a(pn),{id:a(i).contentId,role:"tooltip"},{default:w(()=>[Oe(ce(u.value),1)]),_:1},8,["id"])]),_:3},16,["data-state"])]),_:3}))}}),yl=T({__name:"TooltipContentHoverable",props:{ariaLabel:{},asChild:{type:Boolean},as:{},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{}},setup(e){const t=dn(e),{forwardRef:o,currentElement:i}=F(),{trigger:s,onClose:l}=Gt(),r=gn(),{isPointerInTransit:u,onPointerExit:f}=Fo(s,i);return r.isPointerInTransitRef=u,f(()=>{l()}),(c,d)=>(b(),C(No,R({ref:a(o)},a(t)),{default:w(()=>[I(c.$slots,"default")]),_:3},16))}}),bl=T({__name:"TooltipContent",props:{forceMount:{type:Boolean},ariaLabel:{},asChild:{type:Boolean},as:{},side:{default:"top"},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{}},emits:["escapeKeyDown","pointerDownOutside"],setup(e,{emit:n}){const t=e,o=n,i=Gt(),s=Q(t,o),{forwardRef:l}=F();return(r,u)=>(b(),C(a(Se),{present:r.forceMount||a(i).open.value},{default:w(()=>[(b(),C(Ne(a(i).disableHoverableContent.value?No:yl),R({ref:a(l)},a(s)),{default:w(()=>[I(r.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),wl=T({__name:"TooltipPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(e){const n=e;return(t,o)=>(b(),C(a(zt),j(Y(n)),{default:w(()=>[I(t.$slots,"default")]),_:3},16))}}),xl=T({__name:"TooltipTrigger",props:{reference:{},asChild:{type:Boolean},as:{default:"button"}},setup(e){const n=e,t=Gt(),o=gn();t.contentId||(t.contentId=ke(void 0,"reka-tooltip-content"));const{forwardRef:i,currentElement:s}=F(),l=E(!1),r=E(!1),u=M(()=>t.disabled.value?{}:{click:h,focus:m,pointermove:d,pointerleave:v,pointerdown:c,blur:g});xe(()=>{t.onTriggerChange(s.value)});function f(){setTimeout(()=>{l.value=!1},1)}function c(){t.open&&!t.disableClosingTrigger.value&&t.onClose(),l.value=!0,document.addEventListener("pointerup",f,{once:!0})}function d(y){y.pointerType!=="touch"&&!r.value&&!o.isPointerInTransitRef.value&&(t.onTriggerEnter(),r.value=!0)}function v(){t.onTriggerLeave(),r.value=!1}function m(y){var B,x;l.value||t.ignoreNonKeyboardFocus.value&&!((x=(B=y.target).matches)!=null&&x.call(B,":focus-visible"))||t.onOpen()}function g(){t.onClose()}function h(){t.disableClosingTrigger.value||t.onClose()}return(y,B)=>(b(),C(a(kt),{"as-child":"",reference:y.reference},{default:w(()=>[D(a(J),R({ref:a(i),"aria-describedby":a(t).open.value?a(t).contentId:void 0,"data-state":a(t).stateAttribute.value,as:y.as,"as-child":n.asChild,"data-grace-area-trigger":""},vn(u.value)),{default:w(()=>[I(y.$slots,"default")]),_:3},16,["aria-describedby","data-state","as","as-child"])]),_:3},8,["reference"]))}});function rn(e={}){const{inheritAttrs:n=!0}=e,t=jn(),o=T({setup(s,{slots:l}){return()=>{t.value=l.default}}}),i=T({inheritAttrs:n,props:e.props,setup(s,{attrs:l,slots:r}){return()=>{var u;t.value;const f=(u=t.value)==null?void 0:u.call(t,{...e.props==null?kl(l):s,$slots:r});return n&&(f==null?void 0:f.length)===1?f[0]:f}}});return oa({define:o,reuse:i},[o,i])}function kl(e){const n={};for(const t in e)n[aa(t)]=e[t];return n}const me={Root:Ro,Trigger:Mo,Portal:Es,Content:Ts,Arrow:_o,Item:Ds,Group:Ls,Separator:Fs,CheckboxItem:$s,ItemIndicator:As,Label:_s,RadioGroup:Rs,RadioItem:Ms,Sub:zs,SubContent:Vs,SubTrigger:Ks},Cl={Root:Ws,Trigger:tl,Portal:el,Content:Qs,Arrow:qs},Ol={Root:bs,Trigger:Ps,Portal:Cs,Content:Is,Arrow:xs,Close:ks,Anchor:ws},Bl={slots:{content:"bg-default shadow-lg rounded-md ring ring-default data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-popover-content-transform-origin) focus:outline-none pointer-events-auto",arrow:"fill-default"}},Il={__name:"Popover",props:{mode:{type:String,required:!1,default:"click"},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},modal:{type:Boolean,required:!1},openDelay:{type:Number,required:!1,default:0},closeDelay:{type:Number,required:!1,default:0}},emits:["close:prevent","update:open"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),s=je(),l=t.mode==="hover"?nt(t,"defaultOpen","open","openDelay","closeDelay"):nt(t,"defaultOpen","open","modal"),r=Q(l,o),u=Vt(re(()=>t.portal)),f=re(()=>gt(t.content,{side:"bottom",sideOffset:8,collisionPadding:8})),c=M(()=>t.dismissible?{}:["pointerDownOutside","interactOutside","escapeKeyDown"].reduce((h,y)=>(h[y]=B=>{B.preventDefault(),o("close:prevent")},h),{})),d=re(()=>t.arrow),v=M(()=>{var g;return ge({extend:ge(Bl),...((g=s.ui)==null?void 0:g.popover)||{}})({side:f.value.side})}),m=M(()=>t.mode==="hover"?Cl:Ol);return(g,h)=>(b(),C(a(m).Root,j(Y(a(r))),{default:w(({open:y})=>[i.default?(b(),C(a(m).Trigger,{key:0,"as-child":"",class:z(t.class)},{default:w(()=>[I(g.$slots,"default",{open:y})]),_:2},1032,["class"])):K("",!0),"Anchor"in m.value&&i.anchor?(b(),C(a(m).Anchor,{key:1,"as-child":""},{default:w(()=>[I(g.$slots,"anchor")]),_:3})):K("",!0),D(a(m).Portal,j(Y(a(u))),{default:w(()=>{var B;return[D(a(m).Content,R(f.value,{class:v.value.content({class:[!i.default&&t.class,(B=t.ui)==null?void 0:B.content]})},vn(c.value)),{default:w(()=>{var x;return[I(g.$slots,"content"),e.arrow?(b(),C(a(m).Arrow,R({key:0},d.value,{class:v.value.arrow({class:(x=t.ui)==null?void 0:x.arrow})}),null,16,["class"])):K("",!0)]}),_:3},16,["class"])]}),_:3},16)]),_:3},16))}},$t={meta:"",ctrl:"",alt:"",win:"⊞",command:"⌘",shift:"⇧",control:"⌃",option:"⌥",enter:"↵",delete:"⌦",backspace:"⌫",escape:"⎋",tab:"⇥",capslock:"⇪",arrowup:"↑",arrowright:"→",arrowdown:"↓",arrowleft:"←",pageup:"⇞",pagedown:"⇟",home:"↖",end:"↘"},Pl=()=>{const e=M(()=>navigator&&navigator.userAgent&&navigator.userAgent.match(/Macintosh;/)),n=sa({meta:" ",alt:" ",ctrl:" "});xe(()=>{n.meta=e.value?$t.command:"Ctrl",n.ctrl=e.value?$t.control:"Ctrl",n.alt=e.value?$t.option:"Alt"});function t(o){if(o)return["meta","alt","ctrl"].includes(o)?n[o]:$t[o]||o.toUpperCase()}return{macOS:e,getKbdKey:t}},$l=ia(Pl),Sl={base:"inline-flex items-center justify-center px-1 rounded-sm font-medium font-sans",variants:{variant:{solid:"bg-inverted text-inverted",outline:"bg-default text-highlighted ring ring-inset ring-accented",subtle:"bg-elevated text-default ring ring-inset ring-accented"},size:{sm:"h-4 min-w-[16px] text-[10px]",md:"h-5 min-w-[20px] text-[11px]",lg:"h-6 min-w-[24px] text-[12px]"}},defaultVariants:{variant:"outline",size:"md"}},Ho={__name:"Kbd",props:{as:{type:null,required:!1,default:"kbd"},value:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},class:{type:null,required:!1}},setup(e){const n=e,{getKbdKey:t}=$l(),o=je(),i=M(()=>{var s;return ge({extend:ge(Sl),...((s=o.ui)==null?void 0:s.kbd)||{}})});return(s,l)=>(b(),C(a(J),{as:e.as,class:z(i.value({variant:e.variant,size:e.size,class:n.class}))},{default:w(()=>[I(s.$slots,"default",{},()=>[Oe(ce(a(t)(e.value)),1)])]),_:3},8,["as","class"]))}},Tl={slots:{content:"flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto",arrow:"fill-default",text:"truncate",kbds:"hidden lg:inline-flex items-center shrink-0 gap-0.5 before:content-['·'] before:me-0.5",kbdsSize:"sm"}},Ll={__name:"Tooltip",props:{text:{type:String,required:!1},kbds:{type:Array,required:!1},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},delayDuration:{type:Number,required:!1},disableHoverableContent:{type:Boolean,required:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),s=je(),l=Q(nt(t,"defaultOpen","open","delayDuration","disableHoverableContent","disableClosingTrigger","disabled","ignoreNonKeyboardFocus"),o),r=Vt(re(()=>t.portal)),u=re(()=>gt(t.content,{side:"bottom",sideOffset:8,collisionPadding:8})),f=re(()=>t.arrow),c=M(()=>{var d;return ge({extend:ge(Tl),...((d=s.ui)==null?void 0:d.tooltip)||{}})({side:u.value.side})});return(d,v)=>(b(),C(a(hl),j(Y(a(l))),{default:w(({open:m})=>[i.default?(b(),C(a(xl),R({key:0},d.$attrs,{"as-child":"",class:t.class}),{default:w(()=>[I(d.$slots,"default",{open:m})]),_:2},1040,["class"])):K("",!0),D(a(wl),j(Y(a(r))),{default:w(()=>{var g;return[D(a(bl),R(u.value,{class:c.value.content({class:[!i.default&&t.class,(g=t.ui)==null?void 0:g.content]})}),{default:w(()=>{var h;return[I(d.$slots,"content",{},()=>{var y,B,x;return[e.text?(b(),U("span",{key:0,class:z(c.value.text({class:(y=t.ui)==null?void 0:y.text}))},ce(e.text),3)):K("",!0),(B=e.kbds)!=null&&B.length?(b(),U("span",{key:1,class:z(c.value.kbds({class:(x=t.ui)==null?void 0:x.kbds}))},[(b(!0),U(ie,null,ye(e.kbds,(O,k)=>{var p;return b(),C(Ho,R({key:k,size:((p=t.ui)==null?void 0:p.kbdsSize)||c.value.kbdsSize()},{ref_for:!0},typeof O=="string"?{value:O}:O),null,16,["size"])}),128))],2)):K("",!0)]}),e.arrow?(b(),C(a(vl),R({key:0},f.value,{class:c.value.arrow({class:(h=t.ui)==null?void 0:h.arrow})}),null,16,["class"])):K("",!0)]}),_:3},16,["class"])]}),_:3},16)]),_:3},16))}},Dl={slots:{root:"relative flex gap-1.5 [&>div]:min-w-0",list:"isolate min-w-0",label:"w-full flex items-center gap-1.5 font-semibold text-xs/5 text-highlighted px-2.5 py-1.5",item:"min-w-0",link:"group relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",linkLeadingIcon:"shrink-0 size-5",linkLeadingAvatar:"shrink-0",linkLeadingAvatarSize:"2xs",linkTrailing:"group ms-auto inline-flex gap-1.5 items-center",linkTrailingBadge:"shrink-0",linkTrailingBadgeSize:"sm",linkTrailingIcon:"size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",linkLabel:"truncate",linkLabelExternalIcon:"inline-block size-3 align-top text-dimmed",childList:"isolate",childLabel:"text-xs text-highlighted",childItem:"",childLink:"group relative size-full flex items-start text-start text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",childLinkWrapper:"min-w-0",childLinkIcon:"size-5 shrink-0",childLinkLabel:"truncate",childLinkLabelExternalIcon:"inline-block size-3 align-top text-dimmed",childLinkDescription:"text-muted",separator:"px-2 h-px bg-border",viewportWrapper:"absolute top-full left-0 flex w-full",viewport:"relative overflow-hidden bg-default shadow-lg rounded-md ring ring-default h-(--reka-navigation-menu-viewport-height) w-full transition-[width,height,left] duration-200 origin-[top_center] data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] z-[1]",content:"",indicator:"absolute data-[state=visible]:animate-[fade-in_100ms_ease-out] data-[state=hidden]:animate-[fade-out_100ms_ease-in] data-[state=hidden]:opacity-0 bottom-0 z-[2] w-(--reka-navigation-menu-indicator-size) translate-x-(--reka-navigation-menu-indicator-position) flex h-2.5 items-end justify-center overflow-hidden transition-[translate,width] duration-200",arrow:"relative top-[50%] size-2.5 rotate-45 border border-default bg-default z-[1] rounded-xs"},variants:{color:{primary:{link:"focus-visible:before:ring-primary",childLink:"focus-visible:before:ring-primary"},secondary:{link:"focus-visible:before:ring-secondary",childLink:"focus-visible:before:ring-secondary"},success:{link:"focus-visible:before:ring-success",childLink:"focus-visible:before:ring-success"},info:{link:"focus-visible:before:ring-info",childLink:"focus-visible:before:ring-info"},warning:{link:"focus-visible:before:ring-warning",childLink:"focus-visible:before:ring-warning"},error:{link:"focus-visible:before:ring-error",childLink:"focus-visible:before:ring-error"},neutral:{link:"focus-visible:before:ring-inverted",childLink:"focus-visible:before:ring-inverted"}},highlightColor:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{pill:"",link:""},orientation:{horizontal:{root:"items-center justify-between",list:"flex items-center",item:"py-2",link:"px-2.5 py-1.5 before:inset-x-px before:inset-y-0",childList:"grid p-2",childLink:"px-3 py-2 gap-2 before:inset-x-px before:inset-y-0",childLinkLabel:"font-medium",content:"absolute top-0 left-0 w-full"},vertical:{root:"flex-col",link:"flex-row px-2.5 py-1.5 before:inset-y-px before:inset-x-0",childLabel:"px-1.5 py-0.5",childLink:"p-1.5 gap-1.5 before:inset-y-px before:inset-x-0"}},contentOrientation:{horizontal:{viewportWrapper:"justify-center",content:"data-[motion=from-start]:animate-[enter-from-left_200ms_ease] data-[motion=from-end]:animate-[enter-from-right_200ms_ease] data-[motion=to-start]:animate-[exit-to-left_200ms_ease] data-[motion=to-end]:animate-[exit-to-right_200ms_ease]"},vertical:{viewport:"sm:w-(--reka-navigation-menu-viewport-width) left-(--reka-navigation-menu-viewport-left)"}},active:{true:{childLink:"before:bg-elevated text-highlighted",childLinkIcon:"text-default"},false:{link:"text-muted",linkLeadingIcon:"text-dimmed",childLink:["hover:before:bg-elevated/50 text-default hover:text-highlighted","transition-colors before:transition-colors"],childLinkIcon:["text-dimmed group-hover:text-default","transition-colors"]}},disabled:{true:{link:"cursor-not-allowed opacity-75"}},highlight:{true:""},level:{true:""},collapsed:{true:""}},compoundVariants:[{orientation:"horizontal",contentOrientation:"horizontal",class:{childList:"grid-cols-2 gap-2"}},{orientation:"horizontal",contentOrientation:"vertical",class:{childList:"gap-1",content:"w-60"}},{orientation:"vertical",collapsed:!1,class:{childList:"ms-5 border-s border-default",childItem:"ps-1.5 -ms-px",content:"data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden"}},{orientation:"vertical",collapsed:!0,class:{link:"px-1.5",content:"shadow-sm rounded-sm min-h-6 p-1"}},{orientation:"horizontal",highlight:!0,class:{link:["after:absolute after:-bottom-2 after:inset-x-2.5 after:block after:h-px after:rounded-full","after:transition-colors"]}},{orientation:"vertical",highlight:!0,level:!0,class:{link:["after:absolute after:-start-1.5 after:inset-y-0.5 after:block after:w-px after:rounded-full","after:transition-colors"]}},{disabled:!1,active:!1,variant:"pill",class:{link:["hover:text-highlighted hover:before:bg-elevated/50","transition-colors before:transition-colors"],linkLeadingIcon:["group-hover:text-default","transition-colors"]}},{disabled:!1,active:!1,variant:"pill",orientation:"horizontal",class:{link:"data-[state=open]:text-highlighted",linkLeadingIcon:"group-data-[state=open]:text-default"}},{disabled:!1,variant:"pill",highlight:!0,orientation:"horizontal",class:{link:"data-[state=open]:before:bg-elevated/50"}},{disabled:!1,variant:"pill",highlight:!1,active:!1,orientation:"horizontal",class:{link:"data-[state=open]:before:bg-elevated/50"}},{color:"primary",variant:"pill",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"pill",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"pill",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"pill",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"pill",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"pill",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"pill",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{variant:"pill",active:!0,highlight:!1,class:{link:"before:bg-elevated"}},{variant:"pill",active:!0,highlight:!0,disabled:!1,class:{link:["hover:before:bg-elevated/50","before:transition-colors"]}},{disabled:!1,active:!1,variant:"link",class:{link:["hover:text-highlighted","transition-colors"],linkLeadingIcon:["group-hover:text-default","transition-colors"]}},{disabled:!1,active:!1,variant:"link",orientation:"horizontal",class:{link:"data-[state=open]:text-highlighted",linkLeadingIcon:"group-data-[state=open]:text-default"}},{color:"primary",variant:"link",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"link",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"link",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"link",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"link",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"link",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"link",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{highlightColor:"primary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-primary"}},{highlightColor:"secondary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-secondary"}},{highlightColor:"success",highlight:!0,level:!0,active:!0,class:{link:"after:bg-success"}},{highlightColor:"info",highlight:!0,level:!0,active:!0,class:{link:"after:bg-info"}},{highlightColor:"warning",highlight:!0,level:!0,active:!0,class:{link:"after:bg-warning"}},{highlightColor:"error",highlight:!0,level:!0,active:!0,class:{link:"after:bg-error"}},{highlightColor:"neutral",highlight:!0,level:!0,active:!0,class:{link:"after:bg-inverted"}}],defaultVariants:{color:"primary",highlightColor:"primary",variant:"pill"}},Al={__name:"NavigationMenu",props:{as:{type:null,required:!1},trailingIcon:{type:String,required:!1},externalIcon:{type:[Boolean,String],required:!1,default:!0},items:{type:null,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},collapsed:{type:Boolean,required:!1},tooltip:{type:[Boolean,Object],required:!1},popover:{type:[Boolean,Object],required:!1},highlight:{type:Boolean,required:!1},highlightColor:{type:null,required:!1},content:{type:Object,required:!1},contentOrientation:{type:null,required:!1,default:"horizontal"},arrow:{type:Boolean,required:!1},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:null,required:!1},modelValue:{type:String,required:!1},defaultValue:{type:String,required:!1},delayDuration:{type:Number,required:!1,default:0},disableClickTrigger:{type:Boolean,required:!1},disableHoverTrigger:{type:Boolean,required:!1},skipDelayDuration:{type:Number,required:!1},disablePointerLeaveClose:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},disabled:{type:Boolean,required:!1},type:{type:String,required:!1,default:"multiple"},collapsible:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),s=je(),l=Q(M(()=>({as:t.as,modelValue:t.modelValue,defaultValue:t.defaultValue,delayDuration:t.delayDuration,skipDelayDuration:t.skipDelayDuration,orientation:t.orientation,disableClickTrigger:t.disableClickTrigger,disableHoverTrigger:t.disableHoverTrigger,disablePointerLeaveClose:t.disablePointerLeaveClose,unmountOnHide:t.unmountOnHide})),o),r=Q(nt(t,"collapsible","disabled","type","unmountOnHide"),o),u=re(()=>t.content),f=re(()=>gt(typeof t.tooltip=="boolean"?{}:t.tooltip,{delayDuration:0,content:{side:"right"}})),c=re(()=>gt(typeof t.popover=="boolean"?{}:t.popover,{mode:"hover",content:{side:"right",align:"start",alignOffset:2}})),[d,v]=rn(),[m,g]=rn({props:{item:Object,index:Number,level:Number}}),h=M(()=>{var x;return ge({extend:ge(Dl),...((x=s.ui)==null?void 0:x.navigationMenu)||{}})({orientation:t.orientation,contentOrientation:t.orientation==="vertical"?void 0:t.contentOrientation,collapsed:t.collapsed,color:t.color,variant:t.variant,highlight:t.highlight,highlightColor:t.highlightColor||t.color})}),y=M(()=>{var x;return(x=t.items)!=null&&x.length?eo(t.items)?t.items:[t.items]:[]});function B(x){function O(p,S=0){return p.reduce(($,L,P)=>{var A;return(L.defaultOpen||L.open)&&$.push(L.value||(S>0?`item-${S}-${P}`:`item-${P}`)),(A=L.children)!=null&&A.length&&$.push(...O(L.children,S+1)),$},[])}const k=O(x);return t.type==="single"?k[0]:k}return(x,O)=>{var k;return b(),U(ie,null,[D(a(d),null,{default:w(({item:p,active:S,index:$})=>[I(x.$slots,p.slot||"item",{item:p,index:$},()=>{var L,P,A,_,N,H,V,q,G;return[I(x.$slots,p.slot?`${p.slot}-leading`:"item-leading",{item:p,active:S,index:$},()=>{var W,Z,ee,ne,ue,ve;return[p.avatar?(b(),C(to,R({key:0,size:((W=p.ui)==null?void 0:W.linkLeadingAvatarSize)||((Z=t.ui)==null?void 0:Z.linkLeadingAvatarSize)||h.value.linkLeadingAvatarSize()},p.avatar,{class:h.value.linkLeadingAvatar({class:[(ee=t.ui)==null?void 0:ee.linkLeadingAvatar,(ne=p.ui)==null?void 0:ne.linkLeadingAvatar],active:S,disabled:!!p.disabled})}),null,16,["size","class"])):p.icon?(b(),C(le,{key:1,name:p.icon,class:z(h.value.linkLeadingIcon({class:[(ue=t.ui)==null?void 0:ue.linkLeadingIcon,(ve=p.ui)==null?void 0:ve.linkLeadingIcon],active:S,disabled:!!p.disabled}))},null,8,["name","class"])):K("",!0)]}),(!e.collapsed||e.orientation!=="vertical")&&(a(he)(p,t.labelKey)||i[p.slot?`${p.slot}-label`:"item-label"])?(b(),U("span",{key:0,class:z(h.value.linkLabel({class:[(L=t.ui)==null?void 0:L.linkLabel,(P=p.ui)==null?void 0:P.linkLabel]}))},[I(x.$slots,p.slot?`${p.slot}-label`:"item-label",{item:p,active:S,index:$},()=>[Oe(ce(a(he)(p,t.labelKey)),1)]),p.target==="_blank"&&e.externalIcon!==!1?(b(),C(le,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:a(s).ui.icons.external,class:z(h.value.linkLabelExternalIcon({class:[(A=t.ui)==null?void 0:A.linkLabelExternalIcon,(_=p.ui)==null?void 0:_.linkLabelExternalIcon],active:S}))},null,8,["name","class"])):K("",!0)],2)):K("",!0),(!e.collapsed||e.orientation!=="vertical")&&(p.badge||e.orientation==="horizontal"&&((N=p.children)!=null&&N.length||i[p.slot?`${p.slot}-content`:"item-content"])||e.orientation==="vertical"&&((H=p.children)!=null&&H.length)||p.trailingIcon||i[p.slot?`${p.slot}-trailing`:"item-trailing"])?(b(),C(Ne(e.orientation==="vertical"&&((V=p.children)!=null&&V.length)&&!e.collapsed?a(Wn):"span"),{key:1,as:"span",class:z(h.value.linkTrailing({class:[(q=t.ui)==null?void 0:q.linkTrailing,(G=p.ui)==null?void 0:G.linkTrailing]})),onClick:O[0]||(O[0]=ze(()=>{},["stop","prevent"]))},{default:w(()=>[I(x.$slots,p.slot?`${p.slot}-trailing`:"item-trailing",{item:p,active:S,index:$},()=>{var W,Z,ee,ne,ue,ve,oe,qe,Re,se;return[p.badge?(b(),C(ra,R({key:0,color:"neutral",variant:"outline",size:((W=p.ui)==null?void 0:W.linkTrailingBadgeSize)||((Z=t.ui)==null?void 0:Z.linkTrailingBadgeSize)||h.value.linkTrailingBadgeSize()},typeof p.badge=="string"||typeof p.badge=="number"?{label:p.badge}:p.badge,{class:h.value.linkTrailingBadge({class:[(ee=t.ui)==null?void 0:ee.linkTrailingBadge,(ne=p.ui)==null?void 0:ne.linkTrailingBadge]})}),null,16,["size","class"])):K("",!0),e.orientation==="horizontal"&&((ue=p.children)!=null&&ue.length||i[p.slot?`${p.slot}-content`:"item-content"])||e.orientation==="vertical"&&((ve=p.children)!=null&&ve.length)?(b(),C(le,{key:1,name:p.trailingIcon||e.trailingIcon||a(s).ui.icons.chevronDown,class:z(h.value.linkTrailingIcon({class:[(oe=t.ui)==null?void 0:oe.linkTrailingIcon,(qe=p.ui)==null?void 0:qe.linkTrailingIcon],active:S}))},null,8,["name","class"])):p.trailingIcon?(b(),C(le,{key:2,name:p.trailingIcon,class:z(h.value.linkTrailingIcon({class:[(Re=t.ui)==null?void 0:Re.linkTrailingIcon,(se=p.ui)==null?void 0:se.linkTrailingIcon],active:S}))},null,8,["name","class"])):K("",!0)]})]),_:2},1032,["class"])):K("",!0)]})]),_:3}),D(a(m),null,{default:w(({item:p,index:S,level:$=0})=>[(b(),C(Ne(e.orientation==="vertical"&&!e.collapsed?a(Pi):a(ll)),{as:"li",value:p.value||($>0?`item-${$}-${S}`:`item-${S}`)},{default:w(()=>{var L,P,A,_,N,H;return[e.orientation==="vertical"&&p.type==="label"&&!e.collapsed?(b(),U("div",{key:0,class:z(h.value.label({class:[(L=t.ui)==null?void 0:L.label,(P=p.ui)==null?void 0:P.label,p.class]}))},[D(a(v),{item:p,index:S},null,8,["item","index"])],2)):p.type!=="label"?(b(),C(St,R({key:1},e.orientation==="vertical"&&((A=p.children)!=null&&A.length)&&!e.collapsed&&p.type==="trigger"?{}:a(Tt)(p),{custom:""}),{default:w(({active:V,...q})=>{var G,W,Z,ee,ne;return[(b(),C(Ne(e.orientation==="horizontal"&&((G=p.children)!=null&&G.length||i[p.slot?`${p.slot}-content`:"item-content"])?a(pl):e.orientation==="vertical"&&((W=p.children)!=null&&W.length)&&!e.collapsed&&!q.href?a(Wn):a(Jt)),{"as-child":"",active:V||p.active,disabled:p.disabled,onSelect:p.onSelect},{default:w(()=>{var ue,ve,oe,qe,Re;return[e.orientation==="vertical"&&e.collapsed&&((ue=p.children)!=null&&ue.length)&&(t.popover||p.popover)?(b(),C(Il,R({key:0},{...c.value,...typeof p.popover=="boolean"?{}:p.popover||{}},{ui:{content:h.value.content({class:[(ve=t.ui)==null?void 0:ve.content,(oe=p.ui)==null?void 0:oe.content]})}}),{content:w(()=>[I(x.$slots,p.slot?`${p.slot}-content`:"item-content",{item:p,active:V||p.active,index:S},()=>{var se,ae,Ot,it;return[X("ul",{class:z(h.value.childList({class:[(se=t.ui)==null?void 0:se.childList,(ae=p.ui)==null?void 0:ae.childList]}))},[X("li",{class:z(h.value.childLabel({class:[(Ot=t.ui)==null?void 0:Ot.childLabel,(it=p.ui)==null?void 0:it.childLabel]}))},ce(a(he)(p,t.labelKey)),3),(b(!0),U(ie,null,ye(p.children,(Ce,Bt)=>{var st,lt;return b(),U("li",{key:Bt,class:z(h.value.childItem({class:[(st=t.ui)==null?void 0:st.childItem,(lt=p.ui)==null?void 0:lt.childItem]}))},[D(St,R({ref_for:!0},a(Tt)(Ce),{custom:""}),{default:w(({active:Me,...It})=>[D(a(Jt),{"as-child":"",active:Me,onSelect:Ce.onSelect},{default:w(()=>{var rt,ut;return[D(Qe,R({ref_for:!0},It,{class:h.value.childLink({class:[(rt=t.ui)==null?void 0:rt.childLink,(ut=p.ui)==null?void 0:ut.childLink,Ce.class],active:Me})}),{default:w(()=>{var dt,ct,ft,Dn,An,_n;return[Ce.icon?(b(),C(le,{key:0,name:Ce.icon,class:z(h.value.childLinkIcon({class:[(dt=t.ui)==null?void 0:dt.childLinkIcon,(ct=p.ui)==null?void 0:ct.childLinkIcon],active:Me}))},null,8,["name","class"])):K("",!0),X("span",{class:z(h.value.childLinkLabel({class:[(ft=t.ui)==null?void 0:ft.childLinkLabel,(Dn=p.ui)==null?void 0:Dn.childLinkLabel],active:Me}))},[Oe(ce(a(he)(Ce,t.labelKey))+" ",1),Ce.target==="_blank"&&e.externalIcon!==!1?(b(),C(le,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:a(s).ui.icons.external,class:z(h.value.childLinkLabelExternalIcon({class:[(An=t.ui)==null?void 0:An.childLinkLabelExternalIcon,(_n=p.ui)==null?void 0:_n.childLinkLabelExternalIcon],active:Me}))},null,8,["name","class"])):K("",!0)],2)]}),_:2},1040,["class"])]}),_:2},1032,["active","onSelect"])]),_:2},1040)],2)}),128))],2)]})]),default:w(()=>{var se,ae;return[D(Qe,R(q,{class:h.value.link({class:[(se=t.ui)==null?void 0:se.link,(ae=p.ui)==null?void 0:ae.link,p.class],active:V||p.active,disabled:!!p.disabled,level:$>0})}),{default:w(()=>[D(a(v),{item:p,active:V||p.active,index:S},null,8,["item","active","index"])]),_:2},1040,["class"])]}),_:2},1040,["ui"])):e.orientation==="vertical"&&e.collapsed&&(t.tooltip||p.tooltip)?(b(),C(Ll,R({key:1,text:a(he)(p,t.labelKey)},{...f.value,...typeof p.tooltip=="boolean"?{}:p.tooltip||{}}),{default:w(()=>{var se,ae;return[D(Qe,R(q,{class:h.value.link({class:[(se=t.ui)==null?void 0:se.link,(ae=p.ui)==null?void 0:ae.link,p.class],active:V||p.active,disabled:!!p.disabled,level:$>0})}),{default:w(()=>[D(a(v),{item:p,active:V||p.active,index:S},null,8,["item","active","index"])]),_:2},1040,["class"])]}),_:2},1040,["text"])):(b(),C(Qe,R({key:2},q,{class:h.value.link({class:[(qe=t.ui)==null?void 0:qe.link,(Re=p.ui)==null?void 0:Re.link,p.class],active:V||p.active,disabled:!!p.disabled,level:e.orientation==="horizontal"||$>0})}),{default:w(()=>[D(a(v),{item:p,active:V||p.active,index:S},null,8,["item","active","index"])]),_:2},1040,["class"]))]}),_:2},1064,["active","disabled","onSelect"])),e.orientation==="horizontal"&&((Z=p.children)!=null&&Z.length||i[p.slot?`${p.slot}-content`:"item-content"])?(b(),C(a(ul),R({key:0},u.value,{class:h.value.content({class:[(ee=t.ui)==null?void 0:ee.content,(ne=p.ui)==null?void 0:ne.content]})}),{default:w(()=>[I(x.$slots,p.slot?`${p.slot}-content`:"item-content",{item:p,active:V||p.active,index:S},()=>{var ue,ve;return[X("ul",{class:z(h.value.childList({class:[(ue=t.ui)==null?void 0:ue.childList,(ve=p.ui)==null?void 0:ve.childList]}))},[(b(!0),U(ie,null,ye(p.children,(oe,qe)=>{var Re,se;return b(),U("li",{key:qe,class:z(h.value.childItem({class:[(Re=t.ui)==null?void 0:Re.childItem,(se=p.ui)==null?void 0:se.childItem]}))},[D(St,R({ref_for:!0},a(Tt)(oe),{custom:""}),{default:w(({active:ae,...Ot})=>[D(a(Jt),{"as-child":"",active:ae,onSelect:oe.onSelect},{default:w(()=>{var it,Ce;return[D(Qe,R({ref_for:!0},Ot,{class:h.value.childLink({class:[(it=t.ui)==null?void 0:it.childLink,(Ce=p.ui)==null?void 0:Ce.childLink,oe.class],active:ae})}),{default:w(()=>{var Bt,st,lt,Me,It,rt,ut,dt,ct,ft;return[oe.icon?(b(),C(le,{key:0,name:oe.icon,class:z(h.value.childLinkIcon({class:[(Bt=t.ui)==null?void 0:Bt.childLinkIcon,(st=p.ui)==null?void 0:st.childLinkIcon],active:ae}))},null,8,["name","class"])):K("",!0),X("div",{class:z(h.value.childLinkWrapper({class:[(lt=t.ui)==null?void 0:lt.childLinkWrapper,(Me=p.ui)==null?void 0:Me.childLinkWrapper]}))},[X("p",{class:z(h.value.childLinkLabel({class:[(It=t.ui)==null?void 0:It.childLinkLabel,(rt=p.ui)==null?void 0:rt.childLinkLabel],active:ae}))},[Oe(ce(a(he)(oe,t.labelKey))+" ",1),oe.target==="_blank"&&e.externalIcon!==!1?(b(),C(le,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:a(s).ui.icons.external,class:z(h.value.childLinkLabelExternalIcon({class:[(ut=t.ui)==null?void 0:ut.childLinkLabelExternalIcon,(dt=p.ui)==null?void 0:dt.childLinkLabelExternalIcon],active:ae}))},null,8,["name","class"])):K("",!0)],2),oe.description?(b(),U("p",{key:0,class:z(h.value.childLinkDescription({class:[(ct=t.ui)==null?void 0:ct.childLinkDescription,(ft=p.ui)==null?void 0:ft.childLinkDescription],active:ae}))},ce(oe.description),3)):K("",!0)],2)]}),_:2},1040,["class"])]}),_:2},1032,["active","onSelect"])]),_:2},1040)],2)}),128))],2)]})]),_:2},1040,["class"])):K("",!0)]}),_:2},1040)):K("",!0),e.orientation==="vertical"&&((_=p.children)!=null&&_.length)&&!e.collapsed?(b(),C(a(Si),{key:2,class:z(h.value.content({class:[(N=t.ui)==null?void 0:N.content,(H=p.ui)==null?void 0:H.content]}))},{default:w(()=>{var V;return[X("ul",{class:z(h.value.childList({class:(V=t.ui)==null?void 0:V.childList}))},[(b(!0),U(ie,null,ye(p.children,(q,G)=>{var W,Z;return b(),C(a(g),{key:G,item:q,index:G,level:$+1,class:z(h.value.childItem({class:[(W=t.ui)==null?void 0:W.childItem,(Z=q.ui)==null?void 0:Z.childItem]}))},null,8,["item","index","level","class"])}),128))],2)]}),_:2},1032,["class"])):K("",!0)]}),_:2},1032,["value"]))]),_:3}),D(a(il),R(a(l),{"data-collapsed":e.collapsed,class:h.value.root({class:[(k=t.ui)==null?void 0:k.root,t.class]})}),{default:w(()=>{var p,S,$;return[I(x.$slots,"list-leading"),(b(!0),U(ie,null,ye(y.value,(L,P)=>{var A,_;return b(),U(ie,{key:`list-${P}`},[(b(),C(Ne(e.orientation==="vertical"&&!e.collapsed?a(ki):a(cl)),R({ref_for:!0},e.orientation==="vertical"&&!e.collapsed?{...a(r),defaultValue:B(L)}:{},{as:"ul",class:h.value.list({class:(A=t.ui)==null?void 0:A.list})}),{default:w(()=>[(b(!0),U(ie,null,ye(L,(N,H)=>{var V,q;return b(),C(a(g),{key:`list-${P}-${H}`,item:N,index:H,class:z(h.value.item({class:[(V=t.ui)==null?void 0:V.item,(q=N.ui)==null?void 0:q.item]}))},null,8,["item","index","class"])}),128))]),_:2},1040,["class"])),e.orientation==="vertical"&&P{var L;return[X("div",{class:z(h.value.arrow({class:(L=t.ui)==null?void 0:L.arrow}))},null,2)]}),_:1},8,["class"])):K("",!0),D(a(gl),{class:z(h.value.viewport({class:($=t.ui)==null?void 0:$.viewport}))},null,8,["class"])],2)):K("",!0)]}),_:3},16,["data-collapsed","class"])],64)}}},Wo={__name:"DropdownMenuContent",props:{items:{type:null,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0},sub:{type:Boolean,required:!1},labelKey:{type:null,required:!0},checkedIcon:{type:String,required:!1},loadingIcon:{type:String,required:!1},externalIcon:{type:[Boolean,String],required:!1},class:{type:null,required:!1},ui:{type:null,required:!0},uiOverride:{type:null,required:!1},loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),{dir:s}=no(),l=je(),r=Vt(re(()=>t.portal)),u=Q(la(t,"sub","items","portal","labelKey","checkedIcon","loadingIcon","externalIcon","class","ui","uiOverride"),o),f=oo(i,["default"]),[c,d]=rn(),v=M(()=>s.value==="rtl"?l.ui.icons.chevronLeft:l.ui.icons.chevronRight),m=M(()=>{var g;return(g=t.items)!=null&&g.length?eo(t.items)?t.items:[t.items]:[]});return(g,h)=>(b(),U(ie,null,[D(a(c),null,{default:w(({item:y,active:B,index:x})=>[I(g.$slots,y.slot||"item",{item:y,index:x},()=>{var O,k,p,S,$,L;return[I(g.$slots,y.slot?`${y.slot}-leading`:"item-leading",{item:y,active:B,index:x},()=>{var P,A,_,N,H,V,q,G;return[y.loading?(b(),C(le,{key:0,name:e.loadingIcon||a(l).ui.icons.loading,class:z(e.ui.itemLeadingIcon({class:[(P=e.uiOverride)==null?void 0:P.itemLeadingIcon,(A=y.ui)==null?void 0:A.itemLeadingIcon],color:y==null?void 0:y.color,loading:!0}))},null,8,["name","class"])):y.icon?(b(),C(le,{key:1,name:y.icon,class:z(e.ui.itemLeadingIcon({class:[(_=e.uiOverride)==null?void 0:_.itemLeadingIcon,(N=y.ui)==null?void 0:N.itemLeadingIcon],color:y==null?void 0:y.color,active:B}))},null,8,["name","class"])):y.avatar?(b(),C(to,R({key:2,size:((H=y.ui)==null?void 0:H.itemLeadingAvatarSize)||((V=t.uiOverride)==null?void 0:V.itemLeadingAvatarSize)||e.ui.itemLeadingAvatarSize()},y.avatar,{class:e.ui.itemLeadingAvatar({class:[(q=e.uiOverride)==null?void 0:q.itemLeadingAvatar,(G=y.ui)==null?void 0:G.itemLeadingAvatar],active:B})}),null,16,["size","class"])):K("",!0)]}),a(he)(y,t.labelKey)||i[y.slot?`${y.slot}-label`:"item-label"]?(b(),U("span",{key:0,class:z(e.ui.itemLabel({class:[(O=e.uiOverride)==null?void 0:O.itemLabel,(k=y.ui)==null?void 0:k.itemLabel],active:B}))},[I(g.$slots,y.slot?`${y.slot}-label`:"item-label",{item:y,active:B,index:x},()=>[Oe(ce(a(he)(y,t.labelKey)),1)]),y.target==="_blank"&&e.externalIcon!==!1?(b(),C(le,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:a(l).ui.icons.external,class:z(e.ui.itemLabelExternalIcon({class:[(p=e.uiOverride)==null?void 0:p.itemLabelExternalIcon,(S=y.ui)==null?void 0:S.itemLabelExternalIcon],color:y==null?void 0:y.color,active:B}))},null,8,["name","class"])):K("",!0)],2)):K("",!0),X("span",{class:z(e.ui.itemTrailing({class:[($=e.uiOverride)==null?void 0:$.itemTrailing,(L=y.ui)==null?void 0:L.itemTrailing]}))},[I(g.$slots,y.slot?`${y.slot}-trailing`:"item-trailing",{item:y,active:B,index:x},()=>{var P,A,_,N,H,V;return[(P=y.children)!=null&&P.length?(b(),C(le,{key:0,name:v.value,class:z(e.ui.itemTrailingIcon({class:[(A=e.uiOverride)==null?void 0:A.itemTrailingIcon,(_=y.ui)==null?void 0:_.itemTrailingIcon],color:y==null?void 0:y.color,active:B}))},null,8,["name","class"])):(N=y.kbds)!=null&&N.length?(b(),U("span",{key:1,class:z(e.ui.itemTrailingKbds({class:[(H=e.uiOverride)==null?void 0:H.itemTrailingKbds,(V=y.ui)==null?void 0:V.itemTrailingKbds]}))},[(b(!0),U(ie,null,ye(y.kbds,(q,G)=>{var W,Z;return b(),C(Ho,R({key:G,size:((W=y.ui)==null?void 0:W.itemTrailingKbdsSize)||((Z=t.uiOverride)==null?void 0:Z.itemTrailingKbdsSize)||e.ui.itemTrailingKbdsSize()},{ref_for:!0},typeof q=="string"?{value:q}:q),null,16,["size"])}),128))],2)):K("",!0)]}),D(a(me).ItemIndicator,{"as-child":""},{default:w(()=>{var P,A;return[D(le,{name:e.checkedIcon||a(l).ui.icons.check,class:z(e.ui.itemTrailingIcon({class:[(P=e.uiOverride)==null?void 0:P.itemTrailingIcon,(A=y.ui)==null?void 0:A.itemTrailingIcon],color:y==null?void 0:y.color}))},null,8,["name","class"])]}),_:2},1024)],2)]})]),_:3}),D(a(me).Portal,j(Y(a(r))),{default:w(()=>[(b(),C(Ne(e.sub?a(me).SubContent:a(me).Content),R({class:t.class},a(u)),{default:w(()=>{var y;return[I(g.$slots,"content-top"),X("div",{role:"presentation",class:z(e.ui.viewport({class:(y=t.ui)==null?void 0:y.viewport}))},[(b(!0),U(ie,null,ye(m.value,(B,x)=>{var O;return b(),C(a(me).Group,{key:`group-${x}`,class:z(e.ui.group({class:(O=e.uiOverride)==null?void 0:O.group}))},{default:w(()=>[(b(!0),U(ie,null,ye(B,(k,p)=>{var S,$,L,P,A,_,N;return b(),U(ie,{key:`group-${x}-${p}`},[k.type==="label"?(b(),C(a(me).Label,{key:0,class:z(e.ui.label({class:[(S=e.uiOverride)==null?void 0:S.label,($=k.ui)==null?void 0:$.label,k.class]}))},{default:w(()=>[D(a(d),{item:k,index:p},null,8,["item","index"])]),_:2},1032,["class"])):k.type==="separator"?(b(),C(a(me).Separator,{key:1,class:z(e.ui.separator({class:[(L=e.uiOverride)==null?void 0:L.separator,(P=k.ui)==null?void 0:P.separator,k.class]}))},null,8,["class"])):(A=k==null?void 0:k.children)!=null&&A.length?(b(),C(a(me).Sub,{key:2,open:k.open,"default-open":k.defaultOpen},{default:w(()=>{var H,V;return[D(a(me).SubTrigger,{as:"button",type:"button",disabled:k.disabled,"text-value":a(he)(k,t.labelKey),class:z(e.ui.item({class:[(H=e.uiOverride)==null?void 0:H.item,(V=k.ui)==null?void 0:V.item,k.class],color:k==null?void 0:k.color}))},{default:w(()=>[D(a(d),{item:k,index:p},null,8,["item","index"])]),_:2},1032,["disabled","text-value","class"]),D(Wo,R({sub:"",class:t.class,ui:e.ui,"ui-override":e.uiOverride,portal:e.portal,items:k.children,align:"start","align-offset":-4,"side-offset":3,"label-key":e.labelKey,"checked-icon":e.checkedIcon,"loading-icon":e.loadingIcon,"external-icon":e.externalIcon},{ref_for:!0},k.content),ao({_:2},[ye(a(f),(q,G)=>({name:G,fn:w(W=>[I(g.$slots,G,R({ref_for:!0},W))])}))]),1040,["class","ui","ui-override","portal","items","label-key","checked-icon","loading-icon","external-icon"])]}),_:2},1032,["open","default-open"])):k.type==="checkbox"?(b(),C(a(me).CheckboxItem,{key:3,"model-value":k.checked,disabled:k.disabled,"text-value":a(he)(k,t.labelKey),class:z(e.ui.item({class:[(_=e.uiOverride)==null?void 0:_.item,(N=k.ui)==null?void 0:N.item,k.class],color:k==null?void 0:k.color})),"onUpdate:modelValue":k.onUpdateChecked,onSelect:k.onSelect},{default:w(()=>[D(a(d),{item:k,index:p},null,8,["item","index"])]),_:2},1032,["model-value","disabled","text-value","class","onUpdate:modelValue","onSelect"])):(b(),C(a(me).Item,{key:4,"as-child":"",disabled:k.disabled,"text-value":a(he)(k,t.labelKey),onSelect:k.onSelect},{default:w(()=>[D(St,R({ref_for:!0},a(Tt)(k),{custom:""}),{default:w(({active:H,...V})=>{var q,G;return[D(Qe,R({ref_for:!0},V,{class:e.ui.item({class:[(q=e.uiOverride)==null?void 0:q.item,(G=k.ui)==null?void 0:G.item,k.class],color:k==null?void 0:k.color,active:H})}),{default:w(()=>[D(a(d),{item:k,active:H,index:p},null,8,["item","active","index"])]),_:2},1040,["class"])]}),_:2},1040)]),_:2},1032,["disabled","text-value","onSelect"]))],64)}),128))]),_:2},1032,["class"])}),128))],2),I(g.$slots,"default"),I(g.$slots,"content-bottom")]}),_:3},16,["class"]))]),_:3},16)],64))}},_l={slots:{content:"min-w-32 bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",viewport:"relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",arrow:"fill-default",group:"p-1 isolate",label:"w-full flex items-center font-semibold text-highlighted",separator:"-mx-1 my-1 h-px bg-border",item:"group relative w-full flex items-center select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75",itemLeadingIcon:"shrink-0",itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemTrailing:"ms-auto inline-flex gap-1.5 items-center",itemTrailingIcon:"shrink-0",itemTrailingKbds:"hidden lg:inline-flex items-center shrink-0",itemTrailingKbdsSize:"",itemLabel:"truncate",itemLabelExternalIcon:"inline-block size-3 align-top text-dimmed"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},active:{true:{item:"text-highlighted before:bg-elevated",itemLeadingIcon:"text-default"},false:{item:["text-default data-highlighted:text-highlighted data-[state=open]:text-highlighted data-highlighted:before:bg-elevated/50 data-[state=open]:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["text-dimmed group-data-highlighted:text-default group-data-[state=open]:text-default","transition-colors"]}},loading:{true:{itemLeadingIcon:"animate-spin"}},size:{xs:{label:"p-1 text-xs gap-1",item:"p-1 text-xs gap-1",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},sm:{label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-xs gap-1.5",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},md:{label:"p-1.5 text-sm gap-1.5",item:"p-1.5 text-sm gap-1.5",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"md"},lg:{label:"p-2 text-sm gap-2",item:"p-2 text-sm gap-2",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"md"},xl:{label:"p-2 text-base gap-2",item:"p-2 text-base gap-2",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemTrailingIcon:"size-6",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"lg"}}},compoundVariants:[{color:"primary",active:!1,class:{item:"text-primary data-highlighted:text-primary data-highlighted:before:bg-primary/10 data-[state=open]:before:bg-primary/10",itemLeadingIcon:"text-primary/75 group-data-highlighted:text-primary group-data-[state=open]:text-primary"}},{color:"secondary",active:!1,class:{item:"text-secondary data-highlighted:text-secondary data-highlighted:before:bg-secondary/10 data-[state=open]:before:bg-secondary/10",itemLeadingIcon:"text-secondary/75 group-data-highlighted:text-secondary group-data-[state=open]:text-secondary"}},{color:"success",active:!1,class:{item:"text-success data-highlighted:text-success data-highlighted:before:bg-success/10 data-[state=open]:before:bg-success/10",itemLeadingIcon:"text-success/75 group-data-highlighted:text-success group-data-[state=open]:text-success"}},{color:"info",active:!1,class:{item:"text-info data-highlighted:text-info data-highlighted:before:bg-info/10 data-[state=open]:before:bg-info/10",itemLeadingIcon:"text-info/75 group-data-highlighted:text-info group-data-[state=open]:text-info"}},{color:"warning",active:!1,class:{item:"text-warning data-highlighted:text-warning data-highlighted:before:bg-warning/10 data-[state=open]:before:bg-warning/10",itemLeadingIcon:"text-warning/75 group-data-highlighted:text-warning group-data-[state=open]:text-warning"}},{color:"error",active:!1,class:{item:"text-error data-highlighted:text-error data-highlighted:before:bg-error/10 data-[state=open]:before:bg-error/10",itemLeadingIcon:"text-error/75 group-data-highlighted:text-error group-data-[state=open]:text-error"}},{color:"primary",active:!0,class:{item:"text-primary before:bg-primary/10",itemLeadingIcon:"text-primary"}},{color:"secondary",active:!0,class:{item:"text-secondary before:bg-secondary/10",itemLeadingIcon:"text-secondary"}},{color:"success",active:!0,class:{item:"text-success before:bg-success/10",itemLeadingIcon:"text-success"}},{color:"info",active:!0,class:{item:"text-info before:bg-info/10",itemLeadingIcon:"text-info"}},{color:"warning",active:!0,class:{item:"text-warning before:bg-warning/10",itemLeadingIcon:"text-warning"}},{color:"error",active:!0,class:{item:"text-error before:bg-error/10",itemLeadingIcon:"text-error"}}],defaultVariants:{size:"md"}},El={__name:"DropdownMenu",props:{size:{type:null,required:!1},items:{type:null,required:!1},checkedIcon:{type:String,required:!1},loadingIcon:{type:String,required:!1},externalIcon:{type:[Boolean,String],required:!1,default:!0},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},labelKey:{type:null,required:!1,default:"label"},disabled:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),s=je(),l=Q(nt(t,"defaultOpen","open","modal"),o),r=re(()=>gt(t.content,{side:"bottom",sideOffset:8,collisionPadding:8})),u=re(()=>t.arrow),f=oo(i,["default"]),c=M(()=>{var d;return ge({extend:ge(_l),...((d=s.ui)==null?void 0:d.dropdownMenu)||{}})({size:t.size})});return(d,v)=>(b(),C(a(Ro),j(Y(a(l))),{default:w(({open:m})=>{var g;return[i.default?(b(),C(a(Mo),{key:0,"as-child":"",class:z(t.class),disabled:e.disabled},{default:w(()=>[I(d.$slots,"default",{open:m})]),_:2},1032,["class","disabled"])):K("",!0),D(Wo,R({class:c.value.content({class:[!i.default&&t.class,(g=t.ui)==null?void 0:g.content]}),ui:c.value,"ui-override":t.ui},r.value,{items:e.items,portal:e.portal,"label-key":e.labelKey,"checked-icon":e.checkedIcon,"loading-icon":e.loadingIcon,"external-icon":e.externalIcon}),ao({default:w(()=>{var h;return[e.arrow?(b(),C(a(_o),R({key:0},u.value,{class:c.value.arrow({class:(h=t.ui)==null?void 0:h.arrow})}),null,16,["class"])):K("",!0)]}),_:2},[ye(a(f),(h,y)=>({name:y,fn:w(B=>[I(d.$slots,y,j(Y(B)))])}))]),1040,["class","ui","ui-override","items","portal","label-key","checked-icon","loading-icon","external-icon"])]}),_:3},16))}},Rl=T({__name:"UserMenu",props:{collapsed:{type:Boolean}},setup(e){const{user:n,logout:t}=io(),o=M(()=>{var i,s,l;return[[{type:"label",label:((i=n.value)==null?void 0:i.name)||((s=n.value)==null?void 0:s.email)||"User",avatar:(l=n.value)!=null&&l.avatarUrl?{src:n.value.avatarUrl,alt:n.value.name}:void 0}],[{label:"Log out",icon:"i-lucide-log-out",onSelect:()=>t()}]]});return(i,s)=>{const l=so,r=El;return b(),C(r,{items:a(o),content:{align:"center",collisionPadding:12},ui:{content:i.collapsed?"w-48":"w-(--reka-dropdown-menu-trigger-width)"}},{default:w(()=>{var u,f,c,d;return[D(l,R({label:i.collapsed?void 0:((u=a(n))==null?void 0:u.name)||((f=a(n))==null?void 0:f.email)||"User",avatar:(c=a(n))!=null&&c.avatarUrl?{src:a(n).avatarUrl,alt:(d=a(n))==null?void 0:d.name}:void 0,trailingIcon:i.collapsed?void 0:"i-lucide-chevrons-up-down"},{color:"neutral",variant:"ghost",block:"",square:i.collapsed,class:"data-[state=open]:bg-slate-800",ui:{trailingIcon:"text-slate-400"}}),null,16,["square"])]}),_:1},8,["items","ui"])}}}),Ml={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default sm:ring ring-default sm:shadow-lg flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-16",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{side:{top:{content:"inset-x-0 top-0 max-h-full"},right:{content:"right-0 inset-y-0 w-full max-w-md"},bottom:{content:"inset-x-0 bottom-0 max-h-full"},left:{content:"left-0 inset-y-0 w-full max-w-md"}},transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"}}},compoundVariants:[{transition:!0,side:"top",class:{content:"data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"}},{transition:!0,side:"right",class:{content:"data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"}},{transition:!0,side:"bottom",class:{content:"data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"}},{transition:!0,side:"left",class:{content:"data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"}}]},Fl={__name:"Slideover",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1,default:"right"},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:String,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["after:leave","after:enter","close:prevent","update:open"],setup(e,{emit:n}){const t=e,o=n,i=Ue(),{t:s}=no(),l=je(),r=Q(nt(t,"open","defaultOpen","modal"),o),u=Vt(re(()=>t.portal)),f=re(()=>t.content),c=M(()=>{const v={closeAutoFocus:m=>m.preventDefault()};return t.dismissible?v:["pointerDownOutside","interactOutside","escapeKeyDown","closeAutoFocus"].reduce((g,h)=>(g[h]=y=>{y.preventDefault(),o("close:prevent")},g),{})}),d=M(()=>{var v;return ge({extend:ge(Ml),...((v=l.ui)==null?void 0:v.slideover)||{}})({transition:t.transition,side:t.side})});return(v,m)=>(b(),C(a(ka),j(Y(a(r))),{default:w(({open:g})=>[i.default?(b(),C(a(ha),{key:0,"as-child":"",class:z(t.class)},{default:w(()=>[I(v.$slots,"default",{open:g})]),_:2},1032,["class"])):K("",!0),D(a(xa),j(Y(a(u))),{default:w(()=>{var h,y;return[e.overlay?(b(),C(a(ya),{key:0,class:z(d.value.overlay({class:(h=t.ui)==null?void 0:h.overlay}))},null,8,["class"])):K("",!0),D(a(ba),R({"data-side":e.side,class:d.value.content({class:[!i.default&&t.class,(y=t.ui)==null?void 0:y.content]})},f.value,{onAfterEnter:m[0]||(m[0]=B=>o("after:enter")),onAfterLeave:m[1]||(m[1]=B=>o("after:leave"))},vn(c.value)),{default:w(()=>[i.content&&(e.title||i.title||e.description||i.description)?(b(),C(a(pn),{key:0},{default:w(()=>[e.title||i.title?(b(),C(a(En),{key:0},{default:w(()=>[I(v.$slots,"title",{},()=>[Oe(ce(e.title),1)])]),_:3})):K("",!0),e.description||i.description?(b(),C(a(Rn),{key:1},{default:w(()=>[I(v.$slots,"description",{},()=>[Oe(ce(e.description),1)])]),_:3})):K("",!0)]),_:3})):K("",!0),I(v.$slots,"content",{},()=>{var B,x,O;return[i.header||e.title||i.title||e.description||i.description||e.close||i.close?(b(),U("div",{key:0,class:z(d.value.header({class:(B=t.ui)==null?void 0:B.header}))},[I(v.$slots,"header",{},()=>{var k,p,S;return[X("div",{class:z(d.value.wrapper({class:(k=t.ui)==null?void 0:k.wrapper}))},[e.title||i.title?(b(),C(a(En),{key:0,class:z(d.value.title({class:(p=t.ui)==null?void 0:p.title}))},{default:w(()=>[I(v.$slots,"title",{},()=>[Oe(ce(e.title),1)])]),_:3},8,["class"])):K("",!0),e.description||i.description?(b(),C(a(Rn),{key:1,class:z(d.value.description({class:(S=t.ui)==null?void 0:S.description}))},{default:w(()=>[I(v.$slots,"description",{},()=>[Oe(ce(e.description),1)])]),_:3},8,["class"])):K("",!0)],2),e.close||i.close?(b(),C(a(wa),{key:0,"as-child":""},{default:w(()=>[I(v.$slots,"close",{ui:d.value},()=>{var $;return[e.close?(b(),C(so,R({key:0,icon:e.closeIcon||a(l).ui.icons.close,size:"md",color:"neutral",variant:"ghost","aria-label":a(s)("slideover.close")},typeof e.close=="object"?e.close:{},{class:d.value.close({class:($=t.ui)==null?void 0:$.close})}),null,16,["icon","aria-label","class"])):K("",!0)]})]),_:3})):K("",!0)]})],2)):K("",!0),X("div",{class:z(d.value.body({class:(x=t.ui)==null?void 0:x.body}))},[I(v.$slots,"body")],2),i.footer?(b(),U("div",{key:1,class:z(d.value.footer({class:(O=t.ui)==null?void 0:O.footer}))},[I(v.$slots,"footer")],2)):K("",!0)]})]),_:3},16,["data-side","class"])]}),_:3},16)]),_:3},16))}},zl={class:"fixed inset-0 flex overflow-hidden"},Vl={class:"hidden lg:flex lg:flex-col w-64 border-r border-neutral-200 dark:border-neutral-800 bg-neutral-50/50 dark:bg-neutral-900/50 backdrop-blur"},Kl={class:"flex items-center gap-2.5 px-4 h-16 border-b border-neutral-200 dark:border-neutral-800"},ql={class:"flex items-center justify-center w-8 h-8 rounded-lg bg-blue-600"},Nl={class:"flex-1 overflow-y-auto p-4 flex flex-col gap-2"},Hl={class:"mt-auto"},Wl={class:"p-4 border-t border-neutral-200 dark:border-neutral-800"},Ul={class:"flex flex-col h-full bg-white dark:bg-neutral-900"},jl={class:"flex items-center gap-2.5 px-4 h-16 border-b border-neutral-200 dark:border-neutral-800"},Gl={class:"flex items-center justify-center w-8 h-8 rounded-lg bg-blue-600"},Yl={class:"flex-1 overflow-y-auto p-4 flex flex-col gap-2"},Xl={class:"mt-auto"},Jl={class:"p-4 border-t border-neutral-200 dark:border-neutral-800"},Zl={class:"flex-1 flex flex-col min-w-0 overflow-hidden bg-white dark:bg-neutral-950"},Ql={class:"flex-1 overflow-y-auto"},ir=T({__name:"default",setup(e){const{isAuthenticated:n}=io(),{isSidebarOpen:t}=Ca(),o=[[{label:"Modules",icon:"i-lucide-package",to:"/",onSelect:()=>{t.value=!1}}],[{label:"Settings",icon:"i-lucide-settings",to:"/settings",onSelect:()=>{t.value=!1}}]];return(i,s)=>{const l=le,r=Al,u=Rl,f=Fl;return b(),U("div",zl,[X("aside",Vl,[X("div",Kl,[X("div",ql,[D(l,{name:"i-lucide-box",class:"text-white text-lg"})]),s[1]||(s[1]=X("span",{class:"font-semibold text-slate-900 dark:text-slate-100 truncate"}," Terraform Registry ",-1))]),X("div",Nl,[D(r,{items:o[0],orientation:"vertical"},null,8,["items"]),X("div",Hl,[D(r,{items:o[1],orientation:"vertical"},null,8,["items"])])]),X("div",Wl,[a(n)?(b(),C(u,{key:0})):K("",!0)])]),D(f,{open:a(t),"onUpdate:open":s[0]||(s[0]=c=>fn(t)?t.value=c:null),side:"left",class:"lg:hidden",ui:{content:"max-w-xs"}},{content:w(()=>[X("div",Ul,[X("div",jl,[X("div",Gl,[D(l,{name:"i-lucide-box",class:"text-white text-lg"})]),s[2]||(s[2]=X("span",{class:"font-semibold text-slate-900 dark:text-slate-100 truncate"}," Terraform Registry ",-1))]),X("div",Yl,[D(r,{items:o[0],orientation:"vertical"},null,8,["items"]),X("div",Xl,[D(r,{items:o[1],orientation:"vertical"},null,8,["items"])])]),X("div",Jl,[a(n)?(b(),C(u,{key:0})):K("",!0)])])]),_:1},8,["open"]),X("main",Zl,[X("div",Ql,[I(i.$slots,"default")])])])}}});export{ir as default}; diff --git a/TerraformRegistry/web/_nuxt/D-iuHiwX.js b/TerraformRegistry/web/_nuxt/D-iuHiwX.js new file mode 100644 index 0000000..8cfa9b3 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/D-iuHiwX.js @@ -0,0 +1 @@ +import{e as S,f as z,r as u,g as A,h as F,c as m,o as i,a as t,b as r,i as E,j as s,k as I,l as k,m as C,n as O,t as n,F as T,p as q,w as f,d as x}from"./BnS3deBy.js";import{_ as G}from"./BRMY5sEW.js";import{_ as H}from"./DcGCRxN2.js";import{_ as Q}from"./DzDAta3s.js";import{_ as R}from"./C0rx7CO6.js";import{u as J}from"./BB080qx0.js";const K={class:"flex flex-col h-full"},P={class:"flex items-center justify-between px-4 py-3 border-b border-neutral-200 dark:border-neutral-800 bg-white/50 dark:bg-neutral-900/50 backdrop-blur sticky top-0 z-10"},W={class:"flex items-center gap-3"},X={class:"flex items-center gap-2"},Y={class:"p-4 flex-1"},Z={key:1,class:"flex flex-col justify-center items-center py-20"},ee={key:2,class:"text-center py-20 px-6"},te={class:"w-24 h-24 mx-auto mb-6 bg-neutral-800 rounded-3xl flex items-center justify-center"},se={class:"text-slate-400 max-w-sm mx-auto"},oe={key:3},ae={class:"grid gap-4 md:grid-cols-2 xl:grid-cols-3"},le={class:"flex items-start gap-4"},ne={class:"w-12 h-12 bg-blue-600 rounded-xl flex items-center justify-center flex-shrink-0"},re={class:"text-white font-bold text-lg"},ie={class:"flex-1 min-w-0"},ce={class:"font-semibold text-slate-100 truncate"},de={class:"text-sm text-slate-400 truncate"},ue={class:"mt-3 text-sm text-slate-400 line-clamp-2"},me={class:"mt-4 flex items-center justify-between"},_e={class:"flex items-center gap-2"},fe={class:"text-xs text-slate-500"},pe={key:0,class:"flex justify-center items-center gap-4 mt-8 pt-6 border-t border-neutral-700"},xe={class:"text-sm text-slate-400"},L=10,Ce=S({__name:"index",setup(he){const{getAuthHeaders:$}=z(),{isSidebarOpen:M}=J(),c=u([]),_=u(!1),h=u(!1),p=u(""),d=u(""),v=u(0),g=A(()=>{if(!d.value)return c.value;const a=d.value.toLowerCase();return c.value.filter(e=>e.name.toLowerCase().includes(a)||e.namespace.toLowerCase().includes(a)||e.provider.toLowerCase().includes(a)||e.description.toLowerCase().includes(a))}),U=a=>new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}),b=async(a=0,e=!1)=>{try{e?h.value=!0:_.value=!0,p.value="";const l=await $fetch(`/v1/modules?offset=${a}&limit=${L}`,{headers:$()});e?c.value.push(...l.modules):c.value=l.modules,v.value=a+L}catch(l){p.value=l.message||"Failed to fetch modules",console.error("Error fetching modules:",l)}finally{_.value=!1,h.value=!1}},j=()=>{v.value=0,b(0,!1)},V=()=>{b(v.value,!0)};return F(()=>{b()}),(a,e)=>{const l=E,B=G,D=H,y=O,w=Q,N=R;return i(),m("div",K,[t("header",P,[t("div",W,[r(l,{icon:"i-lucide-menu",variant:"ghost",color:"neutral",class:"lg:hidden",onClick:e[0]||(e[0]=o=>M.value=!0)}),e[2]||(e[2]=t("h1",{class:"text-xl font-semibold text-slate-900 dark:text-slate-100"}," Modules ",-1))]),t("div",X,[r(B,{modelValue:s(d),"onUpdate:modelValue":e[1]||(e[1]=o=>I(d)?d.value=o:null),placeholder:"Search modules...",icon:"i-lucide-search",class:"hidden sm:block w-64"},null,8,["modelValue"]),r(l,{onClick:j,loading:s(_),icon:"i-lucide-refresh-cw",color:"neutral",variant:"ghost"},null,8,["loading"])])]),t("div",Y,[s(p)?(i(),k(D,{key:0,color:"error",variant:"soft",title:s(p),icon:"i-lucide-alert-circle",class:"mb-6"},null,8,["title"])):C("",!0),s(_)&&!s(c).length?(i(),m("div",Z,[r(y,{name:"i-lucide-loader-2",class:"animate-spin text-5xl mb-4 text-blue-500"}),e[3]||(e[3]=t("p",{class:"text-slate-400 text-lg"},"Loading modules...",-1))])):!s(g).length&&!s(_)?(i(),m("div",ee,[t("div",te,[r(y,{name:"i-lucide-package",class:"text-5xl text-slate-500"})]),e[4]||(e[4]=t("h3",{class:"text-xl font-semibold text-slate-100 mb-2"}," No modules found ",-1)),t("p",se,n(s(d)?"Try adjusting your search terms":"Get started by uploading your first module"),1)])):(i(),m("div",oe,[t("div",ae,[(i(!0),m(T,null,q(s(g),o=>(i(),k(N,{key:o.id,class:"hover:ring-1 hover:ring-blue-500/50 transition-all"},{default:f(()=>[t("div",le,[t("div",ne,[t("span",re,n(o.name.charAt(0).toUpperCase()),1)]),t("div",ie,[t("h3",ce,n(o.name),1),t("p",de,n(o.namespace),1)]),r(w,{variant:"subtle",color:"primary",size:"sm"},{default:f(()=>[x(" v"+n(o.version),1)]),_:2},1024)]),t("p",ue,n(o.description||"No description available"),1),t("div",me,[t("div",_e,[r(w,{variant:"outline",color:"neutral",size:"xs"},{default:f(()=>[x(n(o.provider),1)]),_:2},1024),t("span",fe,n(U(o.published_at)),1)]),r(l,{to:o.download_url,external:"",target:"_blank",variant:"ghost",size:"xs",color:"primary",icon:"i-lucide-download"},{default:f(()=>e[5]||(e[5]=[x(" Download ")])),_:2,__:[5]},1032,["to"])])]),_:2},1024))),128))]),s(c).length>0?(i(),m("div",pe,[t("p",xe," Showing "+n(s(g).length)+" of "+n(s(c).length)+" modules ",1),r(l,{onClick:V,loading:s(h),variant:"soft",size:"sm"},{default:f(()=>e[6]||(e[6]=[x(" Load More ")])),_:1,__:[6]},8,["loading"])])):C("",!0)]))])])}}});export{Ce as default}; diff --git a/TerraformRegistry/web/_nuxt/D2SsjiDy.js b/TerraformRegistry/web/_nuxt/D2SsjiDy.js new file mode 100644 index 0000000..cfcb662 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/D2SsjiDy.js @@ -0,0 +1 @@ +import{v as ae,x as le,y as oe,E as ne,G as re,H as ie,I as V,g as G,z as Y,l as k,o as r,w as n,m as v,b as a,j as l,D as A,A as _,J as H,K as J,C as Q,L as de,M as ce,d as P,t as x,c as f,a as e,i as te,e as ue,r as b,h as fe,k as F,N as pe,O as me,Q as ve,n as xe,F as W,p as Z}from"./BnS3deBy.js";import{_ as ye}from"./BRMY5sEW.js";import{_ as be}from"./C0rx7CO6.js";import{_ as ge,a as he,b as ke,c as _e,d as X,e as ee,f as we,g as $e}from"./DsdUjOsK.js";import{u as Ce}from"./BB080qx0.js";const Ae={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-16",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",content:"data-[state=open]:animate-[scale-in_200ms_ease-out] data-[state=closed]:animate-[scale-out_200ms_ease-in]"}},fullscreen:{true:{content:"inset-0"},false:{content:"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[calc(100vw-2rem)] max-w-lg max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] rounded-lg shadow-lg ring ring-default"}}}},Se={__name:"Modal",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},fullscreen:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:String,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["after:leave","after:enter","close:prevent","update:open"],setup(d,{emit:z}){const i=d,S=z,c=ae(),{t:B}=le(),g=oe(),K=ne(re(i,"open","defaultOpen","modal"),S),D=ie(V(()=>i.portal)),E=V(()=>i.content),I=G(()=>{const u={closeAutoFocus:m=>m.preventDefault()};return i.dismissible?u:["pointerDownOutside","interactOutside","escapeKeyDown","closeAutoFocus"].reduce((w,L)=>(w[L]=q=>{q.preventDefault(),S("close:prevent")},w),{})}),p=G(()=>{var u;return Y({extend:Y(Ae),...((u=g.ui)==null?void 0:u.modal)||{}})({transition:i.transition,fullscreen:i.fullscreen})});return(u,m)=>(r(),k(l($e),H(J(l(K))),{default:n(({open:w})=>[c.default?(r(),k(l(ge),{key:0,"as-child":"",class:A(i.class)},{default:n(()=>[_(u.$slots,"default",{open:w})]),_:2},1032,["class"])):v("",!0),a(l(he),H(J(l(D))),{default:n(()=>{var L,q;return[d.overlay?(r(),k(l(ke),{key:0,class:A(p.value.overlay({class:(L=i.ui)==null?void 0:L.overlay}))},null,8,["class"])):v("",!0),a(l(_e),Q({class:p.value.content({class:[!c.default&&i.class,(q=i.ui)==null?void 0:q.content]})},E.value,{onAfterEnter:m[0]||(m[0]=U=>S("after:enter")),onAfterLeave:m[1]||(m[1]=U=>S("after:leave"))},de(I.value)),{default:n(()=>[c.content&&(d.title||c.title||d.description||c.description)?(r(),k(l(ce),{key:0},{default:n(()=>[d.title||c.title?(r(),k(l(X),{key:0},{default:n(()=>[_(u.$slots,"title",{},()=>[P(x(d.title),1)])]),_:3})):v("",!0),d.description||c.description?(r(),k(l(ee),{key:1},{default:n(()=>[_(u.$slots,"description",{},()=>[P(x(d.description),1)])]),_:3})):v("",!0)]),_:3})):v("",!0),_(u.$slots,"content",{},()=>{var U,O,h;return[c.header||d.title||c.title||d.description||c.description||d.close||c.close?(r(),f("div",{key:0,class:A(p.value.header({class:(U=i.ui)==null?void 0:U.header}))},[_(u.$slots,"header",{},()=>{var $,T,M;return[e("div",{class:A(p.value.wrapper({class:($=i.ui)==null?void 0:$.wrapper}))},[d.title||c.title?(r(),k(l(X),{key:0,class:A(p.value.title({class:(T=i.ui)==null?void 0:T.title}))},{default:n(()=>[_(u.$slots,"title",{},()=>[P(x(d.title),1)])]),_:3},8,["class"])):v("",!0),d.description||c.description?(r(),k(l(ee),{key:1,class:A(p.value.description({class:(M=i.ui)==null?void 0:M.description}))},{default:n(()=>[_(u.$slots,"description",{},()=>[P(x(d.description),1)])]),_:3},8,["class"])):v("",!0)],2),d.close||c.close?(r(),k(l(we),{key:0,"as-child":""},{default:n(()=>[_(u.$slots,"close",{ui:p.value},()=>{var o;return[d.close?(r(),k(te,Q({key:0,icon:d.closeIcon||l(g).ui.icons.close,size:"md",color:"neutral",variant:"ghost","aria-label":l(B)("modal.close")},typeof d.close=="object"?d.close:{},{class:p.value.close({class:(o=i.ui)==null?void 0:o.close})}),null,16,["icon","aria-label","class"])):v("",!0)]})]),_:3})):v("",!0)]})],2)):v("",!0),c.body?(r(),f("div",{key:1,class:A(p.value.body({class:(O=i.ui)==null?void 0:O.body}))},[_(u.$slots,"body")],2)):v("",!0),c.footer?(r(),f("div",{key:2,class:A(p.value.footer({class:(h=i.ui)==null?void 0:h.footer}))},[_(u.$slots,"footer")],2)):v("",!0)]})]),_:3},16,["class"])]}),_:3},16)]),_:3},16))}},De={class:"flex flex-col h-full"},Pe={class:"flex items-center gap-3 px-4 py-3 border-b border-neutral-200 dark:border-neutral-800 bg-white/50 dark:bg-neutral-900/50 backdrop-blur sticky top-0 z-10"},Ke={class:"p-4 flex-1 overflow-y-auto"},Ie={class:"max-w-4xl mx-auto space-y-6"},Le={class:"flex items-center justify-between"},qe={class:"flex items-center gap-3"},Ue={class:"mb-6 p-4 bg-slate-50 dark:bg-slate-800/50 rounded-lg border border-slate-200 dark:border-slate-700"},Be={class:"flex flex-col gap-2"},Ee={class:"flex gap-2"},je={class:"flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300"},Fe={key:0,class:"mb-6 p-4 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg"},Oe={class:"flex items-start gap-3"},Te={class:"flex-1"},Me={class:"mt-3 flex items-center gap-2"},ze={class:"flex-1 p-2 bg-white dark:bg-slate-900 rounded border border-green-200 dark:border-green-800 font-mono text-sm break-all"},Ne={key:1,class:"py-8 text-center"},Re={key:2,class:"py-8 text-center text-slate-400"},Ve={key:3,class:"space-y-1"},Ge={class:"min-w-0"},Ye={class:"font-medium text-slate-900 dark:text-slate-100 truncate"},He={class:"text-xs text-slate-500 flex items-center gap-3 mt-1"},Je={class:"font-mono bg-slate-100 dark:bg-slate-800 px-1.5 py-0.5 rounded"},Qe={key:0},We={class:"flex items-center gap-2"},Ze={class:"flex items-center gap-2 text-xs text-slate-500 dark:text-slate-300"},Xe=["checked","onChange"],et={class:"flex items-center justify-between"},tt={class:"flex items-center gap-3"},st={key:0,class:"py-4 text-center text-slate-400"},at={key:1,class:"py-4 text-center text-slate-400"},lt={key:2,class:"space-y-1"},ot={class:"flex items-center justify-between"},nt={class:"min-w-0"},rt={class:"font-medium text-slate-900 dark:text-slate-100 truncate"},it={class:"text-xs text-slate-500 flex items-center gap-3 mt-1"},dt={class:"font-mono bg-slate-100 dark:bg-slate-800 px-1.5 py-0.5 rounded"},ct={class:"flex items-center gap-1 text-blue-700 dark:text-blue-200"},ut={class:"mt-8 pt-8 border-t border-neutral-200 dark:border-neutral-800"},ft={class:"bg-red-50 dark:bg-red-900/10 border border-red-200 dark:border-red-900/50 rounded-lg p-4 flex items-center justify-between"},pt={class:"flex items-center gap-2 text-amber-600"},mt={class:"flex justify-end"},vt={class:"flex items-center gap-2 text-red-600"},xt={class:"flex justify-end gap-2"},yt={class:"flex items-center gap-2 text-red-600"},bt={class:"flex justify-end gap-2"},$t=ue({__name:"settings",setup(d){const{isSidebarOpen:z}=Ce(),i=b([]),S=b([]),c=b(!1),B=b(!1),g=b(""),K=b(!1),D=b(null),E=b(!1),I=async()=>{c.value=!0;try{const o=await $fetch("/api/keys");i.value=o}catch(o){console.error("Failed to fetch keys",o)}finally{c.value=!1}},p=async()=>{B.value=!0;try{const o=await $fetch("/api/keys/shared");S.value=o}catch(o){console.error("Failed to fetch shared keys",o)}finally{B.value=!1}},u=async()=>{if(g.value){E.value=!0;try{const o=await $fetch("/api/keys",{method:"POST",body:{description:g.value,isShared:K.value}});D.value=o.token,g.value="",K.value=!1,await I(),await p()}catch(o){console.error("Failed to create key",o)}finally{E.value=!1}}},m=b(!1),w=b(null),L=o=>{w.value=o,m.value=!0},q=async()=>{if(w.value)try{await $fetch(`/api/keys/${w.value}`,{method:"DELETE"}),await I(),await p()}catch(o){console.error("Failed to revoke key",o)}finally{m.value=!1,w.value=null}},U=async(o,t)=>{try{await $fetch(`/api/keys/${o.id}`,{method:"PUT",body:{description:t.description??o.description,isShared:t.isShared??o.isShared}}),await Promise.all([I(),p()])}catch(y){console.error("Failed to update key",y)}},O=()=>{D.value&&navigator.clipboard.writeText(D.value)},h=b(!1),$=b(!1),T=()=>{if(i.value.length>0){$.value=!0;return}h.value=!0},M=async()=>{var o;try{await $fetch("/api/auth/me",{method:"DELETE"}),window.location.href="/"}catch(t){console.error("Failed to delete account",t),t.statusCode===409?(h.value=!1,$.value=!0):alert(((o=t.data)==null?void 0:o.error)||"Failed to delete account")}finally{h.value=!1}};return fe(()=>{I(),p()}),(o,t)=>{const y=te,C=xe,se=ye,j=be,N=Se;return r(),f("div",De,[e("header",Pe,[a(y,{icon:"i-lucide-menu",variant:"ghost",color:"neutral",class:"lg:hidden",onClick:t[0]||(t[0]=s=>z.value=!0)}),t[10]||(t[10]=e("h1",{class:"text-xl font-semibold text-slate-900 dark:text-slate-100"}," Settings ",-1))]),e("div",Ke,[e("div",Ie,[a(j,null,{header:n(()=>[e("div",Le,[e("div",qe,[a(C,{name:"i-lucide-key",class:"text-xl text-slate-400"}),t[11]||(t[11]=e("div",null,[e("h2",{class:"font-semibold text-slate-100"},"API Keys"),e("p",{class:"text-sm text-slate-400"}," Manage your personal access tokens for the Terraform CLI. ")],-1))])])]),default:n(()=>[e("div",Ue,[t[13]||(t[13]=e("h3",{class:"text-sm font-medium mb-3 text-slate-700 dark:text-slate-300"}," Generate New Key ",-1)),e("div",Be,[e("div",Ee,[a(se,{modelValue:l(g),"onUpdate:modelValue":t[1]||(t[1]=s=>F(g)?g.value=s:null),placeholder:"Key Description (e.g. Laptop CLI)",class:"flex-1",onKeyup:pe(u,["enter"])},null,8,["modelValue"]),a(y,{label:"Generate",color:"primary",loading:l(E),disabled:!l(g),onClick:u},null,8,["loading","disabled"])]),e("label",je,[me(e("input",{type:"checkbox","onUpdate:modelValue":t[2]||(t[2]=s=>F(K)?K.value=s:null),class:"accent-blue-500"},null,512),[[ve,l(K)]]),t[12]||(t[12]=P(" Shared "))])])]),l(D)?(r(),f("div",Fe,[e("div",Oe,[a(C,{name:"i-lucide-check-circle",class:"text-green-500 text-xl mt-0.5"}),e("div",Te,[t[14]||(t[14]=e("h3",{class:"font-medium text-green-800 dark:text-green-200"}," API Key Generated ",-1)),t[15]||(t[15]=e("p",{class:"text-sm text-green-700 dark:text-green-300 mt-1"}," Make sure to copy your personal access token now. You won't be able to see it again! ",-1)),e("div",Me,[e("code",ze,x(l(D)),1),a(y,{icon:"i-lucide-copy",color:"neutral",variant:"soft",size:"sm",onClick:O})])]),a(y,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"sm",onClick:t[3]||(t[3]=s=>D.value=null)})])])):v("",!0),l(c)?(r(),f("div",Ne,[a(C,{name:"i-lucide-loader-2",class:"animate-spin text-2xl text-slate-400"})])):l(i).length===0?(r(),f("div",Re,t[16]||(t[16]=[e("p",null,"No API keys found. Generate one to get started.",-1)]))):(r(),f("div",Ve,[(r(!0),f(W,null,Z(l(i),s=>(r(),f("div",{key:s.id,class:"flex items-center justify-between p-3 rounded-lg hover:bg-slate-50 dark:hover:bg-slate-800/50 transition-colors"},[e("div",Ge,[e("div",Ye,x(s.description),1),e("div",He,[e("span",Je,x(s.prefix)+"... ",1),e("span",{class:A(["flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px]",s.isShared?"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-200":"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-300"])},[a(C,{name:s.isShared?"i-lucide-users":"i-lucide-user",class:"text-[13px]"},null,8,["name"]),P(" "+x(s.isShared?"Shared":"Private"),1)],2),e("span",null,"Created "+x(new Date(s.createdAt).toLocaleDateString()),1),s.lastUsedAt?(r(),f("span",Qe," Last used "+x(new Date(s.lastUsedAt).toLocaleDateString()),1)):v("",!0)])]),e("div",We,[e("label",Ze,[t[17]||(t[17]=P(" Shared ")),e("input",{type:"checkbox",checked:s.isShared,onChange:R=>U(s,{isShared:R.target.checked}),class:"accent-blue-500"},null,40,Xe)]),a(y,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:R=>L(s.id)},null,8,["onClick"])])]))),128))]))]),_:1}),a(j,null,{header:n(()=>[e("div",et,[e("div",tt,[a(C,{name:"i-lucide-users",class:"text-xl text-slate-400"}),t[18]||(t[18]=e("div",null,[e("h2",{class:"font-semibold text-slate-100"},"Shared API Keys"),e("p",{class:"text-sm text-slate-400"}," Keys marked as shared are visible to everyone with ownership shown. ")],-1))])])]),default:n(()=>[l(B)?(r(),f("div",st," Loading shared keys... ")):l(S).length===0?(r(),f("div",at," No shared API keys yet. ")):(r(),f("div",lt,[(r(!0),f(W,null,Z(l(S),s=>(r(),f("div",{key:s.id,class:"p-3 rounded-lg border border-slate-200 dark:border-slate-800 bg-slate-50/70 dark:bg-slate-800/40"},[e("div",ot,[e("div",nt,[e("div",rt,x(s.description),1),e("div",it,[e("span",dt,x(s.prefix)+"... ",1),e("span",ct,[a(C,{name:"i-lucide-user",class:"text-[13px]"}),P(" "+x(s.ownerDisplay||s.ownerUsername||s.ownerEmail||"Unknown owner"),1)]),e("span",null,"Created "+x(new Date(s.createdAt).toLocaleDateString()),1)])])])]))),128))]))]),_:1}),e("div",ut,[t[20]||(t[20]=e("h2",{class:"text-lg font-semibold text-red-600 dark:text-red-400 mb-4"}," Danger Zone ",-1)),e("div",ft,[t[19]||(t[19]=e("div",null,[e("h3",{class:"font-medium text-red-900 dark:text-red-200"}," Delete Account "),e("p",{class:"text-sm text-red-700 dark:text-red-300 mt-1"}," Permanently delete your account and all associated data. You must delete all API keys first. ")],-1)),a(y,{color:"error",variant:"solid",label:"Delete Account",onClick:T})])]),a(N,{open:l($),"onUpdate:open":t[5]||(t[5]=s=>F($)?$.value=s:null)},{content:n(()=>[a(j,null,{header:n(()=>[e("div",pt,[a(C,{name:"i-lucide-alert-circle",class:"text-xl"}),t[21]||(t[21]=e("h3",{class:"font-semibold"},"Cannot Delete Account",-1))])]),footer:n(()=>[e("div",mt,[a(y,{color:"neutral",label:"Close",onClick:t[4]||(t[4]=s=>$.value=!1)})])]),default:n(()=>[t[22]||(t[22]=e("p",{class:"text-slate-600 dark:text-slate-300"}," You must delete all API keys before you can delete your account. Please revoke all active keys and try again. ",-1))]),_:1,__:[22]})]),_:1},8,["open"]),a(N,{open:l(m),"onUpdate:open":t[7]||(t[7]=s=>F(m)?m.value=s:null)},{content:n(()=>[a(j,null,{header:n(()=>[e("div",vt,[a(C,{name:"i-lucide-trash-2",class:"text-xl"}),t[23]||(t[23]=e("h3",{class:"font-semibold"},"Revoke API Key",-1))])]),footer:n(()=>[e("div",xt,[a(y,{color:"neutral",variant:"ghost",label:"Cancel",onClick:t[6]||(t[6]=s=>m.value=!1)}),a(y,{color:"error",label:"Revoke Key",onClick:q})])]),default:n(()=>[t[24]||(t[24]=e("p",{class:"text-slate-600 dark:text-slate-300"}," Are you sure you want to revoke this API key? This action cannot be undone. ",-1))]),_:1,__:[24]})]),_:1},8,["open"]),a(N,{open:l(h),"onUpdate:open":t[9]||(t[9]=s=>F(h)?h.value=s:null)},{content:n(()=>[a(j,null,{header:n(()=>[e("div",yt,[a(C,{name:"i-lucide-alert-triangle",class:"text-xl"}),t[25]||(t[25]=e("h3",{class:"font-semibold"},"Delete Account",-1))])]),footer:n(()=>[e("div",bt,[a(y,{color:"neutral",variant:"ghost",label:"Cancel",onClick:t[8]||(t[8]=s=>h.value=!1)}),a(y,{color:"error",label:"Delete Account",onClick:M})])]),default:n(()=>[t[26]||(t[26]=e("p",{class:"text-slate-600 dark:text-slate-300"}," Are you sure you want to delete your account? This action cannot be undone. ",-1))]),_:1,__:[26]})]),_:1},8,["open"])])])])}}});export{$t as default}; diff --git a/TerraformRegistry/web/_nuxt/D5zdv4Fl.js b/TerraformRegistry/web/_nuxt/D5zdv4Fl.js new file mode 100644 index 0000000..03f5a24 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/D5zdv4Fl.js @@ -0,0 +1 @@ +import{e as A,q as B,f as $,r as d,h as L,s as U,c as i,a as n,l as x,m as V,b as l,j as e,w as h,o as t,n as F,F as M,p as O,i as S,d as T,t as q}from"./BnS3deBy.js";import{_ as z}from"./DcGCRxN2.js";import{_ as I}from"./C0rx7CO6.js";const R={class:"min-h-screen flex items-center justify-center px-4"},W={class:"max-w-md w-full"},D={class:"text-center mb-8"},E={class:"w-16 h-16 mx-auto mb-6 bg-neutral-800 rounded-2xl flex items-center justify-center"},G={key:0,class:"flex justify-center py-8"},H={key:1,class:"space-y-4"},J={key:2,class:"text-center py-8"},ee=A({__name:"login",setup(K){const g=B(),{loginWithOidc:p,isAuthenticated:y,fetchProviders:v,providers:b,hasOidcProviders:k,checkSession:w}=$(),u=d(!1),m=d(!0),_=d(null),c=d(""),f=g.query.error;if(f){const o={oauth_denied:"Authentication was denied or cancelled",invalid_state:"Invalid authentication state. Please try again.",no_code:"No authorization code received",exchange_failed:"Failed to complete authentication. Please try again."};c.value=o[f]||"Authentication failed"}L(async()=>{await v(),m.value=!1,await w(),y.value&&U("/")});const C=o=>{u.value=!0,_.value=o,c.value="",p(o)};return(o,a)=>{const r=F,N=z,P=S,j=I;return t(),i("div",R,[n("div",W,[n("div",D,[n("div",E,[l(r,{name:"i-lucide-box",class:"text-3xl text-white"})]),a[0]||(a[0]=n("h1",{class:"text-3xl font-bold text-slate-100 mb-2"},"Welcome",-1)),a[1]||(a[1]=n("p",{class:"text-slate-400"},"Sign in to access your Terraform Registry",-1))]),e(c)?(t(),x(N,{key:0,color:"error",variant:"soft",title:e(c),icon:"i-lucide-alert-circle",class:"mb-4"},null,8,["title"])):V("",!0),l(j,null,{default:h(()=>[e(m)?(t(),i("div",G,[l(r,{name:"i-lucide-loader-2",class:"animate-spin text-3xl text-blue-500"})])):e(k)?(t(),i("div",H,[(t(!0),i(M,null,O(e(b),s=>(t(),x(P,{key:s.name,loading:e(u)&&e(_)===s.name,disabled:e(u),class:"w-full justify-center font-medium",size:"xl",color:s.name==="github"?"neutral":"primary",variant:"solid",onClick:Q=>C(s.name)},{default:h(()=>[l(r,{name:s.icon,class:"text-xl mr-2"},null,8,["name"]),T(" Continue with "+q(s.displayName),1)]),_:2},1032,["loading","disabled","color","onClick"]))),128))])):(t(),i("div",J,[l(r,{name:"i-lucide-triangle-alert",class:"text-4xl text-amber-500 mb-4"}),a[2]||(a[2]=n("p",{class:"text-slate-400"},"No authentication providers configured.",-1))]))]),_:1})])])}}});export{ee as default}; diff --git a/TerraformRegistry/web/_nuxt/D6LYtxie.js b/TerraformRegistry/web/_nuxt/D6LYtxie.js new file mode 100644 index 0000000..7fe4477 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/D6LYtxie.js @@ -0,0 +1 @@ +import{_ as s}from"./DlAUqK2U.js";import{u as a,c as i,o as u,a as e,t as o}from"./BnS3deBy.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return a({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(u(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},h=s(f,[["__scopeId","data-v-4b6f0a29"]]);export{h as default}; diff --git a/TerraformRegistry/web/_nuxt/DEdsACyT.js b/TerraformRegistry/web/_nuxt/DEdsACyT.js new file mode 100644 index 0000000..f50375d --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DEdsACyT.js @@ -0,0 +1 @@ +import{X as e,f as a,s as o}from"./BnS3deBy.js";const i=e(s=>{const{isAuthenticated:t}=a();if(!t.value)return o("/login")});export{i as default}; diff --git a/TerraformRegistry/web/_nuxt/DcGCRxN2.js b/TerraformRegistry/web/_nuxt/DcGCRxN2.js new file mode 100644 index 0000000..755a8df --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DcGCRxN2.js @@ -0,0 +1 @@ +import{v as I,x as L,y as O,g as E,z as B,l as u,o as r,w as T,A as g,a as G,c as d,m as n,B as H,C as v,n as J,D as l,d as V,t as j,F as A,p as N,i as f,j as y,P as K}from"./BnS3deBy.js";const M={slots:{root:"relative overflow-hidden w-full rounded-lg p-4 flex gap-2.5",wrapper:"min-w-0 flex-1 flex flex-col",title:"text-sm font-medium",description:"text-sm opacity-90",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xl",actions:"flex flex-wrap gap-1.5 shrink-0",close:"p-0"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},orientation:{horizontal:{root:"items-center",actions:"items-center"},vertical:{root:"items-start",actions:"items-start mt-2.5"}},title:{true:{description:"mt-1"}}},compoundVariants:[{color:"primary",variant:"solid",class:{root:"bg-primary text-inverted"}},{color:"secondary",variant:"solid",class:{root:"bg-secondary text-inverted"}},{color:"success",variant:"solid",class:{root:"bg-success text-inverted"}},{color:"info",variant:"solid",class:{root:"bg-info text-inverted"}},{color:"warning",variant:"solid",class:{root:"bg-warning text-inverted"}},{color:"error",variant:"solid",class:{root:"bg-error text-inverted"}},{color:"primary",variant:"outline",class:{root:"text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"outline",class:{root:"text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"outline",class:{root:"text-success ring ring-inset ring-success/25"}},{color:"info",variant:"outline",class:{root:"text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"outline",class:{root:"text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"outline",class:{root:"text-error ring ring-inset ring-error/25"}},{color:"primary",variant:"soft",class:{root:"bg-primary/10 text-primary"}},{color:"secondary",variant:"soft",class:{root:"bg-secondary/10 text-secondary"}},{color:"success",variant:"soft",class:{root:"bg-success/10 text-success"}},{color:"info",variant:"soft",class:{root:"bg-info/10 text-info"}},{color:"warning",variant:"soft",class:{root:"bg-warning/10 text-warning"}},{color:"error",variant:"soft",class:{root:"bg-error/10 text-error"}},{color:"primary",variant:"subtle",class:{root:"bg-primary/10 text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"subtle",class:{root:"bg-secondary/10 text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"subtle",class:{root:"bg-success/10 text-success ring ring-inset ring-success/25"}},{color:"info",variant:"subtle",class:{root:"bg-info/10 text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"subtle",class:{root:"bg-warning/10 text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"subtle",class:{root:"bg-error/10 text-error ring ring-inset ring-error/25"}},{color:"neutral",variant:"solid",class:{root:"text-inverted bg-inverted"}},{color:"neutral",variant:"outline",class:{root:"text-highlighted bg-default ring ring-inset ring-default"}},{color:"neutral",variant:"soft",class:{root:"text-highlighted bg-elevated/50"}},{color:"neutral",variant:"subtle",class:{root:"text-highlighted bg-elevated/50 ring ring-inset ring-accented"}}],defaultVariants:{color:"primary",variant:"solid"}},R={__name:"Alert",props:{as:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},icon:{type:String,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},orientation:{type:null,required:!1,default:"vertical"},actions:{type:Array,required:!1},close:{type:[Boolean,Object],required:!1},closeIcon:{type:String,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1}},emits:["update:open"],setup(t,{emit:P}){const e=t,D=P,c=I(),{t:F}=L(),m=O(),a=E(()=>{var i;return B({extend:B(M),...((i=m.ui)==null?void 0:i.alert)||{}})({color:e.color,variant:e.variant,orientation:e.orientation,title:!!e.title||!!c.title})});return(i,x)=>{var b;return r(),u(y(K),{as:t.as,"data-orientation":t.orientation,class:l(a.value.root({class:[(b=e.ui)==null?void 0:b.root,e.class]}))},{default:T(()=>{var p,w,h,k,z,q,S,$;return[g(i.$slots,"leading",{},()=>{var s,o,C;return[t.avatar?(r(),u(H,v({key:0,size:((s=e.ui)==null?void 0:s.avatarSize)||a.value.avatarSize()},t.avatar,{class:a.value.avatar({class:(o=e.ui)==null?void 0:o.avatar})}),null,16,["size","class"])):t.icon?(r(),u(J,{key:1,name:t.icon,class:l(a.value.icon({class:(C=e.ui)==null?void 0:C.icon}))},null,8,["name","class"])):n("",!0)]}),G("div",{class:l(a.value.wrapper({class:(p=e.ui)==null?void 0:p.wrapper}))},[t.title||c.title?(r(),d("div",{key:0,class:l(a.value.title({class:(w=e.ui)==null?void 0:w.title}))},[g(i.$slots,"title",{},()=>[V(j(t.title),1)])],2)):n("",!0),t.description||c.description?(r(),d("div",{key:1,class:l(a.value.description({class:(h=e.ui)==null?void 0:h.description}))},[g(i.$slots,"description",{},()=>[V(j(t.description),1)])],2)):n("",!0),t.orientation==="vertical"&&((k=t.actions)!=null&&k.length||c.actions)?(r(),d("div",{key:2,class:l(a.value.actions({class:(z=e.ui)==null?void 0:z.actions}))},[g(i.$slots,"actions",{},()=>[(r(!0),d(A,null,N(t.actions,(s,o)=>(r(),u(f,v({key:o,size:"xs"},{ref_for:!0},s),null,16))),128))])],2)):n("",!0)],2),t.orientation==="horizontal"&&((q=t.actions)!=null&&q.length||c.actions)||t.close?(r(),d("div",{key:0,class:l(a.value.actions({class:(S=e.ui)==null?void 0:S.actions,orientation:"horizontal"}))},[t.orientation==="horizontal"&&(($=t.actions)!=null&&$.length||c.actions)?g(i.$slots,"actions",{key:0},()=>[(r(!0),d(A,null,N(t.actions,(s,o)=>(r(),u(f,v({key:o,size:"xs"},{ref_for:!0},s),null,16))),128))]):n("",!0),g(i.$slots,"close",{ui:a.value},()=>{var s;return[t.close?(r(),u(f,v({key:0,icon:t.closeIcon||y(m).ui.icons.close,size:"md",color:"neutral",variant:"link","aria-label":y(F)("alert.close")},typeof t.close=="object"?t.close:{},{class:a.value.close({class:(s=e.ui)==null?void 0:s.close}),onClick:x[0]||(x[0]=o=>D("update:open",!1))}),null,16,["icon","aria-label","class"])):n("",!0)]})],2)):n("",!0)]}),_:3},8,["as","data-orientation","class"])}}};export{R as _}; diff --git a/TerraformRegistry/web/_nuxt/DlAUqK2U.js b/TerraformRegistry/web/_nuxt/DlAUqK2U.js new file mode 100644 index 0000000..718edd3 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DlAUqK2U.js @@ -0,0 +1 @@ +const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _}; diff --git a/TerraformRegistry/web/_nuxt/DsdUjOsK.js b/TerraformRegistry/web/_nuxt/DsdUjOsK.js new file mode 100644 index 0000000..c835440 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DsdUjOsK.js @@ -0,0 +1,5 @@ +import{aQ as ue,aR as le,aC as ce,aS as de,aT as fe,aU as pe,aV as me,F as ve,aW as ye,aX as be,aY as ge,aZ as he,ay as Ee,a_ as Ce,a$ as we,b0 as Se,b1 as Oe,b2 as _e,b3 as De,b4 as Ae,b5 as Be,b6 as Re,b7 as Te,b8 as Fe,b9 as ke,ba as Pe,g as N,bb as Ie,l as y,m as G,c as $e,a as Me,bc as Ke,bd as Le,be as Ne,bf as xe,aP as Ue,bg as Ve,d as He,b as x,bh as We,bi as je,e as C,bj as Ye,bk as ze,bl as qe,bm as Ge,bn as Qe,bo as Xe,bp as Je,bq as Ze,br as et,bs as tt,bt as st,bu as at,$ as ot,bv as nt,bw as rt,K as Q,bx as it,by as ut,bz as lt,bA as ct,bB as dt,bC as ft,bD as pt,bE as mt,bF as vt,bG as yt,bH as bt,bI as gt,bJ as ht,bK as Et,bL as Ct,k as wt,bM as St,bN as Ot,bO as _t,bP as Dt,af as At,R as Bt,C as S,aa as U,D as Rt,J as X,ai as Tt,bQ as Ft,aq as kt,bR as Pt,bS as It,bT as $t,bU as Mt,h as V,bV as Kt,bW as Lt,a0 as Nt,bX as xt,am as J,bY as Ut,bZ as Vt,o as b,b_ as Ht,b$ as Wt,c0 as jt,c1 as Yt,c2 as zt,aH as Z,c3 as qt,r as _,c4 as Gt,c5 as Qt,p as Xt,A as g,c6 as Jt,c7 as Zt,at as es,c8 as ts,c9 as ss,ca as as,cb as os,cc as ns,cd as rs,a1 as is,Y as us,ce as ls,cf as cs,cg as ds,t as fs,ch as ps,L as ms,ci as vs,I as ys,a6 as ee,cj as bs,ck as gs,cl as hs,j as i,cm as Es,cn as Cs,co as ws,cp as Ss,cq as te,S as Os,cr as _s,cs as Ds,v as As,ct as Bs,cu as Rs,Q as Ts,cv as Fs,cw as ks,cx as Ps,cy as Is,cz as $s,cA as Ms,cB as Ks,Z as H,ah as K,ad as Ls,cC as Ns,cD as xs,w as m,cE as Us,O as Vs,N as Hs,cF as Ws,ao as js,cG as Ys,a4 as se,a5 as zs,a3 as qs,a7 as O,P as F,ab as R,cH as Gs,al as ae,cI as B,cJ as I,cK as Qs,cL as Xs,cM as $,cN as j,cO as Js,an as Zs,ae as ea,au as W,a9 as oe,ak as ta,cP as sa,aF as aa,cQ as Y,a8 as oa,ap as na}from"./BnS3deBy.js";/** +* vue v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const ra=()=>{},ia=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:ue,BaseTransitionPropsValidators:le,Comment:ce,DeprecationTypes:de,EffectScope:fe,ErrorCodes:pe,ErrorTypeStrings:me,Fragment:ve,KeepAlive:ye,ReactiveEffect:be,Static:ge,Suspense:he,Teleport:Ee,Text:Ce,TrackOpTypes:we,Transition:Se,TransitionGroup:Oe,TriggerOpTypes:_e,VueElement:De,assertNumber:Ae,callWithAsyncErrorHandling:Be,callWithErrorHandling:Re,camelize:Te,capitalize:Fe,cloneVNode:ke,compatUtils:Pe,compile:ra,computed:N,createApp:Ie,createBlock:y,createCommentVNode:G,createElementBlock:$e,createElementVNode:Me,createHydrationRenderer:Ke,createPropsRestProxy:Le,createRenderer:Ne,createSSRApp:xe,createSlots:Ue,createStaticVNode:Ve,createTextVNode:He,createVNode:x,customRef:We,defineAsyncComponent:je,defineComponent:C,defineCustomElement:Ye,defineEmits:ze,defineExpose:qe,defineModel:Ge,defineOptions:Qe,defineProps:Xe,defineSSRCustomElement:Je,defineSlots:Ze,devtools:et,effect:tt,effectScope:st,getCurrentInstance:at,getCurrentScope:ot,getCurrentWatcher:nt,getTransitionRawChildren:rt,guardReactiveProps:Q,h:it,handleError:ut,hasInjectionContext:lt,hydrate:ct,hydrateOnIdle:dt,hydrateOnInteraction:ft,hydrateOnMediaQuery:pt,hydrateOnVisible:mt,initCustomFormatter:vt,initDirectivesForSSR:yt,inject:bt,isMemoSame:gt,isProxy:ht,isReactive:Et,isReadonly:Ct,isRef:wt,isRuntimeOnly:St,isShallow:Ot,isVNode:_t,markRaw:Dt,mergeDefaults:At,mergeModels:Bt,mergeProps:S,nextTick:U,normalizeClass:Rt,normalizeProps:X,normalizeStyle:Tt,onActivated:Ft,onBeforeMount:kt,onBeforeUnmount:Pt,onBeforeUpdate:It,onDeactivated:$t,onErrorCaptured:Mt,onMounted:V,onRenderTracked:Kt,onRenderTriggered:Lt,onScopeDispose:Nt,onServerPrefetch:xt,onUnmounted:J,onUpdated:Ut,onWatcherCleanup:Vt,openBlock:b,popScopeId:Ht,provide:Wt,proxyRefs:jt,pushScopeId:Yt,queuePostFlushCb:zt,reactive:Z,readonly:qt,ref:_,registerRuntimeCompiler:Gt,render:Qt,renderList:Xt,renderSlot:g,resolveComponent:Jt,resolveDirective:Zt,resolveDynamicComponent:es,resolveFilter:ts,resolveTransitionHooks:ss,setBlockTracking:as,setDevtoolsHook:os,setTransitionHooks:ns,shallowReactive:rs,shallowReadonly:is,shallowRef:us,ssrContextKey:ls,ssrUtils:cs,stop:ds,toDisplayString:fs,toHandlerKey:ps,toHandlers:ms,toRaw:vs,toRef:ys,toRefs:ee,toValue:bs,transformVNodeArgs:gs,triggerRef:hs,unref:i,useAttrs:Es,useCssModule:Cs,useCssVars:ws,useHost:Ss,useId:te,useModel:Os,useSSRContext:_s,useShadowRoot:Ds,useSlots:As,useTemplateRef:Bs,useTransitionState:Rs,vModelCheckbox:Ts,vModelDynamic:Fs,vModelRadio:ks,vModelSelect:Ps,vModelText:Is,vShow:$s,version:Ms,warn:Ks,watch:H,watchEffect:K,watchPostEffect:Ls,watchSyncEffect:Ns,withAsyncContext:xs,withCtx:m,withDefaults:Us,withDirectives:Vs,withKeys:Hs,withMemo:Ws,withModifiers:js,withScopeId:Ys},Symbol.toStringTag,{value:"Module"}));let ua=0;function L(t,s="reka"){var a;if(t)return t;const e=se({useId:void 0});return Object.hasOwn(ia,"useId")?`${s}-${(a=te)==null?void 0:a()}`:e.useId?`${s}-${e.useId()}`:`${s}-${++ua}`}const[D,la]=zs("DialogRoot"),Fa=C({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:!1},modal:{type:Boolean,default:!0}},emits:["update:open"],setup(t,{emit:s}){const e=t,o=qs(e,"open",s,{defaultValue:e.defaultOpen,passive:e.open===void 0}),c=_(),p=_(),{modal:d}=ee(e);return la({open:o,modal:d,openModal:()=>{o.value=!0},onOpenChange:u=>{o.value=u},onOpenToggle:()=>{o.value=!o.value},contentId:"",titleId:"",descriptionId:"",triggerElement:c,contentElement:p}),(u,l)=>g(u.$slots,"default",{open:i(o),close:()=>o.value=!1})}}),ka=C({__name:"DialogClose",props:{asChild:{type:Boolean},as:{default:"button"}},setup(t){const s=t;O();const e=D();return(a,o)=>(b(),y(i(F),S(s,{type:a.as==="button"?"button":void 0,onClick:o[0]||(o[0]=c=>i(e).onOpenChange(!1))}),{default:m(()=>[g(a.$slots,"default")]),_:3},16,["type"]))}}),Pa="menu.itemSelect",z=["Enter"," "],ca=["ArrowDown","PageUp","Home"],da=["ArrowUp","PageDown","End"],Ia=[...ca,...da],$a={ltr:[...z,"ArrowRight"],rtl:[...z,"ArrowLeft"]},Ma={ltr:["ArrowLeft"],rtl:["ArrowRight"]};function fa(t){return t?"open":"closed"}function pa(t){return t==="indeterminate"}function Ka(t){return pa(t)?"indeterminate":t?"checked":"unchecked"}function La(t){const s=R();for(const e of t)if(e===s||(e.focus(),R()!==s))return}function ma(t,s){const{x:e,y:a}=t;let o=!1;for(let c=0,p=s.length-1;ca!=r>a&&e<(l-d)*(a-u)/(r-u)+d&&(o=!o)}return o}function Na(t,s){if(!s)return!1;const e={x:t.clientX,y:t.clientY};return ma(e,s)}function xa(t){return t.pointerType==="mouse"}const va=Gs(()=>_([]));function ya(){const t=va();return{add(s){const e=t.value[0];s!==e&&(e==null||e.pause()),t.value=q(t.value,s),t.value.unshift(s)},remove(s){var e;t.value=q(t.value,s),(e=t.value[0])==null||e.resume()}}}function q(t,s){const e=[...t],a=e.indexOf(s);return a!==-1&&e.splice(a,1),e}function ba(t){return t.filter(s=>s.tagName!=="A")}const ga=C({__name:"FocusScope",props:{loop:{type:Boolean,default:!1},trapped:{type:Boolean,default:!1},asChild:{type:Boolean},as:{}},emits:["mountAutoFocus","unmountAutoFocus"],setup(t,{emit:s}){const e=t,a=s,{currentRef:o,currentElement:c}=O(),p=_(null),d=ya(),u=Z({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});K(r=>{if(!ae)return;const n=c.value;if(!e.trapped)return;function f(w){if(u.paused||!n)return;const A=w.target;n.contains(A)?p.value=A:B(p.value,{select:!0})}function v(w){if(u.paused||!n)return;const A=w.relatedTarget;A!==null&&(n.contains(A)||B(p.value,{select:!0}))}function h(w){n.contains(p.value)||B(n)}document.addEventListener("focusin",f),document.addEventListener("focusout",v);const E=new MutationObserver(h);n&&E.observe(n,{childList:!0,subtree:!0}),r(()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",v),E.disconnect()})}),K(async r=>{const n=c.value;if(await U(),!n)return;d.add(u);const f=R();if(!n.contains(f)){const h=new CustomEvent(I,j);n.addEventListener(I,E=>a("mountAutoFocus",E)),n.dispatchEvent(h),h.defaultPrevented||(Qs(ba(Xs(n)),{select:!0}),R()===f&&B(n))}r(()=>{n.removeEventListener(I,w=>a("mountAutoFocus",w));const h=new CustomEvent($,j),E=w=>{a("unmountAutoFocus",w)};n.addEventListener($,E),n.dispatchEvent(h),setTimeout(()=>{h.defaultPrevented||B(f??document.body,{select:!0}),n.removeEventListener($,E),d.remove(u)},0)})});function l(r){if(!e.loop&&!e.trapped||u.paused)return;const n=r.key==="Tab"&&!r.altKey&&!r.ctrlKey&&!r.metaKey,f=R();if(n&&f){const v=r.currentTarget,[h,E]=Js(v);h&&E?!r.shiftKey&&f===E?(r.preventDefault(),e.loop&&B(h,{select:!0})):r.shiftKey&&f===h&&(r.preventDefault(),e.loop&&B(E,{select:!0})):f===v&&r.preventDefault()}}return(r,n)=>(b(),y(i(F),{ref_key:"currentRef",ref:o,tabindex:"-1","as-child":r.asChild,as:r.as,onKeydown:l},{default:m(()=>[g(r.$slots,"default")]),_:3},8,["as-child","as"]))}}),ne=C({__name:"DialogContentImpl",props:{forceMount:{type:Boolean},trapFocus:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(t,{emit:s}){const e=t,a=s,o=D(),{forwardRef:c,currentElement:p}=O();return o.titleId||(o.titleId=L(void 0,"reka-dialog-title")),o.descriptionId||(o.descriptionId=L(void 0,"reka-dialog-description")),V(()=>{o.contentElement=p,R()!==document.body&&(o.triggerElement.value=R())}),(d,u)=>(b(),y(i(ga),{"as-child":"",loop:"",trapped:e.trapFocus,onMountAutoFocus:u[5]||(u[5]=l=>a("openAutoFocus",l)),onUnmountAutoFocus:u[6]||(u[6]=l=>a("closeAutoFocus",l))},{default:m(()=>[x(i(Zs),S({id:i(o).contentId,ref:i(c),as:d.as,"as-child":d.asChild,"disable-outside-pointer-events":d.disableOutsidePointerEvents,role:"dialog","aria-describedby":i(o).descriptionId,"aria-labelledby":i(o).titleId,"data-state":i(fa)(i(o).open.value)},d.$attrs,{onDismiss:u[0]||(u[0]=l=>i(o).onOpenChange(!1)),onEscapeKeyDown:u[1]||(u[1]=l=>a("escapeKeyDown",l)),onFocusOutside:u[2]||(u[2]=l=>a("focusOutside",l)),onInteractOutside:u[3]||(u[3]=l=>a("interactOutside",l)),onPointerDownOutside:u[4]||(u[4]=l=>a("pointerDownOutside",l))}),{default:m(()=>[g(d.$slots,"default")]),_:3},16,["id","as","as-child","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped"]))}});var ha=function(t){if(typeof document>"u")return null;var s=Array.isArray(t)?t[0]:t;return s.ownerDocument.body},T=new WeakMap,k=new WeakMap,P={},M=0,re=function(t){return t&&(t.host||re(t.parentNode))},Ea=function(t,s){return s.map(function(e){if(t.contains(e))return e;var a=re(e);return a&&t.contains(a)?a:(console.error("aria-hidden",e,"in not contained inside",t,". Doing nothing"),null)}).filter(function(e){return!!e})},Ca=function(t,s,e,a){var o=Ea(s,Array.isArray(t)?t:[t]);P[e]||(P[e]=new WeakMap);var c=P[e],p=[],d=new Set,u=new Set(o),l=function(n){!n||d.has(n)||(d.add(n),l(n.parentNode))};o.forEach(l);var r=function(n){!n||u.has(n)||Array.prototype.forEach.call(n.children,function(f){if(d.has(f))r(f);else try{var v=f.getAttribute(a),h=v!==null&&v!=="false",E=(T.get(f)||0)+1,w=(c.get(f)||0)+1;T.set(f,E),c.set(f,w),p.push(f),E===1&&h&&k.set(f,!0),w===1&&f.setAttribute(e,"true"),h||f.setAttribute(a,"true")}catch(A){console.error("aria-hidden: cannot operate on ",f,A)}})};return r(s),d.clear(),M++,function(){p.forEach(function(n){var f=T.get(n)-1,v=c.get(n)-1;T.set(n,f),c.set(n,v),f||(k.has(n)||n.removeAttribute(a),k.delete(n)),v||n.removeAttribute(e)}),M--,M||(T=new WeakMap,T=new WeakMap,k=new WeakMap,P={})}},wa=function(t,s,e){e===void 0&&(e="data-aria-hidden");var a=Array.from(Array.isArray(t)?t:[t]),o=ha(t);return o?(a.push.apply(a,Array.from(o.querySelectorAll("[aria-live], script"))),Ca(a,o,e,"aria-hidden")):function(){return null}};function Sa(t){let s;H(()=>ea(t),e=>{e?s=wa(e):s&&s()}),J(()=>{s&&s()})}const Oa=C({__name:"DialogContentModal",props:{forceMount:{type:Boolean},trapFocus:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(t,{emit:s}){const e=t,a=s,o=D(),c=W(a),{forwardRef:p,currentElement:d}=O();return Sa(d),(u,l)=>(b(),y(ne,S({...e,...i(c)},{ref:i(p),"trap-focus":i(o).open.value,"disable-outside-pointer-events":!0,onCloseAutoFocus:l[0]||(l[0]=r=>{var n;r.defaultPrevented||(r.preventDefault(),(n=i(o).triggerElement.value)==null||n.focus())}),onPointerDownOutside:l[1]||(l[1]=r=>{const n=r.detail.originalEvent,f=n.button===0&&n.ctrlKey===!0;(n.button===2||f)&&r.preventDefault()}),onFocusOutside:l[2]||(l[2]=r=>{r.preventDefault()})}),{default:m(()=>[g(u.$slots,"default")]),_:3},16,["trap-focus"]))}}),_a=C({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean},trapFocus:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(t,{emit:s}){const e=t,o=W(s);O();const c=D(),p=_(!1),d=_(!1);return(u,l)=>(b(),y(ne,S({...e,...i(o)},{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:l[0]||(l[0]=r=>{var n;r.defaultPrevented||(p.value||(n=i(c).triggerElement.value)==null||n.focus(),r.preventDefault()),p.value=!1,d.value=!1}),onInteractOutside:l[1]||(l[1]=r=>{var v;r.defaultPrevented||(p.value=!0,r.detail.originalEvent.type==="pointerdown"&&(d.value=!0));const n=r.target;((v=i(c).triggerElement.value)==null?void 0:v.contains(n))&&r.preventDefault(),r.detail.originalEvent.type==="focusin"&&d.value&&r.preventDefault()})}),{default:m(()=>[g(u.$slots,"default")]),_:3},16))}}),Ua=C({__name:"DialogContent",props:{forceMount:{type:Boolean},trapFocus:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(t,{emit:s}){const e=t,a=s,o=D(),c=W(a),{forwardRef:p}=O();return(d,u)=>(b(),y(i(oe),{present:d.forceMount||i(o).open.value},{default:m(()=>[i(o).modal.value?(b(),y(Oa,S({key:0,ref:i(p)},{...e,...i(c),...d.$attrs}),{default:m(()=>[g(d.$slots,"default")]),_:3},16)):(b(),y(_a,S({key:1,ref:i(p)},{...e,...i(c),...d.$attrs}),{default:m(()=>[g(d.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),Va=C({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{default:"p"}},setup(t){const s=t;O();const e=D();return(a,o)=>(b(),y(i(F),S(s,{id:i(e).descriptionId}),{default:m(()=>[g(a.$slots,"default")]),_:3},16,["id"]))}}),Da=ta(()=>{const t=_(new Map),s=_(),e=N(()=>{for(const p of t.value.values())if(p)return!0;return!1}),a=se({scrollBody:_(!0)});let o=null;const c=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=s.value??"",Y&&(o==null||o()),s.value=void 0};return H(e,(p,d)=>{var n;if(!ae)return;if(!p){d&&c();return}s.value===void 0&&(s.value=document.body.style.overflow);const u=window.innerWidth-document.documentElement.clientWidth,l={padding:u,margin:0},r=(n=a.scrollBody)!=null&&n.value?typeof a.scrollBody.value=="object"?aa({padding:a.scrollBody.value.padding===!0?u:a.scrollBody.value.padding,margin:a.scrollBody.value.margin===!0?u:a.scrollBody.value.margin},l):l:{padding:0,margin:0};u>0&&(document.body.style.paddingRight=typeof r.padding=="number"?`${r.padding}px`:String(r.padding),document.body.style.marginRight=typeof r.margin=="number"?`${r.margin}px`:String(r.margin),document.documentElement.style.setProperty("--scrollbar-width",`${u}px`),document.body.style.overflow="hidden"),Y&&(o=oa(document,"touchmove",f=>Ba(f),{passive:!1})),U(()=>{document.body.style.pointerEvents="none",document.body.style.overflow="hidden"})},{immediate:!0,flush:"sync"}),t});function Aa(t){const s=Math.random().toString(36).substring(2,7),e=Da();e.value.set(s,t??!1);const a=N({get:()=>e.value.get(s)??!1,set:o=>e.value.set(s,o)});return sa(()=>{e.value.delete(s)}),a}function ie(t){const s=window.getComputedStyle(t);if(s.overflowX==="scroll"||s.overflowY==="scroll"||s.overflowX==="auto"&&t.clientWidth1?!0:(s.preventDefault&&s.cancelable&&s.preventDefault(),!1)}const Ra=C({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean},as:{}},setup(t){const s=D();return Aa(!0),O(),(e,a)=>(b(),y(i(F),{as:e.as,"as-child":e.asChild,"data-state":i(s).open.value?"open":"closed",style:{"pointer-events":"auto"}},{default:m(()=>[g(e.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),Ha=C({__name:"DialogOverlay",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(t){const s=D(),{forwardRef:e}=O();return(a,o)=>{var c;return(c=i(s))!=null&&c.modal.value?(b(),y(i(oe),{key:0,present:a.forceMount||i(s).open.value},{default:m(()=>[x(Ra,S(a.$attrs,{ref:i(e),as:a.as,"as-child":a.asChild}),{default:m(()=>[g(a.$slots,"default")]),_:3},16,["as","as-child"])]),_:3},8,["present"])):G("",!0)}}}),Wa=C({__name:"DialogTitle",props:{asChild:{type:Boolean},as:{default:"h2"}},setup(t){const s=t,e=D();return O(),(a,o)=>(b(),y(i(F),S(s,{id:i(e).titleId}),{default:m(()=>[g(a.$slots,"default")]),_:3},16,["id"]))}}),ja=C({__name:"DialogTrigger",props:{asChild:{type:Boolean},as:{default:"button"}},setup(t){const s=t,e=D(),{forwardRef:a,currentElement:o}=O();return e.contentId||(e.contentId=L(void 0,"reka-dialog-content")),V(()=>{e.triggerElement.value=o.value}),(c,p)=>(b(),y(i(F),S(s,{ref:i(a),type:c.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":i(e).open.value||!1,"aria-controls":i(e).open.value?i(e).contentId:void 0,"data-state":i(e).open.value?"open":"closed",onClick:i(e).onOpenToggle}),{default:m(()=>[g(c.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),Ya=C({__name:"DialogPortal",props:{to:{},disabled:{type:Boolean},defer:{type:Boolean},forceMount:{type:Boolean}},setup(t){const s=t;return(e,a)=>(b(),y(i(na),X(Q(s)),{default:m(()=>[g(e.$slots,"default")]),_:3},16))}});export{Ia as F,Pa as I,da as L,z as S,ja as _,Ya as a,Ha as b,Ua as c,Wa as d,Va as e,ka as f,Fa as g,Aa as h,fa as i,ga as j,Na as k,La as l,xa as m,Ka as n,pa as o,Sa as p,Ma as q,$a as r,L as u}; diff --git a/TerraformRegistry/web/_nuxt/DzDAta3s.js b/TerraformRegistry/web/_nuxt/DzDAta3s.js new file mode 100644 index 0000000..2c91eb8 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DzDAta3s.js @@ -0,0 +1 @@ +import{v as w,y as A,U as k,V as B,g as h,z as b,l,o as t,w as C,A as c,m as u,j as s,n as y,D as o,B as $,C as G,c as N,t as V,P}from"./BnS3deBy.js";const j={slots:{base:"font-medium inline-flex items-center",label:"truncate",leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailingIcon:"shrink-0"},variants:{buttonGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},size:{xs:{base:"text-[8px]/3 px-1 py-0.5 gap-1 rounded-sm",leadingIcon:"size-3",leadingAvatarSize:"3xs",trailingIcon:"size-3"},sm:{base:"text-[10px]/3 px-1.5 py-1 gap-1 rounded-sm",leadingIcon:"size-3",leadingAvatarSize:"3xs",trailingIcon:"size-3"},md:{base:"text-xs px-2 py-1 gap-1 rounded-md",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},lg:{base:"text-sm px-2 py-1 gap-1.5 rounded-md",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"text-base px-2.5 py-1 gap-1.5 rounded-md",leadingIcon:"size-6",leadingAvatarSize:"2xs",trailingIcon:"size-6"}},square:{true:""}},compoundVariants:[{color:"primary",variant:"solid",class:"bg-primary text-inverted"},{color:"secondary",variant:"solid",class:"bg-secondary text-inverted"},{color:"success",variant:"solid",class:"bg-success text-inverted"},{color:"info",variant:"solid",class:"bg-info text-inverted"},{color:"warning",variant:"solid",class:"bg-warning text-inverted"},{color:"error",variant:"solid",class:"bg-error text-inverted"},{color:"primary",variant:"outline",class:"text-primary ring ring-inset ring-primary/50"},{color:"secondary",variant:"outline",class:"text-secondary ring ring-inset ring-secondary/50"},{color:"success",variant:"outline",class:"text-success ring ring-inset ring-success/50"},{color:"info",variant:"outline",class:"text-info ring ring-inset ring-info/50"},{color:"warning",variant:"outline",class:"text-warning ring ring-inset ring-warning/50"},{color:"error",variant:"outline",class:"text-error ring ring-inset ring-error/50"},{color:"primary",variant:"soft",class:"bg-primary/10 text-primary"},{color:"secondary",variant:"soft",class:"bg-secondary/10 text-secondary"},{color:"success",variant:"soft",class:"bg-success/10 text-success"},{color:"info",variant:"soft",class:"bg-info/10 text-info"},{color:"warning",variant:"soft",class:"bg-warning/10 text-warning"},{color:"error",variant:"soft",class:"bg-error/10 text-error"},{color:"primary",variant:"subtle",class:"bg-primary/10 text-primary ring ring-inset ring-primary/25"},{color:"secondary",variant:"subtle",class:"bg-secondary/10 text-secondary ring ring-inset ring-secondary/25"},{color:"success",variant:"subtle",class:"bg-success/10 text-success ring ring-inset ring-success/25"},{color:"info",variant:"subtle",class:"bg-info/10 text-info ring ring-inset ring-info/25"},{color:"warning",variant:"subtle",class:"bg-warning/10 text-warning ring ring-inset ring-warning/25"},{color:"error",variant:"subtle",class:"bg-error/10 text-error ring ring-inset ring-error/25"},{color:"neutral",variant:"solid",class:"text-inverted bg-inverted"},{color:"neutral",variant:"outline",class:"ring ring-inset ring-accented text-default bg-default"},{color:"neutral",variant:"soft",class:"text-default bg-elevated"},{color:"neutral",variant:"subtle",class:"ring ring-inset ring-accented text-default bg-elevated"},{size:"xs",square:!0,class:"p-0.5"},{size:"sm",square:!0,class:"p-1"},{size:"md",square:!0,class:"p-1"},{size:"lg",square:!0,class:"p-1"},{size:"xl",square:!0,class:"p-1"}],defaultVariants:{color:"primary",variant:"solid",size:"md"}},L={__name:"Badge",props:{as:{type:null,required:!1,default:"span"},label:{type:[String,Number],required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1},icon:{type:String,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:String,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:String,required:!1}},setup(r){const e=r,m=w(),x=A(),{orientation:z,size:q}=k(e),{isLeading:I,isTrailing:S,leadingIconName:g,trailingIconName:d}=B(e),n=h(()=>{var i;return b({extend:b(j),...((i=x.ui)==null?void 0:i.badge)||{}})({color:e.color,variant:e.variant,size:q.value||e.size,square:e.square||!m.default&&!e.label,buttonGroup:z.value})});return(i,D)=>{var v;return t(),l(s(P),{as:r.as,class:o(n.value.base({class:[(v=e.ui)==null?void 0:v.base,e.class]}))},{default:C(()=>[c(i.$slots,"leading",{},()=>{var a,p,f;return[s(I)&&s(g)?(t(),l(y,{key:0,name:s(g),class:o(n.value.leadingIcon({class:(a=e.ui)==null?void 0:a.leadingIcon}))},null,8,["name","class"])):r.avatar?(t(),l($,G({key:1,size:((p=e.ui)==null?void 0:p.leadingAvatarSize)||n.value.leadingAvatarSize()},r.avatar,{class:n.value.leadingAvatar({class:(f=e.ui)==null?void 0:f.leadingAvatar})}),null,16,["size","class"])):u("",!0)]}),c(i.$slots,"default",{},()=>{var a;return[r.label!==void 0&&r.label!==null?(t(),N("span",{key:0,class:o(n.value.label({class:(a=e.ui)==null?void 0:a.label}))},V(r.label),3)):u("",!0)]}),c(i.$slots,"trailing",{},()=>{var a;return[s(S)&&s(d)?(t(),l(y,{key:0,name:s(d),class:o(n.value.trailingIcon({class:(a=e.ui)==null?void 0:a.trailingIcon}))},null,8,["name","class"])):u("",!0)]})]),_:3},8,["as","class"])}}};export{L as _}; diff --git a/TerraformRegistry/web/_nuxt/YGikTPtL.js b/TerraformRegistry/web/_nuxt/YGikTPtL.js new file mode 100644 index 0000000..ad62a9e --- /dev/null +++ b/TerraformRegistry/web/_nuxt/YGikTPtL.js @@ -0,0 +1 @@ +import{u as a,c as i,o as u,a as e,t as r,b as c,w as l,d,_ as p}from"./BnS3deBy.js";import{_ as f}from"./DlAUqK2U.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:404},statusMessage:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return a({title:`${n.statusCode} - ${n.statusMessage} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=p;return u(),i("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.statusCode)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[c(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:l(()=>[d(r(t.backHome),1)]),_:1})])])])}}},v=f(y,[["__scopeId","data-v-06403dcb"]]);export{v as default}; diff --git a/TerraformRegistry/web/_nuxt/builds/latest.json b/TerraformRegistry/web/_nuxt/builds/latest.json new file mode 100644 index 0000000..0c74c8a --- /dev/null +++ b/TerraformRegistry/web/_nuxt/builds/latest.json @@ -0,0 +1 @@ +{"id":"f3625417-32b5-4eac-8a8d-eb5cb15667ce","timestamp":1765130559661} \ No newline at end of file diff --git a/TerraformRegistry/web/_nuxt/builds/meta/f3625417-32b5-4eac-8a8d-eb5cb15667ce.json b/TerraformRegistry/web/_nuxt/builds/meta/f3625417-32b5-4eac-8a8d-eb5cb15667ce.json new file mode 100644 index 0000000..801920f --- /dev/null +++ b/TerraformRegistry/web/_nuxt/builds/meta/f3625417-32b5-4eac-8a8d-eb5cb15667ce.json @@ -0,0 +1 @@ +{"id":"f3625417-32b5-4eac-8a8d-eb5cb15667ce","timestamp":1765130559661,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/TerraformRegistry/web/_nuxt/entry.DTnOiQrN.css b/TerraformRegistry/web/_nuxt/entry.DTnOiQrN.css new file mode 100644 index 0000000..629d4d9 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/entry.DTnOiQrN.css @@ -0,0 +1 @@ +@font-face{font-family:Public Sans;src:local("Public Sans Regular Italic"),local("Public Sans Italic"),url(../_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:400;font-style:italic}@font-face{font-family:"Public Sans Fallback: Arial";src:local("Arial");size-adjust:104.8675%;ascent-override:90.5905%;descent-override:21.4557%;line-gap-override:0%}@font-face{font-family:Public Sans;src:local("Public Sans Regular Italic"),local("Public Sans Italic"),url(../_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Regular Italic"),local("Public Sans Italic"),url(../_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Medium Italic"),url(../_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:500;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Medium Italic"),url(../_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:500;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Medium Italic"),url(../_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold Italic"),url(../_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:600;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold Italic"),url(../_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:600;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold Italic"),url(../_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Bold Italic"),url(../_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:700;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Bold Italic"),url(../_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:700;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Bold Italic"),url(../_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Regular"),local("Public Sans"),url(../_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:400;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Regular"),local("Public Sans"),url(../_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Regular"),local("Public Sans"),url(../_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Medium"),url(../_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:500;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Medium"),url(../_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:500;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Medium"),url(../_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold"),url(../_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:600;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold"),url(../_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:600;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold"),url(../_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Bold"),url(../_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2) format(woff2);font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:700;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Bold"),url(../_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:700;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Bold"),url(../_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Regular Italic"),local("Public Sans Italic"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff) format(woff);font-display:swap;font-weight:400;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Medium Italic"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff) format(woff);font-display:swap;font-weight:500;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold Italic"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff) format(woff);font-display:swap;font-weight:600;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Bold Italic"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff) format(woff);font-display:swap;font-weight:700;font-style:italic}@font-face{font-family:Public Sans;src:local("Public Sans Regular"),local("Public Sans"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff) format(woff);font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Medium"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff) format(woff);font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans SemiBold"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff) format(woff);font-display:swap;font-weight:600;font-style:normal}@font-face{font-family:Public Sans;src:local("Public Sans Bold"),url(../_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff) format(woff);font-display:swap;font-weight:700;font-style:normal}/*! tailwindcss v4.1.8 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:host,:root{--font-sans:"Public Sans",sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-200:oklch(93.8% .127 124.321);--color-lime-300:oklch(89.7% .196 126.665);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-700:oklch(53.2% .157 131.589);--color-lime-800:oklch(45.3% .124 130.933);--color-lime-900:oklch(40.5% .101 131.063);--color-lime-950:oklch(27.4% .072 132.109);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-900:oklch(39.8% .07 227.392);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-fuchsia-800:oklch(45.2% .211 324.591);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-600:oklch(59.2% .249 .584);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-800:oklch(45.9% .187 3.815);--color-pink-900:oklch(40.8% .153 2.432);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--text-4xl:2.25rem;--text-4xl--line-height:1.11111;--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-4xl:2rem;--shadow-2xs:0 1px #0000000d;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--shadow-2xl:0 25px 50px -12px #00000040;--inset-shadow-2xs:inset 0 1px #0000000d;--inset-shadow-xs:inset 0 1px 1px #0000000d;--inset-shadow-sm:inset 0 2px 4px #0000000d;--drop-shadow-xs:0 1px 1px #0000000d;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--text-shadow-2xs:0px 1px 0px #00000026;--text-shadow-xs:0px 1px 1px #0003;--text-shadow-sm:0px 1px 0px #00000013,0px 1px 1px #00000013,0px 2px 2px #00000013;--text-shadow-md:0px 1px 1px #0000001a,0px 1px 2px #0000001a,0px 2px 4px #0000001a;--text-shadow-lg:0px 1px 2px #0000001a,0px 3px 2px #0000001a,0px 4px 8px #0000001a;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--perspective-dramatic:100px;--perspective-near:300px;--perspective-normal:500px;--perspective-midrange:800px;--perspective-distant:1200px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-old-neutral-50:oklch(98.5% 0 0);--color-old-neutral-100:oklch(97% 0 0);--color-old-neutral-200:oklch(92.2% 0 0);--color-old-neutral-300:oklch(87% 0 0);--color-old-neutral-400:oklch(70.8% 0 0);--color-old-neutral-500:oklch(55.6% 0 0);--color-old-neutral-600:oklch(43.9% 0 0);--color-old-neutral-700:oklch(37.1% 0 0);--color-old-neutral-800:oklch(26.9% 0 0);--color-old-neutral-900:oklch(20.5% 0 0);--color-old-neutral-950:oklch(14.5% 0 0)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}::file-selector-button{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{background-color:var(--ui-bg);color:var(--ui-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color-scheme:light}body:where(.dark,.dark *){color-scheme:dark}.light,:root{--ui-text-dimmed:var(--ui-color-neutral-400);--ui-text-muted:var(--ui-color-neutral-500);--ui-text-toned:var(--ui-color-neutral-600);--ui-text:var(--ui-color-neutral-700);--ui-text-highlighted:var(--ui-color-neutral-900);--ui-text-inverted:var(--color-white);--ui-bg:var(--color-white);--ui-bg-muted:var(--ui-color-neutral-50);--ui-bg-elevated:var(--ui-color-neutral-100);--ui-bg-accented:var(--ui-color-neutral-200);--ui-bg-inverted:var(--ui-color-neutral-900);--ui-border:var(--ui-color-neutral-200);--ui-border-muted:var(--ui-color-neutral-200);--ui-border-accented:var(--ui-color-neutral-300);--ui-border-inverted:var(--ui-color-neutral-900);--ui-radius:.25rem;--ui-container:var(--container-7xl)}.dark{--ui-text-dimmed:var(--ui-color-neutral-500);--ui-text-muted:var(--ui-color-neutral-400);--ui-text-toned:var(--ui-color-neutral-300);--ui-text:var(--ui-color-neutral-200);--ui-text-highlighted:var(--color-white);--ui-text-inverted:var(--ui-color-neutral-900);--ui-bg:var(--ui-color-neutral-900);--ui-bg-muted:var(--ui-color-neutral-800);--ui-bg-elevated:var(--ui-color-neutral-800);--ui-bg-accented:var(--ui-color-neutral-700);--ui-bg-inverted:var(--color-white);--ui-border:var(--ui-color-neutral-800);--ui-border-muted:var(--ui-color-neutral-700);--ui-border-accented:var(--ui-color-neutral-700);--ui-border-inverted:var(--color-white)}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-1{inset-inline:calc(var(--spacing)*1)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-1{inset-block:calc(var(--spacing)*1)}.inset-y-1\.5{inset-block:calc(var(--spacing)*1.5)}.inset-y-2{inset-block:calc(var(--spacing)*2)}.inset-y-4{inset-block:calc(var(--spacing)*4)}.-start-px{inset-inline-start:-1px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-4{inset-inline-start:calc(var(--spacing)*4)}.start-\[calc\(50\%\+16px\)\]{inset-inline-start:calc(50% + 16px)}.start-\[calc\(50\%\+20px\)\]{inset-inline-start:calc(50% + 20px)}.start-\[calc\(50\%\+28px\)\]{inset-inline-start:calc(50% + 28px)}.start-\[calc\(50\%\+32px\)\]{inset-inline-start:calc(50% + 32px)}.start-\[calc\(50\%\+36px\)\]{inset-inline-start:calc(50% + 36px)}.start-\[calc\(50\%-1px\)\]{inset-inline-start:calc(50% - 1px)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-\[calc\(-50\%\+16px\)\]{inset-inline-end:calc(16px - 50%)}.end-\[calc\(-50\%\+20px\)\]{inset-inline-end:calc(20px - 50%)}.end-\[calc\(-50\%\+28px\)\]{inset-inline-end:calc(28px - 50%)}.end-\[calc\(-50\%\+32px\)\]{inset-inline-end:calc(32px - 50%)}.end-\[calc\(-50\%\+36px\)\]{inset-inline-end:calc(36px - 50%)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-\[30px\]{top:30px}.top-\[38px\]{top:38px}.top-\[46px\]{top:46px}.top-\[50\%\]{top:50%}.top-\[54px\]{top:54px}.top-\[62px\]{top:62px}.top-\[calc\(50\%-2px\)\]{top:calc(50% - 2px)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-4{right:calc(var(--spacing)*4)}.-bottom-7{bottom:calc(var(--spacing)*-7)}.-bottom-\[10px\]{bottom:-10px}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-\(--reka-navigation-menu-viewport-left\){left:var(--reka-navigation-menu-viewport-left)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing)*4)}.isolate{isolation:isolate}.z-\(--index\){z-index:var(--index)}.z-10{z-index:10}.z-\[-1\]{z-index:-1}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.z-\[100\]{z-index:100}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0\.5{margin:calc(var(--spacing)*.5)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.-ms-4{margin-inline-start:calc(var(--spacing)*-4)}.-ms-px{margin-inline-start:-1px}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-4\.5{margin-inline-start:calc(var(--spacing)*4.5)}.ms-5{margin-inline-start:calc(var(--spacing)*5)}.ms-auto{margin-inline-start:auto}.-me-0\.5{margin-inline-end:calc(var(--spacing)*-.5)}.-me-1\.5{margin-inline-end:calc(var(--spacing)*-1.5)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-3\.5{margin-top:calc(var(--spacing)*3.5)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.\!mr-4{margin-right:calc(var(--spacing)*4)!important}.mr-2{margin-right:calc(var(--spacing)*2)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-24{margin-bottom:calc(var(--spacing)*24)}.mb-auto{margin-bottom:auto}.\!ml-4{margin-left:calc(var(--spacing)*4)!important}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-2\.5{height:calc(var(--spacing)*2.5);width:calc(var(--spacing)*2.5)}.size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.size-3\.5{height:calc(var(--spacing)*3.5);width:calc(var(--spacing)*3.5)}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.size-4\.5{height:calc(var(--spacing)*4.5);width:calc(var(--spacing)*4.5)}.size-5{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.size-6{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.size-7{height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.size-8{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.size-9{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9)}.size-10{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.size-10\/12{height:83.3333%;width:83.3333%}.size-11{height:calc(var(--spacing)*11);width:calc(var(--spacing)*11)}.size-12{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12)}.size-14{height:calc(var(--spacing)*14);width:calc(var(--spacing)*14)}.size-full{height:100%;width:100%}.\!h-1\.5{height:calc(var(--spacing)*1.5)!important}.\!h-12{height:calc(var(--spacing)*12)!important}.h-\(--reka-navigation-menu-viewport-height\){height:var(--reka-navigation-menu-viewport-height)}.h-\(--reka-tabs-indicator-size\){height:var(--reka-tabs-indicator-size)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-38{height:calc(var(--spacing)*38)}.h-40{height:calc(var(--spacing)*40)}.h-42{height:calc(var(--spacing)*42)}.h-44{height:calc(var(--spacing)*44)}.h-46{height:calc(var(--spacing)*46)}.h-\[4px\]{height:4px}.h-\[5px\]{height:5px}.h-\[6px\]{height:6px}.h-\[7px\]{height:7px}.h-\[8px\]{height:8px}.h-\[9px\]{height:9px}.h-\[10px\]{height:10px}.h-\[11px\]{height:11px}.h-\[12px\]{height:12px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\[96\%\]{max-height:96%}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-6{min-height:calc(var(--spacing)*6)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-screen{min-height:100vh}.\!w-1\.5{width:calc(var(--spacing)*1.5)!important}.\!w-12{width:calc(var(--spacing)*12)!important}.w-\(--reka-combobox-trigger-width\){width:var(--reka-combobox-trigger-width)}.w-\(--reka-dropdown-menu-trigger-width\){width:var(--reka-dropdown-menu-trigger-width)}.w-\(--reka-navigation-menu-indicator-size\){width:var(--reka-navigation-menu-indicator-size)}.w-\(--reka-select-trigger-width\){width:var(--reka-select-trigger-width)}.w-\(--reka-tabs-indicator-size\){width:var(--reka-tabs-indicator-size)}.w-0{width:calc(var(--spacing)*0)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-38{width:calc(var(--spacing)*38)}.w-40{width:calc(var(--spacing)*40)}.w-42{width:calc(var(--spacing)*42)}.w-44{width:calc(var(--spacing)*44)}.w-46{width:calc(var(--spacing)*46)}.w-48{width:calc(var(--spacing)*48)}.w-60{width:calc(var(--spacing)*60)}.w-64{width:calc(var(--spacing)*64)}.w-\[6px\]{width:6px}.w-\[7px\]{width:7px}.w-\[8px\]{width:8px}.w-\[9px\]{width:9px}.w-\[10px\]{width:10px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-\(--ui-container\){max-width:var(--ui-container)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\[4px\]{min-width:4px}.min-w-\[5px\]{min-width:5px}.min-w-\[6px\]{min-width:6px}.min-w-\[7px\]{min-width:7px}.min-w-\[8px\]{min-width:8px}.min-w-\[9px\]{min-width:9px}.min-w-\[10px\]{min-width:10px}.min-w-\[11px\]{min-width:11px}.min-w-\[12px\]{min-width:12px}.min-w-\[16px\]{min-width:16px}.min-w-\[20px\]{min-width:20px}.min-w-\[24px\]{min-width:24px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.origin-\(--reka-combobox-content-transform-origin\){transform-origin:var(--reka-combobox-content-transform-origin)}.origin-\(--reka-context-menu-content-transform-origin\){transform-origin:var(--reka-context-menu-content-transform-origin)}.origin-\(--reka-dropdown-menu-content-transform-origin\){transform-origin:var(--reka-dropdown-menu-content-transform-origin)}.origin-\(--reka-popover-content-transform-origin\){transform-origin:var(--reka-popover-content-transform-origin)}.origin-\(--reka-select-content-transform-origin\){transform-origin:var(--reka-select-content-transform-origin)}.origin-\(--reka-tooltip-content-transform-origin\){transform-origin:var(--reka-tooltip-content-transform-origin)}.origin-\[top_center\]{transform-origin:top}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-\[4px\]{translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-\[4px\]{--tw-translate-x:-4px}.translate-x-\(--reka-navigation-menu-indicator-position\){--tw-translate-x:var(--reka-navigation-menu-indicator-position);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\(--reka-tabs-indicator-position\){--tw-translate-x:var(--reka-tabs-indicator-position);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x:50%}.-translate-y-1\/2,.translate-x-1\/2{translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-y-\(--reka-tabs-indicator-position\){--tw-translate-y:var(--reka-tabs-indicator-position);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/2{--tw-translate-y:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-80{--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform-\(--transform\){transform:var(--transform)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-center{align-content:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-3\.5{gap:calc(var(--spacing)*3.5)}.gap-4{gap:calc(var(--spacing)*4)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(-1px*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(-1px*var(--tw-space-y-reverse))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}.gap-x-2{-moz-column-gap:calc(var(--spacing)*2);column-gap:calc(var(--spacing)*2)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(-1px*var(--tw-space-x-reverse))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-1\.5{row-gap:calc(var(--spacing)*1.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}:where(.divide-default>:not(:last-child)){border-color:var(--ui-border)}.self-end{align-self:flex-end}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:calc(var(--ui-radius)*4)}.rounded-3xl{border-radius:calc(var(--ui-radius)*6)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:calc(var(--ui-radius)*2)}.rounded-md{border-radius:calc(var(--ui-radius)*1.5)}.rounded-sm{border-radius:var(--ui-radius)}.rounded-xl{border-radius:calc(var(--ui-radius)*3)}.rounded-xs{border-radius:calc(var(--ui-radius)*.5)}.rounded-t-lg{border-top-right-radius:calc(var(--ui-radius)*2)}.rounded-l-lg,.rounded-t-lg{border-top-left-radius:calc(var(--ui-radius)*2)}.rounded-l-lg{border-bottom-left-radius:calc(var(--ui-radius)*2)}.rounded-r-lg{border-top-right-radius:calc(var(--ui-radius)*2)}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:calc(var(--ui-radius)*2)}.rounded-b-lg{border-bottom-left-radius:calc(var(--ui-radius)*2)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-s-\[2px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-s-\[3px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:3px}.border-s-\[4px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:4px}.border-s-\[5px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[2px\]{border-top-style:var(--tw-border-style);border-top-width:2px}.border-t-\[3px\]{border-top-style:var(--tw-border-style);border-top-width:3px}.border-t-\[4px\]{border-top-style:var(--tw-border-style);border-top-width:4px}.border-t-\[5px\]{border-top-style:var(--tw-border-style);border-top-width:5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-solid{--tw-border-style:solid;border-style:solid}.border-default{border-color:var(--ui-border)}.border-error{border-color:var(--ui-error)}.border-green-200{border-color:var(--color-green-200)}.border-info{border-color:var(--ui-info)}.border-muted{border-color:var(--ui-border-muted)}.border-neutral-200{border-color:var(--ui-color-neutral-200)}.border-neutral-700{border-color:var(--ui-color-neutral-700)}.border-primary{border-color:var(--ui-primary)}.border-red-200{border-color:var(--color-red-200)}.border-secondary{border-color:var(--ui-secondary)}.border-slate-200{border-color:var(--color-slate-200)}.border-success{border-color:var(--ui-success)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--ui-warning)}.\!bg-accented{background-color:var(--ui-bg-accented)!important}.bg-accented{background-color:var(--ui-bg-accented)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-border{background-color:var(--ui-border)}.bg-default,.bg-default\/75{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.bg-default\/75{background-color:color-mix(in oklab,var(--ui-bg)75%,transparent)}}.bg-elevated,.bg-elevated\/50{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-elevated\/50{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.bg-elevated\/75{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-elevated\/75{background-color:color-mix(in oklab,var(--ui-bg-elevated)75%,transparent)}}.bg-error,.bg-error\/10{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.bg-error\/10{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-info,.bg-info\/10{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.bg-info\/10{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.bg-inverted{background-color:var(--ui-bg-inverted)}.bg-neutral-50\/50{background-color:var(--ui-color-neutral-50)}@supports (color:color-mix(in lab,red,red)){.bg-neutral-50\/50{background-color:color-mix(in oklab,var(--ui-color-neutral-50)50%,transparent)}}.bg-neutral-800{background-color:var(--ui-color-neutral-800)}.bg-primary,.bg-primary\/10{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-secondary,.bg-secondary\/10{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/10{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/70{background-color:#f8fafcb3}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/70{background-color:color-mix(in oklab,var(--color-slate-50)70%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-success,.bg-success\/10{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning,.bg-warning\/10{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.fill-default{fill:var(--ui-border)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-3\.5{padding:calc(var(--spacing)*3.5)}.p-4{padding:calc(var(--spacing)*4)}.p-4\.5{padding:calc(var(--spacing)*4.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-9{padding-inline:calc(var(--spacing)*9)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-11{padding-inline:calc(var(--spacing)*11)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-1\.5{padding-inline-start:calc(var(--spacing)*1.5)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-2\.5{padding-inline-start:calc(var(--spacing)*2.5)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.ps-8{padding-inline-start:calc(var(--spacing)*8)}.ps-9{padding-inline-start:calc(var(--spacing)*9)}.ps-10{padding-inline-start:calc(var(--spacing)*10)}.ps-11{padding-inline-start:calc(var(--spacing)*11)}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-2\.5{padding-inline-end:calc(var(--spacing)*2.5)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-7{padding-inline-end:calc(var(--spacing)*7)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pe-9{padding-inline-end:calc(var(--spacing)*9)}.pe-10{padding-inline-end:calc(var(--spacing)*10)}.pe-11{padding-inline-end:calc(var(--spacing)*11)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-3\.5{padding-bottom:calc(var(--spacing)*3.5)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-\[8px\]\/3{font-size:8px;line-height:calc(var(--spacing)*3)}.text-\[10px\]\/3{font-size:10px;line-height:calc(var(--spacing)*3)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs,.text-xs\/5{font-size:var(--text-xs)}.text-xs\/5{line-height:calc(var(--spacing)*5)}.text-\[4px\]{font-size:4px}.text-\[5px\]{font-size:5px}.text-\[6px\]{font-size:6px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[22px\]{font-size:22px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-blue-500{color:var(--color-blue-500)}.text-blue-700{color:var(--color-blue-700)}.text-default{color:var(--ui-text)}.text-dimmed{color:var(--ui-text-dimmed)}.text-error,.text-error\/75{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.text-error\/75{color:color-mix(in oklab,var(--ui-error)75%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-highlighted{color:var(--ui-text-highlighted)}.text-info,.text-info\/75{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.text-info\/75{color:color-mix(in oklab,var(--ui-info)75%,transparent)}}.text-inverted{color:var(--ui-text-inverted)}.text-muted{color:var(--ui-text-muted)}.text-primary,.text-primary\/75{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.text-primary\/75{color:color-mix(in oklab,var(--ui-primary)75%,transparent)}}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-900{color:var(--color-red-900)}.text-secondary,.text-secondary\/75{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.text-secondary\/75{color:color-mix(in oklab,var(--ui-secondary)75%,transparent)}}.text-slate-100{color:var(--color-slate-100)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.text-success,.text-success\/75{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.text-success\/75{color:color-mix(in oklab,var(--ui-success)75%,transparent)}}.text-warning,.text-warning\/75{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.text-warning\/75{color:color-mix(in oklab,var(--ui-warning)75%,transparent)}}.text-white{color:var(--color-white)}.accent-blue-500{accent-color:var(--color-blue-500)}.opacity-0{opacity:0}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d)}.ring,.shadow-xs{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-0,.ring-2{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.ring-3{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\(--color-white\){--tw-ring-color:var(--color-white)}.ring-accented{--tw-ring-color:var(--ui-border-accented)}.ring-bg{--tw-ring-color:var(--ui-bg)}.ring-default{--tw-ring-color:var(--ui-border)}.ring-error,.ring-error\/25{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.ring-error\/25{--tw-ring-color:color-mix(in oklab,var(--ui-error)25%,transparent)}}.ring-error\/50{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.ring-error\/50{--tw-ring-color:color-mix(in oklab,var(--ui-error)50%,transparent)}}.ring-info,.ring-info\/25{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.ring-info\/25{--tw-ring-color:color-mix(in oklab,var(--ui-info)25%,transparent)}}.ring-info\/50{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.ring-info\/50{--tw-ring-color:color-mix(in oklab,var(--ui-info)50%,transparent)}}.ring-inverted{--tw-ring-color:var(--ui-border-inverted)}.ring-primary,.ring-primary\/25{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/25{--tw-ring-color:color-mix(in oklab,var(--ui-primary)25%,transparent)}}.ring-primary\/50{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/50{--tw-ring-color:color-mix(in oklab,var(--ui-primary)50%,transparent)}}.ring-secondary,.ring-secondary\/25{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.ring-secondary\/25{--tw-ring-color:color-mix(in oklab,var(--ui-secondary)25%,transparent)}}.ring-secondary\/50{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.ring-secondary\/50{--tw-ring-color:color-mix(in oklab,var(--ui-secondary)50%,transparent)}}.ring-success,.ring-success\/25{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.ring-success\/25{--tw-ring-color:color-mix(in oklab,var(--ui-success)25%,transparent)}}.ring-success\/50{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.ring-success\/50{--tw-ring-color:color-mix(in oklab,var(--ui-success)50%,transparent)}}.ring-warning,.ring-warning\/25{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.ring-warning\/25{--tw-ring-color:color-mix(in oklab,var(--ui-warning)25%,transparent)}}.ring-warning\/50{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.ring-warning\/50{--tw-ring-color:color-mix(in oklab,var(--ui-warning)50%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[background\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:background;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[color\,opacity\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[transform\,translate\,height\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[translate\,width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:translate,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\,height\,left\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width,height,left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ring-inset{--tw-ring-inset:inset}.group-not-last\:group-not-first\:rounded-none:is(:where(.group):not(:last-child) *):is(:where(.group):not(:first-child) *),.not-last\:not-first\:rounded-none:not(:last-child):not(:first-child){border-radius:0}.group-not-only\:group-first\:rounded-e-none:is(:where(.group):not(:only-child) *):is(:where(.group):first-child *){border-end-end-radius:0;border-start-end-radius:0}.group-not-only\:group-first\:rounded-b-none:is(:where(.group):not(:only-child) *):is(:where(.group):first-child *){border-bottom-left-radius:0;border-bottom-right-radius:0}.group-not-only\:group-last\:rounded-s-none:is(:where(.group):not(:only-child) *):is(:where(.group):last-child *){border-end-start-radius:0;border-start-start-radius:0}.group-not-only\:group-last\:rounded-t-none:is(:where(.group):not(:only-child) *):is(:where(.group):last-child *){border-top-left-radius:0;border-top-right-radius:0}@media (hover:hover){.group-hover\:text-default:is(:where(.group):hover *){color:var(--ui-text)}}.group-data-expanded\:rotate-180:is(:where(.group)[data-expanded] *){rotate:180deg}.group-data-highlighted\:inline-flex:is(:where(.group)[data-highlighted] *){display:inline-flex}.group-data-highlighted\:text-default:is(:where(.group)[data-highlighted] *){color:var(--ui-text)}.group-data-highlighted\:text-error:is(:where(.group)[data-highlighted] *){color:var(--ui-error)}.group-data-highlighted\:text-info:is(:where(.group)[data-highlighted] *){color:var(--ui-info)}.group-data-highlighted\:text-primary:is(:where(.group)[data-highlighted] *){color:var(--ui-primary)}.group-data-highlighted\:text-secondary:is(:where(.group)[data-highlighted] *){color:var(--ui-secondary)}.group-data-highlighted\:text-success:is(:where(.group)[data-highlighted] *){color:var(--ui-success)}.group-data-highlighted\:text-warning:is(:where(.group)[data-highlighted] *){color:var(--ui-warning)}.group-data-highlighted\:not-group-data-disabled\:text-default:is(:where(.group)[data-highlighted] *):not(:is(:where(.group)[data-disabled] *)){color:var(--ui-text)}.group-data-\[disabled\]\:opacity-75:is(:where(.group)[data-disabled] *){opacity:.75}.group-data-\[state\=active\]\:bg-error:is(:where(.group)[data-state=active] *){background-color:var(--ui-error)}.group-data-\[state\=active\]\:bg-info:is(:where(.group)[data-state=active] *){background-color:var(--ui-info)}.group-data-\[state\=active\]\:bg-inverted:is(:where(.group)[data-state=active] *){background-color:var(--ui-bg-inverted)}.group-data-\[state\=active\]\:bg-primary:is(:where(.group)[data-state=active] *){background-color:var(--ui-primary)}.group-data-\[state\=active\]\:bg-secondary:is(:where(.group)[data-state=active] *){background-color:var(--ui-secondary)}.group-data-\[state\=active\]\:bg-success:is(:where(.group)[data-state=active] *){background-color:var(--ui-success)}.group-data-\[state\=active\]\:bg-warning:is(:where(.group)[data-state=active] *){background-color:var(--ui-warning)}.group-data-\[state\=active\]\:text-inverted:is(:where(.group)[data-state=active] *){color:var(--ui-text-inverted)}.group-data-\[state\=checked\]\:text-error:is(:where(.group)[data-state=checked] *){color:var(--ui-error)}.group-data-\[state\=checked\]\:text-highlighted:is(:where(.group)[data-state=checked] *){color:var(--ui-text-highlighted)}.group-data-\[state\=checked\]\:text-info:is(:where(.group)[data-state=checked] *){color:var(--ui-info)}.group-data-\[state\=checked\]\:text-primary:is(:where(.group)[data-state=checked] *){color:var(--ui-primary)}.group-data-\[state\=checked\]\:text-secondary:is(:where(.group)[data-state=checked] *){color:var(--ui-secondary)}.group-data-\[state\=checked\]\:text-success:is(:where(.group)[data-state=checked] *){color:var(--ui-success)}.group-data-\[state\=checked\]\:text-warning:is(:where(.group)[data-state=checked] *){color:var(--ui-warning)}.group-data-\[state\=checked\]\:opacity-100:is(:where(.group)[data-state=checked] *){opacity:1}.group-data-\[state\=completed\]\:bg-error:is(:where(.group)[data-state=completed] *){background-color:var(--ui-error)}.group-data-\[state\=completed\]\:bg-info:is(:where(.group)[data-state=completed] *){background-color:var(--ui-info)}.group-data-\[state\=completed\]\:bg-inverted:is(:where(.group)[data-state=completed] *){background-color:var(--ui-bg-inverted)}.group-data-\[state\=completed\]\:bg-primary:is(:where(.group)[data-state=completed] *){background-color:var(--ui-primary)}.group-data-\[state\=completed\]\:bg-secondary:is(:where(.group)[data-state=completed] *){background-color:var(--ui-secondary)}.group-data-\[state\=completed\]\:bg-success:is(:where(.group)[data-state=completed] *){background-color:var(--ui-success)}.group-data-\[state\=completed\]\:bg-warning:is(:where(.group)[data-state=completed] *){background-color:var(--ui-warning)}.group-data-\[state\=completed\]\:text-inverted:is(:where(.group)[data-state=completed] *){color:var(--ui-text-inverted)}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[state\=open\]\:text-default:is(:where(.group)[data-state=open] *){color:var(--ui-text)}.group-data-\[state\=open\]\:text-error:is(:where(.group)[data-state=open] *){color:var(--ui-error)}.group-data-\[state\=open\]\:text-highlighted:is(:where(.group)[data-state=open] *){color:var(--ui-text-highlighted)}.group-data-\[state\=open\]\:text-info:is(:where(.group)[data-state=open] *){color:var(--ui-info)}.group-data-\[state\=open\]\:text-primary:is(:where(.group)[data-state=open] *){color:var(--ui-primary)}.group-data-\[state\=open\]\:text-secondary:is(:where(.group)[data-state=open] *){color:var(--ui-secondary)}.group-data-\[state\=open\]\:text-success:is(:where(.group)[data-state=open] *){color:var(--ui-success)}.group-data-\[state\=open\]\:text-warning:is(:where(.group)[data-state=open] *){color:var(--ui-warning)}.group-data-\[state\=unchecked\]\:text-dimmed:is(:where(.group)[data-state=unchecked] *){color:var(--ui-text-dimmed)}.group-data-\[state\=unchecked\]\:opacity-100:is(:where(.group)[data-state=unchecked] *){opacity:1}.file\:me-1\.5::file-selector-button{margin-inline-end:calc(var(--spacing)*1.5)}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-muted::file-selector-button{color:var(--ui-text-muted)}.file\:outline-none::file-selector-button{--tw-outline-style:none;outline-style:none}.placeholder\:text-dimmed::-moz-placeholder{color:var(--ui-text-dimmed)}.placeholder\:text-dimmed::placeholder{color:var(--ui-text-dimmed)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-px:before{content:var(--tw-content);top:1px;right:1px;bottom:1px;left:1px}.before\:inset-x-0:before{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.before\:inset-x-px:before{content:var(--tw-content);inset-inline:1px}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:inset-y-px:before{content:var(--tw-content);inset-block:1px}.before\:z-\[-1\]:before{content:var(--tw-content);z-index:-1}.before\:me-0\.5:before{content:var(--tw-content);margin-inline-end:calc(var(--spacing)*.5)}.before\:rounded-md:before{border-radius:calc(var(--ui-radius)*1.5);content:var(--tw-content)}.before\:bg-elevated:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}.before\:bg-error\/10:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-error\/10:before{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.before\:bg-info\/10:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-info\/10:before{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.before\:bg-primary\/10:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-primary\/10:before{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.before\:bg-secondary\/10:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-secondary\/10:before{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.before\:bg-success\/10:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-success\/10:before{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.before\:bg-warning\/10:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-warning\/10:before{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.before\:transition-colors:before{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.before\:content-\[\'·\'\]:before{--tw-content:"·";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.after\:inset-x-2\.5:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*2.5)}.after\:inset-y-0\.5:after{content:var(--tw-content);inset-block:calc(var(--spacing)*.5)}.after\:-start-1\.5:after{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*-1.5)}.after\:-bottom-2:after{bottom:calc(var(--spacing)*-2);content:var(--tw-content)}.after\:bottom-0:after{bottom:calc(var(--spacing)*0);content:var(--tw-content)}.after\:ms-0\.5:after{content:var(--tw-content);margin-inline-start:calc(var(--spacing)*.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:hidden:after{content:var(--tw-content);display:none}.after\:size-1:after{content:var(--tw-content);height:calc(var(--spacing)*1);width:calc(var(--spacing)*1)}.after\:size-1\.5:after{content:var(--tw-content);height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5)}.after\:size-2:after{content:var(--tw-content);height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.after\:h-px:after{content:var(--tw-content);height:1px}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:animate-\[carousel-inverse_2s_ease-in-out_infinite\]:after{animation:carousel-inverse 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[carousel_2s_ease-in-out_infinite\]:after{animation:carousel 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[elastic_2s_ease-in-out_infinite\]:after{animation:elastic 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[swing_2s_ease-in-out_infinite\]:after{animation:swing 2s ease-in-out infinite;content:var(--tw-content)}.after\:rounded-full:after{border-radius:3.40282e+38px;content:var(--tw-content)}.after\:bg-default:after{background-color:var(--ui-bg);content:var(--tw-content)}.after\:bg-error:after{background-color:var(--ui-error);content:var(--tw-content)}.after\:bg-info:after{background-color:var(--ui-info);content:var(--tw-content)}.after\:bg-inverted:after{background-color:var(--ui-bg-inverted);content:var(--tw-content)}.after\:bg-primary:after{background-color:var(--ui-primary);content:var(--tw-content)}.after\:bg-secondary:after{background-color:var(--ui-secondary);content:var(--tw-content)}.after\:bg-success:after{background-color:var(--ui-success);content:var(--tw-content)}.after\:bg-warning:after{background-color:var(--ui-warning);content:var(--tw-content)}.after\:text-error:after{color:var(--ui-error);content:var(--tw-content)}.after\:transition-colors:after{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.after\:content-\[\'\*\'\]:after{--tw-content:"*";content:var(--tw-content)}.first\:me-0:first-child{margin-inline-end:calc(var(--spacing)*0)}.not-only\:first\:rounded-e-none:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0}.not-only\:first\:rounded-b-none:not(:only-child):first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.not-only\:last\:rounded-s-none:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0}.not-only\:last\:rounded-t-none:not(:only-child):last-child{border-top-left-radius:0;border-top-right-radius:0}.first-of-type\:rounded-s-lg:first-of-type{border-end-start-radius:calc(var(--ui-radius)*2);border-start-start-radius:calc(var(--ui-radius)*2)}.first-of-type\:rounded-t-lg:first-of-type{border-top-left-radius:calc(var(--ui-radius)*2);border-top-right-radius:calc(var(--ui-radius)*2)}.last-of-type\:rounded-e-lg:last-of-type{border-end-end-radius:calc(var(--ui-radius)*2);border-start-end-radius:calc(var(--ui-radius)*2)}.last-of-type\:rounded-b-lg:last-of-type{border-bottom-left-radius:calc(var(--ui-radius)*2);border-bottom-right-radius:calc(var(--ui-radius)*2)}@media (hover:hover){.hover\:bg-accented\/75:hover{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accented\/75:hover{background-color:color-mix(in oklab,var(--ui-bg-accented)75%,transparent)}}.hover\:bg-elevated:hover{background-color:var(--ui-bg-elevated)}.hover\:bg-error\/10:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/10:hover{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.hover\:bg-error\/15:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/15:hover{background-color:color-mix(in oklab,var(--ui-error)15%,transparent)}}.hover\:bg-error\/75:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/75:hover{background-color:color-mix(in oklab,var(--ui-error)75%,transparent)}}.hover\:bg-info\/10:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/10:hover{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.hover\:bg-info\/15:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/15:hover{background-color:color-mix(in oklab,var(--ui-info)15%,transparent)}}.hover\:bg-info\/75:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/75:hover{background-color:color-mix(in oklab,var(--ui-info)75%,transparent)}}.hover\:bg-inverted\/90:hover{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-inverted\/90:hover{background-color:color-mix(in oklab,var(--ui-bg-inverted)90%,transparent)}}.hover\:bg-primary\/10:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.hover\:bg-primary\/15:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/15:hover{background-color:color-mix(in oklab,var(--ui-primary)15%,transparent)}}.hover\:bg-primary\/75:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/75:hover{background-color:color-mix(in oklab,var(--ui-primary)75%,transparent)}}.hover\:bg-secondary\/10:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/10:hover{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.hover\:bg-secondary\/15:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/15:hover{background-color:color-mix(in oklab,var(--ui-secondary)15%,transparent)}}.hover\:bg-secondary\/75:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/75:hover{background-color:color-mix(in oklab,var(--ui-secondary)75%,transparent)}}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-success\/10:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/10:hover{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.hover\:bg-success\/15:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/15:hover{background-color:color-mix(in oklab,var(--ui-success)15%,transparent)}}.hover\:bg-success\/75:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/75:hover{background-color:color-mix(in oklab,var(--ui-success)75%,transparent)}}.hover\:bg-warning\/10:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/10:hover{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.hover\:bg-warning\/15:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/15:hover{background-color:color-mix(in oklab,var(--ui-warning)15%,transparent)}}.hover\:bg-warning\/75:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/75:hover{background-color:color-mix(in oklab,var(--ui-warning)75%,transparent)}}.hover\:text-default:hover{color:var(--ui-text)}.hover\:text-error\/75:hover{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:text-error\/75:hover{color:color-mix(in oklab,var(--ui-error)75%,transparent)}}.hover\:text-highlighted:hover{color:var(--ui-text-highlighted)}.hover\:text-info\/75:hover{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:text-info\/75:hover{color:color-mix(in oklab,var(--ui-info)75%,transparent)}}.hover\:text-primary\/75:hover{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/75:hover{color:color-mix(in oklab,var(--ui-primary)75%,transparent)}}.hover\:text-secondary\/75:hover{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:text-secondary\/75:hover{color:color-mix(in oklab,var(--ui-secondary)75%,transparent)}}.hover\:text-success\/75:hover{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:text-success\/75:hover{color:color-mix(in oklab,var(--ui-success)75%,transparent)}}.hover\:text-warning\/75:hover{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:text-warning\/75:hover{color:color-mix(in oklab,var(--ui-warning)75%,transparent)}}.hover\:ring-1:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-blue-500\/50:hover{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.hover\:ring-blue-500\/50:hover{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.hover\:not-disabled\:text-highlighted:hover:not(:disabled){color:var(--ui-text-highlighted)}.hover\:not-data-\[selected\]\:bg-error\/20:hover:not([data-selected]){background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-error\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-error)20%,transparent)}}.hover\:not-data-\[selected\]\:bg-info\/20:hover:not([data-selected]){background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-info\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-info)20%,transparent)}}.hover\:not-data-\[selected\]\:bg-inverted\/10:hover:not([data-selected]){background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-inverted\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-bg-inverted)10%,transparent)}}.hover\:not-data-\[selected\]\:bg-primary\/20:hover:not([data-selected]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-primary\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-primary)20%,transparent)}}.hover\:not-data-\[selected\]\:bg-secondary\/20:hover:not([data-selected]){background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-secondary\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-secondary)20%,transparent)}}.hover\:not-data-\[selected\]\:bg-success\/20:hover:not([data-selected]){background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-success\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-success)20%,transparent)}}.hover\:not-data-\[selected\]\:bg-warning\/20:hover:not([data-selected]){background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-warning\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-warning)20%,transparent)}}.hover\:before\:bg-elevated\/50:hover:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.hover\:before\:bg-elevated\/50:hover:before{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.hover\:not-disabled\:before\:bg-elevated\/50:hover:not(:disabled):before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.hover\:not-disabled\:before\:bg-elevated\/50:hover:not(:disabled):before{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}}.focus\:bg-elevated:focus{background-color:var(--ui-bg-elevated)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-\[1\]:focus-visible{z-index:1}.focus-visible\:bg-accented\/75:focus-visible{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-accented\/75:focus-visible{background-color:color-mix(in oklab,var(--ui-bg-accented)75%,transparent)}}.focus-visible\:bg-elevated:focus-visible{background-color:var(--ui-bg-elevated)}.focus-visible\:bg-error\/10:focus-visible{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-error\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.focus-visible\:bg-error\/15:focus-visible{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-error\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-error)15%,transparent)}}.focus-visible\:bg-info\/10:focus-visible{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-info\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.focus-visible\:bg-info\/15:focus-visible{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-info\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-info)15%,transparent)}}.focus-visible\:bg-primary\/10:focus-visible{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-primary\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.focus-visible\:bg-primary\/15:focus-visible{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-primary\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-primary)15%,transparent)}}.focus-visible\:bg-secondary\/10:focus-visible{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-secondary\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.focus-visible\:bg-secondary\/15:focus-visible{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-secondary\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-secondary)15%,transparent)}}.focus-visible\:bg-success\/10:focus-visible{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-success\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.focus-visible\:bg-success\/15:focus-visible{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-success\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-success)15%,transparent)}}.focus-visible\:bg-warning\/10:focus-visible{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-warning\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.focus-visible\:bg-warning\/15:focus-visible{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-warning\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-warning)15%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-error:focus-visible{--tw-ring-color:var(--ui-error)}.focus-visible\:ring-info:focus-visible{--tw-ring-color:var(--ui-info)}.focus-visible\:ring-inverted:focus-visible{--tw-ring-color:var(--ui-border-inverted)}.focus-visible\:ring-primary:focus-visible{--tw-ring-color:var(--ui-primary)}.focus-visible\:ring-secondary:focus-visible{--tw-ring-color:var(--ui-secondary)}.focus-visible\:ring-success:focus-visible{--tw-ring-color:var(--ui-success)}.focus-visible\:ring-warning:focus-visible{--tw-ring-color:var(--ui-warning)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-error:focus-visible,.focus-visible\:outline-error\/50:focus-visible{outline-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-error\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-error)50%,transparent)}}.focus-visible\:outline-info:focus-visible,.focus-visible\:outline-info\/50:focus-visible{outline-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-info\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-info)50%,transparent)}}.focus-visible\:outline-inverted:focus-visible,.focus-visible\:outline-inverted\/50:focus-visible{outline-color:var(--ui-border-inverted)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-inverted\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-border-inverted)50%,transparent)}}.focus-visible\:outline-primary:focus-visible,.focus-visible\:outline-primary\/50:focus-visible{outline-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-primary\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-primary)50%,transparent)}}.focus-visible\:outline-secondary:focus-visible,.focus-visible\:outline-secondary\/50:focus-visible{outline-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-secondary\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-secondary)50%,transparent)}}.focus-visible\:outline-success:focus-visible,.focus-visible\:outline-success\/50:focus-visible{outline-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-success\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-success)50%,transparent)}}.focus-visible\:outline-warning:focus-visible,.focus-visible\:outline-warning\/50:focus-visible{outline-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-warning\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-warning)50%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:before\:ring-2:focus-visible:before{content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:before\:ring-error:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-error)}.focus-visible\:before\:ring-info:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-info)}.focus-visible\:before\:ring-inverted:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-border-inverted)}.focus-visible\:before\:ring-primary:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-primary)}.focus-visible\:before\:ring-secondary:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-secondary)}.focus-visible\:before\:ring-success:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-success)}.focus-visible\:before\:ring-warning:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-warning)}.focus-visible\:before\:ring-inset:focus-visible:before{content:var(--tw-content);--tw-ring-inset:inset}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-default:disabled{background-color:var(--ui-bg)}.disabled\:bg-elevated:disabled,.disabled\:bg-elevated\/50:disabled{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-elevated\/50:disabled{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.disabled\:bg-error:disabled,.disabled\:bg-error\/10:disabled{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-error\/10:disabled{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.disabled\:bg-info:disabled,.disabled\:bg-info\/10:disabled{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-info\/10:disabled{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.disabled\:bg-inverted:disabled{background-color:var(--ui-bg-inverted)}.disabled\:bg-primary:disabled,.disabled\:bg-primary\/10:disabled{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-primary\/10:disabled{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.disabled\:bg-secondary:disabled,.disabled\:bg-secondary\/10:disabled{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-secondary\/10:disabled{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.disabled\:bg-success:disabled,.disabled\:bg-success\/10:disabled{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-success\/10:disabled{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.disabled\:bg-transparent:disabled{background-color:#0000}.disabled\:bg-warning:disabled,.disabled\:bg-warning\/10:disabled{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-warning\/10:disabled{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.disabled\:text-error:disabled{color:var(--ui-error)}.disabled\:text-info:disabled{color:var(--ui-info)}.disabled\:text-muted:disabled{color:var(--ui-text-muted)}.disabled\:text-primary:disabled{color:var(--ui-primary)}.disabled\:text-secondary:disabled{color:var(--ui-secondary)}.disabled\:text-success:disabled{color:var(--ui-success)}.disabled\:text-warning:disabled{color:var(--ui-warning)}.disabled\:opacity-75:disabled{opacity:.75}@media (hover:hover){.hover\:disabled\:bg-transparent:hover:disabled{background-color:#0000}}.has-focus-visible\:z-\[1\]:has(:focus-visible){z-index:1}.has-focus-visible\:ring-2:has(:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-focus-visible\:ring-error:has(:focus-visible){--tw-ring-color:var(--ui-error)}.has-focus-visible\:ring-info:has(:focus-visible){--tw-ring-color:var(--ui-info)}.has-focus-visible\:ring-inverted:has(:focus-visible){--tw-ring-color:var(--ui-border-inverted)}.has-focus-visible\:ring-primary:has(:focus-visible){--tw-ring-color:var(--ui-primary)}.has-focus-visible\:ring-secondary:has(:focus-visible){--tw-ring-color:var(--ui-secondary)}.has-focus-visible\:ring-success:has(:focus-visible){--tw-ring-color:var(--ui-success)}.has-focus-visible\:ring-warning:has(:focus-visible){--tw-ring-color:var(--ui-warning)}.has-data-\[state\=checked\]\:z-\[1\]:has([data-state=checked]){z-index:1}.has-data-\[state\=checked\]\:border-error:has([data-state=checked]),.has-data-\[state\=checked\]\:border-error\/50:has([data-state=checked]){border-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-error\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-error)50%,transparent)}}.has-data-\[state\=checked\]\:border-info:has([data-state=checked]),.has-data-\[state\=checked\]\:border-info\/50:has([data-state=checked]){border-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-info\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-info)50%,transparent)}}.has-data-\[state\=checked\]\:border-inverted:has([data-state=checked]),.has-data-\[state\=checked\]\:border-inverted\/50:has([data-state=checked]){border-color:var(--ui-border-inverted)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-inverted\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-border-inverted)50%,transparent)}}.has-data-\[state\=checked\]\:border-primary:has([data-state=checked]),.has-data-\[state\=checked\]\:border-primary\/50:has([data-state=checked]){border-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-primary\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-primary)50%,transparent)}}.has-data-\[state\=checked\]\:border-secondary:has([data-state=checked]),.has-data-\[state\=checked\]\:border-secondary\/50:has([data-state=checked]){border-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-secondary\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-secondary)50%,transparent)}}.has-data-\[state\=checked\]\:border-success:has([data-state=checked]),.has-data-\[state\=checked\]\:border-success\/50:has([data-state=checked]){border-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-success\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-success)50%,transparent)}}.has-data-\[state\=checked\]\:border-warning:has([data-state=checked]),.has-data-\[state\=checked\]\:border-warning\/50:has([data-state=checked]){border-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-warning\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-warning)50%,transparent)}}.has-data-\[state\=checked\]\:bg-elevated:has([data-state=checked]){background-color:var(--ui-bg-elevated)}.has-data-\[state\=checked\]\:bg-error\/10:has([data-state=checked]){background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-error\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.has-data-\[state\=checked\]\:bg-info\/10:has([data-state=checked]){background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-info\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.has-data-\[state\=checked\]\:bg-primary\/10:has([data-state=checked]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-primary\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.has-data-\[state\=checked\]\:bg-secondary\/10:has([data-state=checked]){background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-secondary\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.has-data-\[state\=checked\]\:bg-success\/10:has([data-state=checked]){background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-success\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.has-data-\[state\=checked\]\:bg-warning\/10:has([data-state=checked]){background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-warning\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.aria-disabled\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.aria-disabled\:bg-default[aria-disabled=true]{background-color:var(--ui-bg)}.aria-disabled\:bg-elevated[aria-disabled=true]{background-color:var(--ui-bg-elevated)}.aria-disabled\:bg-error[aria-disabled=true],.aria-disabled\:bg-error\/10[aria-disabled=true]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-error\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.aria-disabled\:bg-info[aria-disabled=true],.aria-disabled\:bg-info\/10[aria-disabled=true]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-info\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.aria-disabled\:bg-inverted[aria-disabled=true]{background-color:var(--ui-bg-inverted)}.aria-disabled\:bg-primary[aria-disabled=true],.aria-disabled\:bg-primary\/10[aria-disabled=true]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-primary\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.aria-disabled\:bg-secondary[aria-disabled=true],.aria-disabled\:bg-secondary\/10[aria-disabled=true]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-secondary\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.aria-disabled\:bg-success[aria-disabled=true],.aria-disabled\:bg-success\/10[aria-disabled=true]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-success\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.aria-disabled\:bg-transparent[aria-disabled=true]{background-color:#0000}.aria-disabled\:bg-warning[aria-disabled=true],.aria-disabled\:bg-warning\/10[aria-disabled=true]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-warning\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.aria-disabled\:text-error[aria-disabled=true]{color:var(--ui-error)}.aria-disabled\:text-info[aria-disabled=true]{color:var(--ui-info)}.aria-disabled\:text-muted[aria-disabled=true]{color:var(--ui-text-muted)}.aria-disabled\:text-primary[aria-disabled=true]{color:var(--ui-primary)}.aria-disabled\:text-secondary[aria-disabled=true]{color:var(--ui-secondary)}.aria-disabled\:text-success[aria-disabled=true]{color:var(--ui-success)}.aria-disabled\:text-warning[aria-disabled=true]{color:var(--ui-warning)}.aria-disabled\:opacity-75[aria-disabled=true]{opacity:.75}@media (hover:hover){.hover\:aria-disabled\:bg-transparent:hover[aria-disabled=true]{background-color:#0000}}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:text-muted[data-disabled]{color:var(--ui-text-muted)}.data-disabled\:opacity-75[data-disabled]{opacity:.75}.data-highlighted\:text-error[data-highlighted]{color:var(--ui-error)}.data-highlighted\:text-highlighted[data-highlighted]{color:var(--ui-text-highlighted)}.data-highlighted\:text-info[data-highlighted]{color:var(--ui-info)}.data-highlighted\:text-primary[data-highlighted]{color:var(--ui-primary)}.data-highlighted\:text-secondary[data-highlighted]{color:var(--ui-secondary)}.data-highlighted\:text-success[data-highlighted]{color:var(--ui-success)}.data-highlighted\:text-warning[data-highlighted]{color:var(--ui-warning)}.data-highlighted\:not-data-disabled\:text-highlighted[data-highlighted]:not([data-disabled]){color:var(--ui-text-highlighted)}.data-highlighted\:before\:bg-elevated\/50[data-highlighted]:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-elevated\/50[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.data-highlighted\:before\:bg-error\/10[data-highlighted]:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-error\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.data-highlighted\:before\:bg-info\/10[data-highlighted]:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-info\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.data-highlighted\:before\:bg-primary\/10[data-highlighted]:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-primary\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.data-highlighted\:before\:bg-secondary\/10[data-highlighted]:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-secondary\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.data-highlighted\:before\:bg-success\/10[data-highlighted]:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-success\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.data-highlighted\:before\:bg-warning\/10[data-highlighted]:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-warning\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.data-highlighted\:not-data-disabled\:before\:bg-elevated\/50[data-highlighted]:not([data-disabled]):before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:not-data-disabled\:before\:bg-elevated\/50[data-highlighted]:not([data-disabled]):before{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.data-today\:font-semibold[data-today]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.data-today\:not-data-\[selected\]\:text-error[data-today]:not([data-selected]){color:var(--ui-error)}.data-today\:not-data-\[selected\]\:text-highlighted[data-today]:not([data-selected]){color:var(--ui-text-highlighted)}.data-today\:not-data-\[selected\]\:text-info[data-today]:not([data-selected]){color:var(--ui-info)}.data-today\:not-data-\[selected\]\:text-primary[data-today]:not([data-selected]){color:var(--ui-primary)}.data-today\:not-data-\[selected\]\:text-secondary[data-today]:not([data-selected]){color:var(--ui-secondary)}.data-today\:not-data-\[selected\]\:text-success[data-today]:not([data-selected]){color:var(--ui-success)}.data-today\:not-data-\[selected\]\:text-warning[data-today]:not([data-selected]){color:var(--ui-warning)}.data-unavailable\:pointer-events-none[data-unavailable]{pointer-events:none}.data-unavailable\:text-muted[data-unavailable]{color:var(--ui-text-muted)}.data-unavailable\:line-through[data-unavailable]{text-decoration-line:line-through}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[disabled\]\:opacity-75[data-disabled]{opacity:.75}.data-\[expanded\=true\]\:h-\(--height\)[data-expanded=true]{height:var(--height)}.data-\[expanded\=false\]\:data-\[front\=false\]\:h-\(--front-height\)[data-expanded=false][data-front=false]{height:var(--front-height)}:is(.data-\[expanded\=false\]\:data-\[front\=false\]\:\*\:invisible[data-expanded=false][data-front=false]>*){visibility:hidden}.data-\[highlighted\]\:bg-error\/20[data-highlighted]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-error\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-error)20%,transparent)}}.data-\[highlighted\]\:bg-info\/20[data-highlighted]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-info\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-info)20%,transparent)}}.data-\[highlighted\]\:bg-inverted\/20[data-highlighted]{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-inverted\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-bg-inverted)20%,transparent)}}.data-\[highlighted\]\:bg-primary\/20[data-highlighted]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-primary\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-primary)20%,transparent)}}.data-\[highlighted\]\:bg-secondary\/20[data-highlighted]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-secondary\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-secondary)20%,transparent)}}.data-\[highlighted\]\:bg-success\/20[data-highlighted]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-success\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-success)20%,transparent)}}.data-\[highlighted\]\:bg-warning\/20[data-highlighted]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-warning\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-warning)20%,transparent)}}.data-\[motion\=from-end\]\:animate-\[enter-from-right_200ms_ease\][data-motion=from-end]{animation:enter-from-right .2s}.data-\[motion\=from-start\]\:animate-\[enter-from-left_200ms_ease\][data-motion=from-start]{animation:enter-from-left .2s}.data-\[motion\=to-end\]\:animate-\[exit-to-right_200ms_ease\][data-motion=to-end]{animation:exit-to-right .2s}.data-\[motion\=to-start\]\:animate-\[exit-to-left_200ms_ease\][data-motion=to-start]{animation:exit-to-left .2s}.data-\[outside-view\]\:text-muted[data-outside-view]{color:var(--ui-text-muted)}.data-\[pinned\=left\]\:left-0[data-pinned=left]{left:calc(var(--spacing)*0)}.data-\[pinned\=right\]\:right-0[data-pinned=right]{right:calc(var(--spacing)*0)}.data-\[selected\]\:bg-error[data-selected]{background-color:var(--ui-error)}.data-\[selected\]\:bg-info[data-selected]{background-color:var(--ui-info)}.data-\[selected\]\:bg-inverted[data-selected]{background-color:var(--ui-bg-inverted)}.data-\[selected\]\:bg-primary[data-selected]{background-color:var(--ui-primary)}.data-\[selected\]\:bg-secondary[data-selected]{background-color:var(--ui-secondary)}.data-\[selected\]\:bg-success[data-selected]{background-color:var(--ui-success)}.data-\[selected\]\:bg-warning[data-selected]{background-color:var(--ui-warning)}.data-\[selected\]\:text-inverted[data-selected]{color:var(--ui-text-inverted)}.data-\[selected\=true\]\:bg-elevated\/50[data-selected=true]{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\=true\]\:bg-elevated\/50[data-selected=true]{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.data-\[state\=active\]\:text-error[data-state=active]{color:var(--ui-error)}.data-\[state\=active\]\:text-highlighted[data-state=active]{color:var(--ui-text-highlighted)}.data-\[state\=active\]\:text-info[data-state=active]{color:var(--ui-info)}.data-\[state\=active\]\:text-inverted[data-state=active]{color:var(--ui-text-inverted)}.data-\[state\=active\]\:text-primary[data-state=active]{color:var(--ui-primary)}.data-\[state\=active\]\:text-secondary[data-state=active]{color:var(--ui-secondary)}.data-\[state\=active\]\:text-success[data-state=active]{color:var(--ui-success)}.data-\[state\=active\]\:text-warning[data-state=active]{color:var(--ui-warning)}.data-\[state\=checked\]\:translate-x-3[data-state=checked]{--tw-translate-x:calc(var(--spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-3\.5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-4\.5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-error[data-state=checked]{background-color:var(--ui-error)}.data-\[state\=checked\]\:bg-info[data-state=checked]{background-color:var(--ui-info)}.data-\[state\=checked\]\:bg-inverted[data-state=checked]{background-color:var(--ui-bg-inverted)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--ui-primary)}.data-\[state\=checked\]\:bg-secondary[data-state=checked]{background-color:var(--ui-secondary)}.data-\[state\=checked\]\:bg-success[data-state=checked]{background-color:var(--ui-success)}.data-\[state\=checked\]\:bg-warning[data-state=checked]{background-color:var(--ui-warning)}.data-\[state\=closed\]\:animate-\[accordion-up_200ms_ease-out\][data-state=closed]{animation:accordion-up .2s ease-out}.data-\[state\=closed\]\:animate-\[collapsible-up_200ms_ease-out\][data-state=closed]{animation:collapsible-up .2s ease-out}.data-\[state\=closed\]\:animate-\[fade-out_200ms_ease-in\][data-state=closed]{animation:fade-out .2s ease-in}.data-\[state\=closed\]\:animate-\[scale-out_100ms_ease-in\][data-state=closed]{animation:scale-out .1s ease-in}.data-\[state\=closed\]\:animate-\[scale-out_200ms_ease-in\][data-state=closed]{animation:scale-out .2s ease-in}.data-\[state\=closed\]\:animate-\[slide-out-to-bottom_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-bottom .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-left_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-left .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-right_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-right .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-top_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-top .2s ease-in-out}.data-\[state\=closed\]\:animate-\[toast-closed_200ms_ease-in-out\][data-state=closed]{animation:toast-closed .2s ease-in-out}.data-\[state\=closed\]\:data-\[expanded\=false\]\:data-\[front\=false\]\:animate-\[toast-collapsed-closed_200ms_ease-in-out\][data-state=closed][data-expanded=false][data-front=false]{animation:toast-collapsed-closed .2s ease-in-out}.data-\[state\=delayed-open\]\:animate-\[scale-in_100ms_ease-out\][data-state=delayed-open]{animation:scale-in .1s ease-out}.data-\[state\=hidden\]\:animate-\[fade-out_100ms_ease-in\][data-state=hidden]{animation:fade-out .1s ease-in}.data-\[state\=hidden\]\:opacity-0[data-state=hidden]{opacity:0}.data-\[state\=inactive\]\:text-muted[data-state=inactive]{color:var(--ui-text-muted)}@media (hover:hover){.hover\:data-\[state\=inactive\]\:not-disabled\:text-default:hover[data-state=inactive]:not(:disabled){color:var(--ui-text)}}.data-\[state\=indeterminate\]\:animate-\[carousel-inverse-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-inverse-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel-inverse_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-inverse 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[elastic-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:elastic-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[elastic_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:elastic 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[swing-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:swing-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[swing_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:swing 2s ease-in-out infinite}.data-\[state\=open\]\:animate-\[accordion-down_200ms_ease-out\][data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=open\]\:animate-\[collapsible-down_200ms_ease-out\][data-state=open]{animation:collapsible-down .2s ease-out}.data-\[state\=open\]\:animate-\[fade-in_200ms_ease-out\][data-state=open]{animation:fade-in .2s ease-out}.data-\[state\=open\]\:animate-\[scale-in_100ms_ease-out\][data-state=open]{animation:scale-in .1s ease-out}.data-\[state\=open\]\:animate-\[scale-in_200ms_ease-out\][data-state=open]{animation:scale-in .2s ease-out}.data-\[state\=open\]\:animate-\[slide-in-from-bottom_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-bottom .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-left_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-left .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-right_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-right .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-top_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-top .2s ease-in-out}.data-\[state\=open\]\:bg-slate-800[data-state=open]{background-color:var(--color-slate-800)}.data-\[state\=open\]\:text-highlighted[data-state=open]{color:var(--ui-text-highlighted)}.data-\[state\=open\]\:before\:bg-elevated\/50[data-state=open]:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-elevated\/50[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}.data-\[state\=open\]\:before\:bg-error\/10[data-state=open]:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-error\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-error)10%,transparent)}}.data-\[state\=open\]\:before\:bg-info\/10[data-state=open]:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-info\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-info)10%,transparent)}}.data-\[state\=open\]\:before\:bg-primary\/10[data-state=open]:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-primary\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-primary)10%,transparent)}}.data-\[state\=open\]\:before\:bg-secondary\/10[data-state=open]:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-secondary\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-secondary)10%,transparent)}}.data-\[state\=open\]\:before\:bg-success\/10[data-state=open]:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-success\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-success)10%,transparent)}}.data-\[state\=open\]\:before\:bg-warning\/10[data-state=open]:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-warning\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-warning)10%,transparent)}}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-accented[data-state=unchecked]{background-color:var(--ui-bg-accented)}.data-\[state\=visible\]\:animate-\[fade-in_100ms_ease-out\][data-state=visible]{animation:fade-in .1s ease-out}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=cancel\]\:translate-y-0[data-swipe=cancel]{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\(--reka-toast-swipe-end-x\)[data-swipe=end]{--tw-translate-x:var(--reka-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-y-\(--reka-toast-swipe-end-y\)[data-swipe=end]{--tw-translate-y:var(--reka-toast-swipe-end-y);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:animate-\[toast-slide-down_200ms_ease-out\][data-swipe=end]{animation:toast-slide-down .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-left_200ms_ease-out\][data-swipe=end]{animation:toast-slide-left .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-right_200ms_ease-out\][data-swipe=end]{animation:toast-slide-right .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-up_200ms_ease-out\][data-swipe=end]{animation:toast-slide-up .2s ease-out}.data-\[swipe\=move\]\:translate-x-\(--reka-toast-swipe-move-x\)[data-swipe=move]{--tw-translate-x:var(--reka-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-y-\(--reka-toast-swipe-move-y\)[data-swipe=move]{--tw-translate-y:var(--reka-toast-swipe-move-y);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (min-width:40rem){.sm\:-start-12{inset-inline-start:calc(var(--spacing)*-12)}.sm\:-end-12{inset-inline-end:calc(var(--spacing)*-12)}.sm\:-top-12{top:calc(var(--spacing)*-12)}.sm\:-bottom-12{bottom:calc(var(--spacing)*-12)}.sm\:block{display:block}.sm\:max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem)}.sm\:w-\(--reka-navigation-menu-viewport-width\){width:var(--reka-navigation-menu-viewport-width)}.sm\:w-96{width:calc(var(--spacing)*96)}.sm\:flex-row{flex-direction:row}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*0*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*0*var(--tw-space-y-reverse))}:where(.sm\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.sm\:ring,.sm\:shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.sm\:ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline-flex{display:inline-flex}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.rtl\:translate-x-\[4px\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:4px;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-rotate-90:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-90deg}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.rtl\:text-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}.rtl\:after\:animate-\[carousel-inverse-rtl_2s_ease-in-out_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *):after{animation:carousel-inverse-rtl 2s ease-in-out infinite;content:var(--tw-content)}.rtl\:after\:animate-\[carousel-rtl_2s_ease-in-out_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *):after{animation:carousel-rtl 2s ease-in-out infinite;content:var(--tw-content)}.data-\[state\=checked\]\:rtl\:-translate-x-3[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-3\.5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-4[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-4\.5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-4.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=indeterminate\]\:rtl\:animate-\[carousel-inverse-rtl_2s_ease-in-out_infinite\][data-state=indeterminate]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:carousel-inverse-rtl 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:rtl\:animate-\[carousel-rtl_2s_ease-in-out_infinite\][data-state=indeterminate]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:carousel-rtl 2s ease-in-out infinite}.data-\[state\=unchecked\]\:rtl\:-translate-x-0[data-state=unchecked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--ui-color-neutral-800)}.dark\:border-red-900\/50:where(.dark,.dark *){border-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-900\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-slate-800:where(.dark,.dark *){border-color:var(--color-slate-800)}.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900)40%,transparent)}}.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:#0d542b33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}}.dark\:bg-neutral-900:where(.dark,.dark *),.dark\:bg-neutral-900\/50:where(.dark,.dark *){background-color:var(--ui-color-neutral-900)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-neutral-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--ui-color-neutral-900)50%,transparent)}}.dark\:bg-neutral-950:where(.dark,.dark *){background-color:var(--ui-color-neutral-950)}.dark\:bg-red-900\/10:where(.dark,.dark *){background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:#1d293d66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800)40%,transparent)}}.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:text-blue-200:where(.dark,.dark *){color:var(--color-blue-200)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-red-200:where(.dark,.dark *){color:var(--color-red-200)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-slate-100:where(.dark,.dark *){color:var(--color-slate-100)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}@media (hover:hover){.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-slate-800\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}}.dark\:focus-visible\:outline-none:where(.dark,.dark *):focus-visible{--tw-outline-style:none;outline-style:none}.dark\:disabled\:bg-transparent:where(.dark,.dark *):disabled{background-color:#0000}@media (hover:hover){.dark\:hover\:disabled\:bg-transparent:where(.dark,.dark *):hover:disabled{background-color:#0000}}.dark\:aria-disabled\:bg-transparent:where(.dark,.dark *)[aria-disabled=true]{background-color:#0000}@media (hover:hover){.dark\:hover\:aria-disabled\:bg-transparent:where(.dark,.dark *):hover[aria-disabled=true]{background-color:#0000}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pe-0:has([role=checkbox]){padding-inline-end:calc(var(--spacing)*0)}.\[\&\>button\]\:py-0>button{padding-block:calc(var(--spacing)*0)}.\[\&\>div\]\:min-w-0>div{min-width:calc(var(--spacing)*0)}.\[\&\>input\]\:h-12>input{height:calc(var(--spacing)*12)}.\[\&\>mark\]\:bg-primary>mark{background-color:var(--ui-primary)}.\[\&\>mark\]\:text-inverted>mark{color:var(--ui-text-inverted)}.\[\&\>tr\]\:after\:absolute>tr:after{content:var(--tw-content);position:absolute}.\[\&\>tr\]\:after\:inset-x-0>tr:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.\[\&\>tr\]\:after\:bottom-0>tr:after{bottom:calc(var(--spacing)*0);content:var(--tw-content)}.\[\&\>tr\]\:after\:h-px>tr:after{content:var(--tw-content);height:1px}.\[\&\>tr\]\:after\:bg-\(--ui-border-accented\)>tr:after{background-color:var(--ui-border-accented);content:var(--tw-content)}@media (hover:hover){.\[\&\>tr\]\:data-\[selectable\=true\]\:hover\:bg-elevated\/50>tr[data-selectable=true]:hover{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.\[\&\>tr\]\:data-\[selectable\=true\]\:hover\:bg-elevated\/50>tr[data-selectable=true]:hover{background-color:color-mix(in oklab,var(--ui-bg-elevated)50%,transparent)}}}.\[\&\>tr\]\:data-\[selectable\=true\]\:focus-visible\:outline-primary>tr[data-selectable=true]:focus-visible{outline-color:var(--ui-primary)}}@keyframes accordion-up{0%{height:var(--reka-accordion-content-height)}to{height:0}}@keyframes accordion-down{0%{height:0}to{height:var(--reka-accordion-content-height)}}@keyframes collapsible-up{0%{height:var(--reka-collapsible-content-height)}to{height:0}}@keyframes collapsible-down{0%{height:0}to{height:var(--reka-collapsible-content-height)}}@keyframes toast-collapsed-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--before) - var(--height))*var(--gap)))scale(var(--scale))}}@keyframes toast-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--offset) - var(--height))*var(--translate-factor)))}}@keyframes toast-slide-left{0%{transform:translate(0)translateY(var(--translate))}to{transform:translate(-100%)translateY(var(--translate))}}@keyframes toast-slide-right{0%{transform:translate(0)translateY(var(--translate))}to{transform:translate(100%)translateY(var(--translate))}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-from-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slide-out-to-top{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes slide-in-from-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slide-out-to-right{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes slide-in-from-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slide-out-to-left{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes slide-in-from-top-and-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-top-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes slide-in-from-right-and-fade{0%{opacity:0;transform:translate(4px)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-to-right-and-fade{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(4px)}}@keyframes slide-in-from-bottom-and-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes slide-in-from-left-and-fade{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-to-left-and-fade{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-4px)}}@keyframes enter-from-right{0%{opacity:0;transform:translate(200px)}to{opacity:1;transform:translate(0)}}@keyframes enter-from-left{0%{opacity:0;transform:translate(-200px)}to{opacity:1;transform:translate(0)}}@keyframes exit-to-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(200px)}}@keyframes exit-to-left{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-200px)}}@keyframes carousel{0%,to{width:50%}0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes carousel-rtl{0%,to{width:50%}0%{transform:translate(100%)}to{transform:translate(-200%)}}@keyframes carousel-vertical{0%,to{height:50%}0%{transform:translateY(-100%)}to{transform:translateY(200%)}}@keyframes carousel-inverse{0%,to{width:50%}0%{transform:translate(200%)}to{transform:translate(-100%)}}@keyframes carousel-inverse-rtl{0%,to{width:50%}0%{transform:translate(-200%)}to{transform:translate(100%)}}@keyframes carousel-inverse-vertical{0%,to{height:50%}0%{transform:translateY(200%)}to{transform:translateY(-100%)}}@keyframes swing{0%,to{width:50%}0%,to{transform:translate(-25%)}50%{transform:translate(125%)}}@keyframes swing-vertical{0%,to{height:50%}0%,to{transform:translateY(-25%)}50%{transform:translateY(125%)}}@keyframes elastic{0%,to{margin-left:25%;width:50%}50%{margin-left:5%;width:90%}}@keyframes elastic-vertical{0%,to{height:50%;margin-top:25%}50%{height:90%;margin-top:5%}}*{transition:background-color .2s,border-color .2s}body{background-color:var(--ui-color-neutral-50)}body:where(.dark,.dark *){background-color:var(--ui-color-neutral-950)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} diff --git a/TerraformRegistry/web/_nuxt/error-404.4oxyXxx0.css b/TerraformRegistry/web/_nuxt/error-404.4oxyXxx0.css new file mode 100644 index 0000000..9e4b076 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/error-404.4oxyXxx0.css @@ -0,0 +1 @@ +.spotlight[data-v-06403dcb]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);bottom:-30vh;filter:blur(20vh);height:40vh}.gradient-border[data-v-06403dcb]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:.5rem;position:relative}@media (prefers-color-scheme:light){.gradient-border[data-v-06403dcb]{background-color:#ffffff4d}.gradient-border[data-v-06403dcb]:before{background:linear-gradient(90deg,#e2e2e2,#e2e2e2 25%,#00dc82,#36e4da 75%,#0047e1)}}@media (prefers-color-scheme:dark){.gradient-border[data-v-06403dcb]{background-color:#1414144d}.gradient-border[data-v-06403dcb]:before{background:linear-gradient(90deg,#303030,#303030 25%,#00dc82,#36e4da 75%,#0047e1)}}.gradient-border[data-v-06403dcb]:before{background-size:400% auto;border-radius:.5rem;bottom:0;content:"";left:0;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;padding:2px;position:absolute;right:0;top:0;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;width:100%}.gradient-border[data-v-06403dcb]:hover:before{background-position:-50% 0;opacity:1}.fixed[data-v-06403dcb]{position:fixed}.left-0[data-v-06403dcb]{left:0}.right-0[data-v-06403dcb]{right:0}.z-10[data-v-06403dcb]{z-index:10}.z-20[data-v-06403dcb]{z-index:20}.grid[data-v-06403dcb]{display:grid}.mb-16[data-v-06403dcb]{margin-bottom:4rem}.mb-8[data-v-06403dcb]{margin-bottom:2rem}.max-w-520px[data-v-06403dcb]{max-width:520px}.min-h-screen[data-v-06403dcb]{min-height:100vh}.w-full[data-v-06403dcb]{width:100%}.flex[data-v-06403dcb]{display:flex}.cursor-pointer[data-v-06403dcb]{cursor:pointer}.place-content-center[data-v-06403dcb]{place-content:center}.items-center[data-v-06403dcb]{align-items:center}.justify-center[data-v-06403dcb]{justify-content:center}.overflow-hidden[data-v-06403dcb]{overflow:hidden}.bg-white[data-v-06403dcb]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-4[data-v-06403dcb]{padding-left:1rem;padding-right:1rem}.px-8[data-v-06403dcb]{padding-left:2rem;padding-right:2rem}.py-2[data-v-06403dcb]{padding-bottom:.5rem;padding-top:.5rem}.text-center[data-v-06403dcb]{text-align:center}.text-8xl[data-v-06403dcb]{font-size:6rem;line-height:1}.text-xl[data-v-06403dcb]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-06403dcb]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-06403dcb]{font-weight:300}.font-medium[data-v-06403dcb]{font-weight:500}.leading-tight[data-v-06403dcb]{line-height:1.25}.font-sans[data-v-06403dcb]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-06403dcb]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-06403dcb]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-06403dcb]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-06403dcb]{padding-left:0;padding-right:0}.sm\:px-6[data-v-06403dcb]{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3[data-v-06403dcb]{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-4xl[data-v-06403dcb]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-06403dcb]{font-size:1.25rem;line-height:1.75rem}} diff --git a/TerraformRegistry/web/_nuxt/error-500.CZqNkBuR.css b/TerraformRegistry/web/_nuxt/error-500.CZqNkBuR.css new file mode 100644 index 0000000..9d400d7 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/error-500.CZqNkBuR.css @@ -0,0 +1 @@ +.spotlight[data-v-4b6f0a29]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);filter:blur(20vh)}.fixed[data-v-4b6f0a29]{position:fixed}.-bottom-1\/2[data-v-4b6f0a29]{bottom:-50%}.left-0[data-v-4b6f0a29]{left:0}.right-0[data-v-4b6f0a29]{right:0}.grid[data-v-4b6f0a29]{display:grid}.mb-16[data-v-4b6f0a29]{margin-bottom:4rem}.mb-8[data-v-4b6f0a29]{margin-bottom:2rem}.h-1\/2[data-v-4b6f0a29]{height:50%}.max-w-520px[data-v-4b6f0a29]{max-width:520px}.min-h-screen[data-v-4b6f0a29]{min-height:100vh}.place-content-center[data-v-4b6f0a29]{place-content:center}.overflow-hidden[data-v-4b6f0a29]{overflow:hidden}.bg-white[data-v-4b6f0a29]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-8[data-v-4b6f0a29]{padding-left:2rem;padding-right:2rem}.text-center[data-v-4b6f0a29]{text-align:center}.text-8xl[data-v-4b6f0a29]{font-size:6rem;line-height:1}.text-xl[data-v-4b6f0a29]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-4b6f0a29]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-4b6f0a29]{font-weight:300}.font-medium[data-v-4b6f0a29]{font-weight:500}.leading-tight[data-v-4b6f0a29]{line-height:1.25}.font-sans[data-v-4b6f0a29]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-4b6f0a29]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-4b6f0a29]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-4b6f0a29]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-4b6f0a29]{padding-left:0;padding-right:0}.sm\:text-4xl[data-v-4b6f0a29]{font-size:2.25rem;line-height:2.5rem}} diff --git a/TerraformRegistry/web/callback/index.html b/TerraformRegistry/web/callback/index.html new file mode 100644 index 0000000..d5aa770 --- /dev/null +++ b/TerraformRegistry/web/callback/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/TerraformRegistry/web/favicon.ico b/TerraformRegistry/web/favicon.ico new file mode 100644 index 0000000..18993ad Binary files /dev/null and b/TerraformRegistry/web/favicon.ico differ diff --git a/TerraformRegistry/web/index.html b/TerraformRegistry/web/index.html new file mode 100644 index 0000000..d675408 --- /dev/null +++ b/TerraformRegistry/web/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/TerraformRegistry/web/login/index.html b/TerraformRegistry/web/login/index.html new file mode 100644 index 0000000..d5aa770 --- /dev/null +++ b/TerraformRegistry/web/login/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/TerraformRegistry/web/robots.txt b/TerraformRegistry/web/robots.txt new file mode 100644 index 0000000..0ad279c --- /dev/null +++ b/TerraformRegistry/web/robots.txt @@ -0,0 +1,2 @@ +User-Agent: * +Disallow: diff --git a/TerraformRegistry/web/settings/index.html b/TerraformRegistry/web/settings/index.html new file mode 100644 index 0000000..d5aa770 --- /dev/null +++ b/TerraformRegistry/web/settings/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/build-frontend.ps1 b/build-frontend.ps1 new file mode 100644 index 0000000..79a47c9 --- /dev/null +++ b/build-frontend.ps1 @@ -0,0 +1,81 @@ +# Build script for the Terraform Registry frontend (Nuxt.js) +# This script builds the frontend and copies the output to the web folder + +param( + [switch]$SkipInstall, + [switch]$Watch +) + +$ErrorActionPreference = "Stop" + +$webSrcPath = Join-Path $PSScriptRoot "TerraformRegistry\web-src" +$webOutputPath = Join-Path $PSScriptRoot "TerraformRegistry\web" + +Write-Host "=== Terraform Registry Frontend Build ===" -ForegroundColor Cyan +Write-Host "" + +# Navigate to web-src directory +Push-Location $webSrcPath + +try { + # Install dependencies (unless skipped) + if (-not $SkipInstall) { + Write-Host "Installing npm dependencies..." -ForegroundColor Yellow + npm install + if ($LASTEXITCODE -ne 0) { + Write-Host "npm install failed!" -ForegroundColor Red + exit 1 + } + Write-Host "Dependencies installed successfully." -ForegroundColor Green + Write-Host "" + } + + if ($Watch) { + # Development mode with hot reload + Write-Host "Starting Nuxt development server..." -ForegroundColor Yellow + Write-Host "Note: This runs the frontend separately. Access at http://localhost:3000" -ForegroundColor Cyan + npm run dev + } + else { + # Production build + Write-Host "Building frontend for production..." -ForegroundColor Yellow + npm run generate + if ($LASTEXITCODE -ne 0) { + Write-Host "Build failed!" -ForegroundColor Red + exit 1 + } + Write-Host "Build completed successfully." -ForegroundColor Green + Write-Host "" + + # Define source path (Nuxt generate outputs to .output/public) + $buildOutputPath = Join-Path $webSrcPath ".output\public" + + if (-not (Test-Path $buildOutputPath)) { + Write-Host "Build output not found at: $buildOutputPath" -ForegroundColor Red + exit 1 + } + + # Clear the destination web folder + Write-Host "Clearing existing web folder..." -ForegroundColor Yellow + if (Test-Path $webOutputPath) { + Get-ChildItem -Path $webOutputPath -Recurse | Remove-Item -Recurse -Force + } + else { + New-Item -ItemType Directory -Path $webOutputPath | Out-Null + } + + # Copy build output to web folder + Write-Host "Copying build output to web folder..." -ForegroundColor Yellow + Copy-Item -Path "$buildOutputPath\*" -Destination $webOutputPath -Recurse -Force + + Write-Host "" + Write-Host "=== Build Complete ===" -ForegroundColor Green + Write-Host "Frontend files copied to: $webOutputPath" -ForegroundColor Cyan + Write-Host "" + Write-Host "Files in web folder:" -ForegroundColor Yellow + Get-ChildItem -Path $webOutputPath | ForEach-Object { Write-Host " $_" } + } +} +finally { + Pop-Location +} diff --git a/devutils/pgadmin/servers/servers.json b/devutils/pgadmin/servers/servers.json new file mode 100644 index 0000000..c444053 --- /dev/null +++ b/devutils/pgadmin/servers/servers.json @@ -0,0 +1,14 @@ +{ + "Servers": { + "1": { + "Name": "Terraform Registry Database", + "Group": "Terraform", + "Host": "postgres", + "Port": 5432, + "MaintenanceDB": "terraform_registry_dev", + "Username": "terraform_reg_user", + "SSLMode": "prefer", + "PassFile": "/var/lib/pgadmin/pgpassfile" + } + } +} diff --git a/devutils/upload-dummy-module.ps1 b/devutils/upload-dummy-module.ps1 new file mode 100644 index 0000000..845e29e --- /dev/null +++ b/devutils/upload-dummy-module.ps1 @@ -0,0 +1,49 @@ +param( + [string]$BaseUrl = "http://localhost:5131", + [string]$Namespace = "example", + [string]$Name = "dummy", + [string]$Provider = "aws", + [string]$Version = "0.0.1", + [string]$Description = "Dummy module uploaded by script", + [string]$ApiKey = "API_KEY_HERE", + [string]$WorkDir = "$PSScriptRoot/dummy-module", + [string]$ZipPath = "$PSScriptRoot/dummy-module.zip", + [switch]$ReplaceIfExists +) + +# Create a tiny dummy module on disk +New-Item -ItemType Directory -Force -Path $WorkDir | Out-Null +@' +# Dummy module +variable "example" { + type = string + default = "hello" +} + +output "example" { + value = var.example +} +'@ | Set-Content -Path (Join-Path $WorkDir "main.tf") -Encoding UTF8 + +# Zip the module +if (Test-Path $ZipPath) { Remove-Item -Force $ZipPath } +Compress-Archive -Path (Join-Path $WorkDir '*') -DestinationPath $ZipPath + +# Build target URL +$uri = "$BaseUrl/v1/modules/$Namespace/$Name/$Provider/$Version" + +# Prepare form data +$form = @{ + moduleFile = Get-Item $ZipPath + description = $Description + replace = if ($ReplaceIfExists) { "true" } else { "false" } +} + +$headers = @{} +if ($ApiKey) { + $headers["Authorization"] = "Bearer $ApiKey" +} + +Write-Host "Uploading $ZipPath to $uri" -ForegroundColor Cyan +$resp = Invoke-RestMethod -Method Post -Uri $uri -Form $form -Headers $headers -ContentType "multipart/form-data" +$resp | ConvertTo-Json -Depth 5 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..255f05a --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,65 @@ +--- +services: + app: + build: + context: . + dockerfile: Dockerfile + container_name: terraform-registry-app-dev + ports: + - "5131:80" + - "5132:443" + volumes: + - module_data:/app/modules + environment: + - ASPNETCORE_ENVIRONMENT=Development + - TF_REG_DatabaseProvider=postgres + - TF_REG_PostgreSQL__ConnectionString=Host=postgres;Database=terraform_registry;Username=terraform_reg_user;Password=terraform_reg_password + - TF_REG_BaseUrl=http://localhost:5131 + - TF_REG_StorageProvider=local + - TF_REG_EnableSwagger=true + - TF_REG_OIDC__JWTSECRETKEY= + - TF_REG_OIDC__PROVIDERS__GITHUB__CLIENTID= + - TF_REG_OIDC__PROVIDERS__GITHUB__CLIENTSECRET= + - TF_REG_OIDC__PROVIDERS__GITHUB__ENABLED=true + - TF_REG_OIDC__PROVIDERS__AZUREAD__ENABLED=true + - TF_REG_AUTHORIZATIONTOKEN=MY_TOKEN_123 + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:18 + ports: + - "5433:5432" + volumes: + - postgres_data_dev:/var/lib/postgresql + environment: + POSTGRES_USER: terraform_reg_user + POSTGRES_PASSWORD: terraform_reg_password + POSTGRES_DB: terraform_registry + healthcheck: + test: + ["CMD-SHELL", "pg_isready -U terraform_reg_user -d terraform_registry"] + interval: 5s + timeout: 5s + retries: 5 + start_period: 10s + + pgadmin: + image: dpage/pgadmin4:latest + container_name: terraform-registry-pgadmin + environment: + PGADMIN_DEFAULT_EMAIL: admin@example.com + PGADMIN_DEFAULT_PASSWORD: admin + ports: + - "5050:80" + volumes: + - ./devutils/pgadmin/servers/servers.json:/pgadmin4/servers.json + - pgpassfile_data:/var/lib/pgadmin + depends_on: + - postgres + +volumes: + postgres_data_dev: + pgpassfile_data: + module_data: diff --git a/docker-compose.prod.yml.disabled b/docker-compose.prod.yml.disabled new file mode 100644 index 0000000..12142d8 --- /dev/null +++ b/docker-compose.prod.yml.disabled @@ -0,0 +1,53 @@ +--- + +# Production-specific overrides +services: + app: + image: terraform-registry:latest # Using a pre-built image instead of building + container_name: terraform-registry-app-prod + restart: always + deploy: + resources: + limits: + cpus: '1' + memory: 1G + environment: + - ASPNETCORE_ENVIRONMENT=Production + - TF_REG_DatabaseProvider=postgres + - TF_REG_PostgreSQL__ConnectionString=Host=postgres;Database=terraform_registry;Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD} + - TF_REG_BaseUrl=${BASE_URL:-http://localhost:5131} + - TF_REG_StorageProvider=local + + postgres: + restart: always + deploy: + resources: + limits: + cpus: '1' + memory: 1G + environment: + POSTGRES_USER: ${POSTGRES_USER:-terraform_reg_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-terraform_reg_password} + POSTGRES_DB: terraform_registry + volumes: + - postgres_data_prod:/var/lib/postgresql/data + # No ports exposed to the host in production (only accessible to other containers) + ports: [] + + # Adding a reverse proxy for production + nginx: + image: nginx:latest + container_name: terraform-registry-nginx + ports: + - "80:80" + - "443:443" + volumes: + - ./nginx/conf.d:/etc/nginx/conf.d + - ./nginx/ssl:/etc/nginx/ssl + depends_on: + - app + restart: always + +volumes: + postgres_data_prod: + module_data: \ No newline at end of file diff --git a/docker-compose.psql.yml b/docker-compose.psql.yml new file mode 100644 index 0000000..755a0e0 --- /dev/null +++ b/docker-compose.psql.yml @@ -0,0 +1,38 @@ +--- +services: + postgres: + image: postgres:18 + ports: + - "5433:5432" + volumes: + - postgres_data_dev:/var/lib/postgresql + environment: + POSTGRES_USER: terraform_reg_user + POSTGRES_PASSWORD: terraform_reg_password + POSTGRES_DB: terraform_registry + healthcheck: + test: + ["CMD-SHELL", "pg_isready -U terraform_reg_user -d terraform_registry"] + interval: 5s + timeout: 5s + retries: 5 + start_period: 10s + + pgadmin: + image: dpage/pgadmin4:latest + container_name: terraform-registry-pgadmin + environment: + PGADMIN_DEFAULT_EMAIL: admin@example.com + PGADMIN_DEFAULT_PASSWORD: admin + ports: + - "5050:80" + volumes: + - ./devutils/pgadmin/servers/servers.json:/pgadmin4/servers.json + - pgpassfile_data:/var/lib/pgadmin + depends_on: + - postgres + +volumes: + postgres_data_dev: + pgpassfile_data: + module_data: diff --git a/global.json b/global.json new file mode 100644 index 0000000..a11f48e --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "10.0.0", + "rollForward": "latestMajor", + "allowPrerelease": true + } +} \ No newline at end of file diff --git a/terraform-registry.sln b/terraform-registry.sln new file mode 100644 index 0000000..6c98992 --- /dev/null +++ b/terraform-registry.sln @@ -0,0 +1,107 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry", "TerraformRegistry\TerraformRegistry.csproj", "{EA326FFE-5464-E266-1CE7-A2CE82632658}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry.API", "TerraformRegistry.API\TerraformRegistry.API.csproj", "{54A79B39-68A8-4475-8D5E-15924298B9F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry.Models", "TerraformRegistry.Models\TerraformRegistry.Models.csproj", "{7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry.PostgreSQL", "TerraformRegistry.PostgreSQL\TerraformRegistry.PostgreSQL.csproj", "{28650D77-7424-4248-959C-66AE12ECC367}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry.AzureBlob", "TerraformRegistry.AzureBlob\TerraformRegistry.AzureBlob.csproj", "{E59DBCDE-FB50-4B55-9E59-3304A57B816B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TerraformRegistry.Tests", "TerraformRegistry.Tests\TerraformRegistry.Tests.csproj", "{82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|x64.ActiveCfg = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|x64.Build.0 = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|x86.ActiveCfg = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Debug|x86.Build.0 = Debug|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|Any CPU.Build.0 = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|x64.ActiveCfg = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|x64.Build.0 = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|x86.ActiveCfg = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|x86.Build.0 = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|x64.ActiveCfg = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|x64.Build.0 = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|x86.ActiveCfg = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Debug|x86.Build.0 = Debug|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|Any CPU.Build.0 = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|x64.ActiveCfg = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|x64.Build.0 = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|x86.ActiveCfg = Release|Any CPU + {54A79B39-68A8-4475-8D5E-15924298B9F0}.Release|x86.Build.0 = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|x64.Build.0 = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Debug|x86.Build.0 = Debug|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|Any CPU.Build.0 = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|x64.ActiveCfg = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|x64.Build.0 = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|x86.ActiveCfg = Release|Any CPU + {7D95EA2D-C95E-44CD-B00C-1881B2D4B2F7}.Release|x86.Build.0 = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|x64.ActiveCfg = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|x64.Build.0 = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|x86.ActiveCfg = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Debug|x86.Build.0 = Debug|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|Any CPU.Build.0 = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|x64.ActiveCfg = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|x64.Build.0 = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|x86.ActiveCfg = Release|Any CPU + {28650D77-7424-4248-959C-66AE12ECC367}.Release|x86.Build.0 = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|x64.ActiveCfg = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|x64.Build.0 = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|x86.ActiveCfg = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Debug|x86.Build.0 = Debug|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|Any CPU.Build.0 = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|x64.ActiveCfg = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|x64.Build.0 = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|x86.ActiveCfg = Release|Any CPU + {E59DBCDE-FB50-4B55-9E59-3304A57B816B}.Release|x86.Build.0 = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|x64.ActiveCfg = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|x64.Build.0 = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|x86.ActiveCfg = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Debug|x86.Build.0 = Debug|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|Any CPU.Build.0 = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|x64.ActiveCfg = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|x64.Build.0 = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|x86.ActiveCfg = Release|Any CPU + {82F9CAEF-D6FE-4ED5-8EFE-14E1FF857798}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DB8A1D43-CCD7-4FFA-81F4-28A79B221890} + EndGlobalSection +EndGlobal