From 676449c247fd83ae5d6d323361b0f76170271539 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 24 Apr 2025 10:12:24 +0100 Subject: [PATCH 01/29] Initial dev commit --- .github/workflows/release.yaml | 79 ++++ Dockerfile | 26 ++ Dockerfile.dev | 25 ++ GitVersion.yml | 26 ++ README.md | 97 ++++ .../Interfaces/IDatabaseService.cs | 34 ++ .../Interfaces/IModuleService.cs | 34 ++ TerraformRegistry.API/ModuleService.cs | 51 +++ .../TerraformRegistry.API.csproj | 13 + .../Utilities/SemVerValidator.cs | 147 ++++++ .../AzureBlobModuleService.cs | 337 ++++++++++++++ .../TerraformRegistry.AzureBlob.csproj | 18 + TerraformRegistry.Models/Module.cs | 51 +++ TerraformRegistry.Models/ModuleList.cs | 15 + TerraformRegistry.Models/ModuleListItem.cs | 42 ++ TerraformRegistry.Models/ModuleMetadata.cs | 17 + .../ModuleSearchRequest.cs | 24 + TerraformRegistry.Models/ModuleStorage.cs | 17 + TerraformRegistry.Models/ModuleSubmodule.cs | 15 + TerraformRegistry.Models/ModuleVersions.cs | 12 + TerraformRegistry.Models/ServiceDiscovery.cs | 16 + .../TerraformRegistry.Models.csproj | 9 + .../Migrations/IDatabaseMigration.cs | 24 + .../Migrations/MigrationManager.cs | 191 ++++++++ .../Migrations/Migration_1_0_0.cs | 120 +++++ .../PostgreSQLDatabaseService.cs | 422 ++++++++++++++++++ .../TerraformRegistry.PostgreSQL.csproj | 17 + TerraformRegistry/Handlers/ModuleHandlers.cs | 185 ++++++++ .../Handlers/ServiceDiscoveryHandlers.cs | 17 + TerraformRegistry/JsonSerializerContext.cs | 22 + TerraformRegistry/Program.cs | 215 +++++++++ .../Properties/launchSettings.json | 23 + .../Services/InMemoryDatabaseService.cs | 172 +++++++ .../Services/LocalModuleService.cs | 228 ++++++++++ TerraformRegistry/TerraformRegistry.csproj | 40 ++ .../appsettings.Development.json | 31 ++ TerraformRegistry/appsettings.json | 32 ++ TerraformRegistry/web/index.html | 17 + devutils/pgadmin/servers/servers.json | 14 + docker-compose.dev.yml | 53 +++ docker-compose.prod.yml | 53 +++ terraform-registry.sln | 24 + 42 files changed, 3005 insertions(+) create mode 100644 .github/workflows/release.yaml create mode 100644 Dockerfile create mode 100644 Dockerfile.dev create mode 100644 GitVersion.yml create mode 100644 README.md create mode 100644 TerraformRegistry.API/Interfaces/IDatabaseService.cs create mode 100644 TerraformRegistry.API/Interfaces/IModuleService.cs create mode 100644 TerraformRegistry.API/ModuleService.cs create mode 100644 TerraformRegistry.API/TerraformRegistry.API.csproj create mode 100644 TerraformRegistry.API/Utilities/SemVerValidator.cs create mode 100644 TerraformRegistry.AzureBlob/AzureBlobModuleService.cs create mode 100644 TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj create mode 100644 TerraformRegistry.Models/Module.cs create mode 100644 TerraformRegistry.Models/ModuleList.cs create mode 100644 TerraformRegistry.Models/ModuleListItem.cs create mode 100644 TerraformRegistry.Models/ModuleMetadata.cs create mode 100644 TerraformRegistry.Models/ModuleSearchRequest.cs create mode 100644 TerraformRegistry.Models/ModuleStorage.cs create mode 100644 TerraformRegistry.Models/ModuleSubmodule.cs create mode 100644 TerraformRegistry.Models/ModuleVersions.cs create mode 100644 TerraformRegistry.Models/ServiceDiscovery.cs create mode 100644 TerraformRegistry.Models/TerraformRegistry.Models.csproj create mode 100644 TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs create mode 100644 TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs create mode 100644 TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs create mode 100644 TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs create mode 100644 TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj create mode 100644 TerraformRegistry/Handlers/ModuleHandlers.cs create mode 100644 TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs create mode 100644 TerraformRegistry/JsonSerializerContext.cs create mode 100644 TerraformRegistry/Program.cs create mode 100644 TerraformRegistry/Properties/launchSettings.json create mode 100644 TerraformRegistry/Services/InMemoryDatabaseService.cs create mode 100644 TerraformRegistry/Services/LocalModuleService.cs create mode 100644 TerraformRegistry/TerraformRegistry.csproj create mode 100644 TerraformRegistry/appsettings.Development.json create mode 100644 TerraformRegistry/appsettings.json create mode 100644 TerraformRegistry/web/index.html create mode 100644 devutils/pgadmin/servers/servers.json create mode 100644 docker-compose.dev.yml create mode 100644 docker-compose.prod.yml create mode 100644 terraform-registry.sln diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..fcf4945 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,79 @@ +name: Build and Publish Docker Image + +on: + push: + branches: + - main + - develop + - "release/**" + - "hotfix/**" + tags: + - "v*.*.*" + pull_request: + branches: + - main + - develop + workflow_dispatch: + inputs: + use_postgresql: + description: "Include PostgreSQL support" + required: false + default: "true" + use_azure_blob: + description: "Include Azure Blob support" + required: false + default: "true" + +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: "9.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: Login to GitHub Container Registry + if: github.event_name != 'pull_request' + 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: . + build-args: | + USE_POSTGRESQL=${{ github.event.inputs.use_postgresql || 'true' }} + USE_AZURE_BLOB=${{ github.event.inputs.use_azure_blob || 'true' }} + push: ${{ github.event_name != 'pull_request' }} + tags: | + ghcr.io/${{ github.repository_owner }}/terraform-registry:${{ steps.set-version.outputs.semVer }} + ${{ 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/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ca29cc0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build +WORKDIR /src + +# Define build arguments with defaults +ARG USE_POSTGRESQL=false +ARG USE_AZURE_BLOB=false + +COPY ["TerraformRegistry/TerraformRegistry.csproj", "TerraformRegistry/"] +RUN dotnet restore "TerraformRegistry/TerraformRegistry.csproj" /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +COPY . . +WORKDIR "/src/TerraformRegistry" +RUN dotnet build "TerraformRegistry.csproj" -c Release -o /app/build /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} + +FROM build AS publish +RUN dotnet publish "TerraformRegistry.csproj" -c Release -o /app/publish /p:UseAppHost=false /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} + +FROM mcr.microsoft.com/dotnet/aspnet:9.0 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 +EXPOSE 80 +EXPOSE 443 +ENTRYPOINT ["dotnet", "TerraformRegistry.dll"] \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..ce0f66b --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,25 @@ +FROM mcr.microsoft.com/dotnet/sdk:9.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..38d065e --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# Private Terraform Registry + +A lightweight private Terraform Registry implementation currently focusing on support for modules. + +## Features + +- Full support for the Terraform Registry Protocol v1 for modules +- Support for different storage and database implementations +- OpenAPI documentation +- Configurable via environment variables for easy containerization and deployment + +## API Endpoints + +### Service Discovery + +- `GET /.well-known/terraform.json` - Terraform service discovery endpoint + +### Module Operations + +- `GET /v1/modules` - List or search modules +- `GET /v1/modules/{namespace}/{name}/{provider}/{version}` - Get specific module +- `GET /v1/modules/{namespace}/{name}/{provider}/versions` - Get all module versions +- `GET /v1/modules/{namespace}/{name}/{provider}/{version}/download` - Download module +- `POST /v1/modules/{namespace}/{name}/{provider}/{version}` - Upload new module + +## Configuration + +### Environment Variables + +The application can be configured using the following environment variables: + +| Environment Variable | Description | Default Value | Required | +| -------------------------------------------- | ------------------------------------- | ----------------------- | -------------------------------------- | +| `TF_REG_BaseUrl` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | +| `TF_REG_StorageProvider` | Storage provider (`local` or `azure`) | `local` | Yes | +| `TF_REG_ModuleStoragePath` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | +| `TF_REG_AzureStorage__ConnectionString` | Azure Storage connection string | Empty | Only when `StorageProvider` is `azure` | +| `TF_REG_AzureStorage__ContainerName` | Azure Storage container name | `modules` | Only when `StorageProvider` is `azure` | +| `TF_REG_AzureStorage__SasTokenExpiryMinutes` | Expiry time in minutes for SAS tokens | `5` | Only when `StorageProvider` is `azure` | + +### Configuration Precedence + +Configuration values are loaded in the following order, with later values overriding earlier ones: + +1. Default values +2. Configuration in `appsettings.json` +3. Configuration in `appsettings.{Environment}.json` +4. Environment variables + +### Docker Example + +```bash +docker run -p 5131:80 \ + -e TF_REG_BaseUrl=http://registry.example.com \ + -e TF_REG_StorageProvider=azure \ + -e TF_REG_AzureStorage__ConnectionString="DefaultEndpointsProtocol=https;AccountName=youraccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net" \ + terraform-registry +``` + +## Usage with Terraform + +Configure Terraform to use this private registry: + +```terraform +terraform { + required_providers { + aws = { + source = "localhost:5131/hashicorp/aws" + } + } +} +``` + +## Development + +### Building and Running + +```bash +# Build the project +dotnet build + +# Run the project +dotnet run + +# Build for Release +dotnet publish -c Release +``` + +### Testing API Endpoints + +When running in development mode, navigate to `/swagger` for interactive API documentation. + +## Project Structure + +- `Handlers/` - Minimal API endpoint handlers +- `Models/` - Data models for the Terraform Registry +- `Services/` - Business logic services diff --git a/TerraformRegistry.API/Interfaces/IDatabaseService.cs b/TerraformRegistry.API/Interfaces/IDatabaseService.cs new file mode 100644 index 0000000..0fc61e3 --- /dev/null +++ b/TerraformRegistry.API/Interfaces/IDatabaseService.cs @@ -0,0 +1,34 @@ +namespace TerraformRegistry.API.Interfaces; + +using Models; + +/// +/// 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); +} \ 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..0f75e5e --- /dev/null +++ b/TerraformRegistry.API/Interfaces/IModuleService.cs @@ -0,0 +1,34 @@ +namespace TerraformRegistry.API.Interfaces; + +using Models; + +/// +/// 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); +} \ No newline at end of file diff --git a/TerraformRegistry.API/ModuleService.cs b/TerraformRegistry.API/ModuleService.cs new file mode 100644 index 0000000..a2a3576 --- /dev/null +++ b/TerraformRegistry.API/ModuleService.cs @@ -0,0 +1,51 @@ +namespace TerraformRegistry.API; + +using Interfaces; +using Models; +using Utilities; + +/// +/// 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) + { + // 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); + } + + /// + /// 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); +} \ 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..b111f1b --- /dev/null +++ b/TerraformRegistry.API/TerraformRegistry.API.csproj @@ -0,0 +1,13 @@ + + + + + + + + net9.0 + enable + enable + + + diff --git a/TerraformRegistry.API/Utilities/SemVerValidator.cs b/TerraformRegistry.API/Utilities/SemVerValidator.cs new file mode 100644 index 0000000..16833e6 --- /dev/null +++ b/TerraformRegistry.API/Utilities/SemVerValidator.cs @@ -0,0 +1,147 @@ +namespace TerraformRegistry.API.Utilities; + +using System.Text.RegularExpressions; + +/// +/// 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]; + + bool isNum1 = int.TryParse(id1, out var num1); + bool 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..cb84b67 --- /dev/null +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -0,0 +1,337 @@ +namespace TerraformRegistry.AzureBlob; + +using System.Collections.Concurrent; +using System.IO.Compression; +using System.Text.Json; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Azure.Storage.Blobs.Specialized; +using Azure.Storage.Sas; +using Microsoft.Extensions.Configuration; +using TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; + +/// +/// Implementation of module service using Azure Blob Storage +/// +public class AzureBlobModuleService : ModuleService +{ + private readonly IDatabaseService _databaseService; + private readonly BlobServiceClient _blobServiceClient; + private readonly BlobContainerClient _containerClient; + private readonly string _containerName; + private readonly int _sasTokenExpiryMinutes; + + public AzureBlobModuleService(IConfiguration configuration, IDatabaseService databaseService) + { + _databaseService = databaseService; + + // Get Azure Storage connection settings from configuration + var connectionString = configuration["AzureStorage:ConnectionString"] + ?? throw new ArgumentNullException("AzureStorage:ConnectionString", "Azure Storage connection string is required"); + + _containerName = configuration["AzureStorage:ContainerName"] ?? "modules"; + _sasTokenExpiryMinutes = int.Parse(configuration["AzureStorage:SasTokenExpiryMinutes"] ?? "5"); + + // Initialize Azure Blob Storage clients + _blobServiceClient = new BlobServiceClient(connectionString); + _containerClient = _blobServiceClient.GetBlobContainerClient(_containerName); + + // Ensure container exists + _containerClient.CreateIfNotExists(PublicAccessType.None); + + // Load existing modules from Azure Blob Storage + LoadExistingModules(); + } + + /// + /// 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 + Console.WriteLine($"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 + Console.WriteLine($"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 + Console.WriteLine($"Error generating SAS token for module {@namespace}/{name}/{provider}/{version}: {ex.Message}"); + 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) + { + // 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 + if (await blobClient.ExistsAsync()) + { + Console.WriteLine($"Module {@namespace}/{name}/{provider}/{version} already exists in blob storage"); + 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 + }; + + // 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(); + Console.WriteLine($"Failed to add module {@namespace}/{name}/{provider}/{version} to database, cleaned up blob storage"); + } + + return result; + } + catch (Exception ex) + { + // Log any errors during upload + Console.WriteLine($"Error uploading module {@namespace}/{name}/{provider}/{version}: {ex.Message}"); + + // 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 + { + Console.WriteLine("Starting synchronization between Azure Blob Storage and PostgreSQL database..."); + int 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++; + Console.WriteLine($"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 + Console.WriteLine($"Error processing blob {blobItem.Name}: {ex.Message}"); + } + } + + Console.WriteLine($"Synchronization complete. Added {syncCount} modules from Azure Blob Storage to the database."); + } + catch (Exception ex) + { + // Log any errors during initialization + Console.WriteLine($"Error during blob storage/database synchronization: {ex.Message}"); + } + } +} \ 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..e2cf302 --- /dev/null +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -0,0 +1,18 @@ + + + + + + + + net9.0 + enable + enable + + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry.Models/Module.cs b/TerraformRegistry.Models/Module.cs new file mode 100644 index 0000000..f6eacd7 --- /dev/null +++ b/TerraformRegistry.Models/Module.cs @@ -0,0 +1,51 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// 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..fd985ed --- /dev/null +++ b/TerraformRegistry.Models/ModuleList.cs @@ -0,0 +1,15 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// 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..39747a7 --- /dev/null +++ b/TerraformRegistry.Models/ModuleListItem.cs @@ -0,0 +1,42 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// 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..ceaa8b8 --- /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; } +} diff --git a/TerraformRegistry.Models/ModuleSearchRequest.cs b/TerraformRegistry.Models/ModuleSearchRequest.cs new file mode 100644 index 0000000..98ce8f9 --- /dev/null +++ b/TerraformRegistry.Models/ModuleSearchRequest.cs @@ -0,0 +1,24 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// 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..355f004 --- /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..e18be2d --- /dev/null +++ b/TerraformRegistry.Models/ModuleSubmodule.cs @@ -0,0 +1,15 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// 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..d8866b9 --- /dev/null +++ b/TerraformRegistry.Models/ModuleVersions.cs @@ -0,0 +1,12 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// Represents a response for module versions +/// +public class ModuleVersions +{ + [JsonPropertyName("versions")] + public required List Versions { get; set; } +} \ No newline at end of file diff --git a/TerraformRegistry.Models/ServiceDiscovery.cs b/TerraformRegistry.Models/ServiceDiscovery.cs new file mode 100644 index 0000000..f99c4de --- /dev/null +++ b/TerraformRegistry.Models/ServiceDiscovery.cs @@ -0,0 +1,16 @@ +namespace TerraformRegistry.Models; + +using System.Text.Json.Serialization; + +/// +/// Represents a service discovery response for Terraform Registry +/// +public class ServiceDiscovery +{ + [JsonPropertyName("modules")] + public Dictionary Modules { get; set; } = new() + { + { "service-discovery", "/.well-known/terraform.json" }, + { "modules", "/v1/modules/" } + }; +} \ 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..125f4c9 --- /dev/null +++ b/TerraformRegistry.Models/TerraformRegistry.Models.csproj @@ -0,0 +1,9 @@ + + + + net9.0 + enable + enable + + + diff --git a/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs new file mode 100644 index 0000000..b8ebe6b --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs @@ -0,0 +1,24 @@ +namespace TerraformRegistry.PostgreSQL.Migrations; + +using Npgsql; + +/// +/// 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..3757183 --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs @@ -0,0 +1,191 @@ +namespace TerraformRegistry.PostgreSQL.Migrations; + +using System.Data; +using System.Reflection; +using System.Text.Json; +using Npgsql; + +/// +/// Manages database migrations +/// +public class MigrationManager +{ + private readonly List _migrations = new List(); + private const string SchemaVersionTable = "schema_version"; + + /// + /// Initializes a new instance of the MigrationManager class + /// + public MigrationManager() + { + // 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(); + + Console.WriteLine($"Applied database migration to version {migration.Version}: {migration.Description}"); + } + catch (Exception ex) + { + Console.WriteLine($"Error applying migration to version {migration.Version}: {ex.Message}"); + 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..b023d3e --- /dev/null +++ b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs @@ -0,0 +1,120 @@ +namespace TerraformRegistry.PostgreSQL.Migrations; + +using Npgsql; + +/// +/// Combined initial database schema migration (v1.2.0) +/// 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.2.0"; // Updated version + + /// + /// Gets a description of what this migration does + /// + public string Description => "Initial schema, metadata column, and download tracking"; // Updated description + + /// + /// Applies the migration to the database + /// + public async Task ApplyAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) + { + // Combined SQL from migrations 1.0.0, 1.1.0, and 1.2.0 + 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 '[]', + CONSTRAINT module_unique_constraint UNIQUE (namespace, name, provider, version) + ); + + -- Create indexes for faster searches (1.0.0) + 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); + + -- Migration 1.1.0: Add metadata column + -- Add a new column for additional metadata + ALTER TABLE modules ADD COLUMN IF NOT EXISTS metadata JSONB NOT NULL DEFAULT '{}'; + + -- Create an index for efficient JSON queries on metadata (1.1.0) + CREATE INDEX IF NOT EXISTS idx_module_metadata ON modules USING GIN (metadata); + + -- Migration 1.2.0: Add module download tracking + -- 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 (1.2.0) + 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 (1.2.0) + 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/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs new file mode 100644 index 0000000..af2acc9 --- /dev/null +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -0,0 +1,422 @@ +namespace TerraformRegistry.PostgreSQL; + +using System.Text.Json; +using Npgsql; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.PostgreSQL.Migrations; + +/// +/// Implementation of database service using PostgreSQL +/// +public class PostgreSQLDatabaseService : IDatabaseService +{ + private readonly string _connectionString; + private readonly string _baseUrl; + private readonly MigrationManager _migrationManager; + + public PostgreSQLDatabaseService(string connectionString, string baseUrl) + { + _connectionString = connectionString; + _baseUrl = baseUrl; + _migrationManager = new MigrationManager(); + + // Initialize the database if needed + InitializeDatabase().GetAwaiter().GetResult(); + } + + /// + /// Initialize the database schema if it doesn't exist or needs upgrading + /// + private async Task InitializeDatabase() + { + await using var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(); + + // Check if we need to initialize the database + if (await _migrationManager.NeedsInitializationAsync(connection)) + { + // Start a transaction to ensure all schema changes are atomic + await using var transaction = await connection.BeginTransactionAsync(); + + try + { + // Apply all necessary migrations + await _migrationManager.InitializeDatabaseAsync(connection, transaction); + + // Commit all changes + await transaction.CommitAsync(); + Console.WriteLine("Database initialization and migrations completed successfully"); + } + catch (Exception ex) + { + // Roll back all changes if any part fails + await transaction.RollbackAsync(); + Console.WriteLine($"Error initializing database: {ex.Message}"); + throw; + } + } + } + + /// + /// 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()) + { + // No matching module found + return null; + } + + // Dependencies are stored as a JSON array in PostgreSQL + var dependenciesJson = reader.GetString(7); + var dependencies = JsonSerializer.Deserialize>(dependenciesJson) ?? new List(); + var versions = reader.GetFieldValue(8); + + // Create and return the module + 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", // Set the root directory name as a string + Submodules = new List(), // No submodules for simplicity + Providers = new Dictionary + { + { provider, "*" } // Adding required Providers property with a default value + } + }; + } + + /// + /// 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 the updated ModuleVersions structure + return new ModuleVersions + { + Versions = versions + }; + } + + /// + /// Gets the storage path information for a specific module version + /// + /// + /// This method retrieves the storage metadata that connects a module's metadata in the database + /// with its physical file location in blob storage. The FilePath property is particularly important + /// as it's used by the blob storage service to locate and retrieve the actual module file. + /// + 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()) + { + // No matching module found + return null; + } + + // Dependencies are stored as a JSON array in PostgreSQL + 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), // Critical field that maps to blob storage + PublishedAt = reader.GetDateTime(6), + Dependencies = dependencies + }; + } + + /// + /// Adds a new module to the database + /// + /// + /// This method stores module metadata in the database, including a reference to the blob storage path + /// where the actual module file is stored. The storage_path column creates the link between database + /// records and physical files in the blob storage. + /// + 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); // Link to blob storage path + command.Parameters.AddWithValue("@publishedAt", module.PublishedAt); + command.Parameters.AddWithValue("@dependencies", JsonSerializer.Serialize(module.Dependencies)); + + // Execute and get the ID of the inserted/updated row + var result = await command.ExecuteScalarAsync(); + + return result != null; + } + catch (Exception ex) + { + Console.WriteLine($"Error adding module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} to database: {ex.Message}"); + return false; + } + } +} \ 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..0e0498f --- /dev/null +++ b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj @@ -0,0 +1,17 @@ + + + + + + + + net9.0 + enable + enable + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs new file mode 100644 index 0000000..fedd1a1 --- /dev/null +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -0,0 +1,185 @@ +namespace TerraformRegistry.Handlers; + +using Models; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Http; +using static Microsoft.AspNetCore.Http.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"); + } + + /// + /// 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 NotFound(); + } + + 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); + return Ok(versions); + } + + /// + /// Downloads a specific module version + /// + public static async Task DownloadModule( + string @namespace, + string name, + string provider, + string version, + IModuleService moduleService) + { + _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 NotFound(); + } + + // Check if the result is a URL (Azure Blob SAS URL) + if (Uri.TryCreate(downloadPath, UriKind.Absolute, out var uriResult) && + (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps)) + { + _logger.LogInformation("Redirecting to blob storage URL for download"); + return Redirect(downloadPath); + } + + // Otherwise, treat it as a local file path + if (!System.IO.File.Exists(downloadPath)) + { + _logger.LogWarning("Module file not found: {FilePath}", downloadPath); + return NotFound("Module file not found"); + } + + return File(downloadPath, "application/zip", Path.GetFileName(downloadPath)); + } + + /// + /// 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 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 BadRequest("No file uploaded"); + } + + try + { + using var stream = moduleFile.OpenReadStream(); + var result = await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description); + + if (!result) + { + return Conflict("Module version already exists"); + } + + // Using location header instead of CreatedAtAction for minimal API + return Created($"/v1/modules/{@namespace}/{name}/{provider}/{version}", null); + } + catch (ArgumentException ex) when (ex.Message.Contains("Version")) + { + _logger.LogWarning("Invalid version format: {Version}", version); + return BadRequest(ex.Message); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error uploading module"); + return Problem("An error occurred while uploading the module", statusCode: 500); + } + } +} \ No newline at end of file diff --git a/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs new file mode 100644 index 0000000..b5c8a45 --- /dev/null +++ b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs @@ -0,0 +1,17 @@ +namespace TerraformRegistry.Handlers; + +using Models; + +/// +/// 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/JsonSerializerContext.cs b/TerraformRegistry/JsonSerializerContext.cs new file mode 100644 index 0000000..d68b8a3 --- /dev/null +++ b/TerraformRegistry/JsonSerializerContext.cs @@ -0,0 +1,22 @@ +namespace TerraformRegistry; + +using System.Text.Json.Serialization; +using Models; + +[JsonSourceGenerationOptions( + WriteIndented = false, + PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] +[JsonSerializable(typeof(ServiceDiscovery))] +[JsonSerializable(typeof(Module))] +[JsonSerializable(typeof(ModuleList))] +[JsonSerializable(typeof(ModuleListItem))] +[JsonSerializable(typeof(ModuleMetadata))] +[JsonSerializable(typeof(ModuleSearchRequest))] +[JsonSerializable(typeof(ModuleStorage))] +[JsonSerializable(typeof(ModuleSubmodule))] +[JsonSerializable(typeof(ModuleVersions))] +[JsonSerializable(typeof(ModuleMetadata))] +public partial class AppJsonSerializerContext : JsonSerializerContext +{ +} diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs new file mode 100644 index 0000000..d8c2f61 --- /dev/null +++ b/TerraformRegistry/Program.cs @@ -0,0 +1,215 @@ +using TerraformRegistry; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Handlers; +using TerraformRegistry.Models; +using TerraformRegistry.Services; +using Microsoft.Extensions.FileProviders; + +var builder = WebApplication.CreateSlimBuilder(args); + +// Add services to the container +// Add configurations - with support for environment variables +builder.Configuration + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true) + .AddEnvironmentVariables("TF_REG_") // Add environment variables with prefix + .AddInMemoryCollection(new List> + { + new("BaseUrl", "http://localhost:5131"), + new("ModuleStoragePath", Path.Combine(Directory.GetCurrentDirectory(), "modules")), + new("DatabaseProvider", "inmemory"), // Add default database provider + new("AuthorizationToken", null) // Add default for authorization token + }); + +// Get the base URL from configuration +var baseUrl = builder.Configuration["BaseUrl"] ?? "http://localhost:5131"; + +// Register database service based on configuration +var databaseProvider = builder.Configuration["DatabaseProvider"]?.ToLower() ?? "inmemory"; + +switch (databaseProvider) +{ + case "postgres": + var postgresConnectionString = builder.Configuration["PostgreSQL:ConnectionString"]; + if (string.IsNullOrEmpty(postgresConnectionString)) + { + throw new Exception("PostgreSQL connection string is not configured"); + } + +#if UsePostgreSQL + builder.Services.AddSingleton(provider => + new TerraformRegistry.PostgreSQL.PostgreSQLDatabaseService(postgresConnectionString, baseUrl)); + Console.WriteLine("Using PostgreSQL database for module metadata"); +#else + throw new Exception("PostgreSQL support is not included in this build. Rebuild with UsePostgreSQL=true"); +#endif + break; + + case "inmemory": + default: + builder.Services.AddSingleton(provider => + new InMemoryDatabaseService(baseUrl)); + Console.WriteLine("Using in-memory database for module metadata"); + break; +} + +// Choose which module service to use based on configuration +var storageProvider = builder.Configuration["StorageProvider"]?.ToLower() ?? "local"; + +switch (storageProvider) +{ + case "azure": +#if UseAzureBlob + builder.Services.AddSingleton(); + Console.WriteLine("Using Azure Blob Storage for module storage"); +#else + throw new Exception("Azure Blob Storage support is not included in this build. Rebuild with UseAzureBlob=true"); +#endif + break; + + case "local": + default: + builder.Services.AddSingleton(); + Console.WriteLine("Using local file system for module storage"); + break; +} + +// Configure JSON serialization with source generation +builder.Services.ConfigureHttpJsonOptions(options => +{ + options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; +}); + +// Add Swagger/OpenAPI support for development +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddOpenApiDocument(options => +{ + options.Title = "Terraform Registry API"; + options.Version = "v1"; + options.Description = "A private Terraform Registry API for modules"; +}); + +var app = builder.Build(); + +// Authorization middleware for API endpoints +var authToken = builder.Configuration["AuthorizationToken"]; +if (!string.IsNullOrEmpty(authToken)) +{ + app.Use(async (context, next) => + { + // Only protect API endpoints (not static files or root) + var path = context.Request.Path.Value ?? string.Empty; + if (path.StartsWith("/v1/") || path.StartsWith("/.well-known/")) + { + var header = context.Request.Headers["Authorization"].FirstOrDefault(); + if (string.IsNullOrEmpty(header) || !header.Equals($"Bearer {authToken}", StringComparison.Ordinal)) + { + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); + return; + } + } + await next(); + }); +} + +// Configure static files middleware for serving SPA +var webFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "web"); +if (Directory.Exists(webFolderPath)) +{ + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(webFolderPath), + RequestPath = "" + }); +} + +// Configure the HTTP request pipeline +if (app.Environment.IsDevelopment()) +{ + app.UseOpenApi(); + app.UseSwaggerUi(); + + // No longer redirecting to Swagger docs from root +} + +// In all environments, serve the SPA's index.html for the root route if it exists +app.MapGet("/", async (HttpContext 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; + } +}); + +app.UseHttpsRedirection(); + +// Define routes directly with minimal API patterns +// Service discovery endpoint +app.MapGet("/.well-known/terraform.json", ServiceDiscoveryHandlers.GetServiceDiscovery) + .WithTags("Service Discovery") + .WithDescription("Terraform service discovery endpoint") + .Produces(); + +// Module endpoints +app.MapGet("/v1/modules", (IModuleService moduleService, string? q, string? @namespace, string? provider, int offset, int limit) => + 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) => + ModuleHandlers.DownloadModule(@namespace, name, provider, version, moduleService)) + .WithTags("Modules") + .WithDescription("Downloads a specific module version") + .Produces(200, contentType: "application/zip") + .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); + +// Add a fallback route for the SPA to handle client-side routing +app.MapFallback(async (HttpContext context) => +{ + // Check if the request is for an API route - if so, let it 404 normally + if (context.Request.Path.StartsWithSegments("/v1") || + context.Request.Path.StartsWithSegments("/.well-known") || + context.Request.Path.StartsWithSegments("/swagger")) + { + return; + } + + var indexPath = Path.Combine(webFolderPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + } +}); + +app.Run(); \ 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/InMemoryDatabaseService.cs b/TerraformRegistry/Services/InMemoryDatabaseService.cs new file mode 100644 index 0000000..4aac444 --- /dev/null +++ b/TerraformRegistry/Services/InMemoryDatabaseService.cs @@ -0,0 +1,172 @@ +namespace TerraformRegistry.Services; + +using System.Collections.Concurrent; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; + +/// +/// Implementation of database service with in-memory storage +/// +public class InMemoryDatabaseService : IDatabaseService +{ + private readonly ConcurrentDictionary _modules = new(); + private readonly string _baseUrl; + + public InMemoryDatabaseService(string baseUrl) + { + _baseUrl = baseUrl; + } + + /// + /// Lists all modules based on search criteria + /// + public Task ListModulesAsync(ModuleSearchRequest request) + { + var filteredModules = _modules.Values.AsEnumerable(); + + if (!string.IsNullOrWhiteSpace(request.Q)) + { + filteredModules = filteredModules.Where(m => + m.Name.Contains(request.Q, StringComparison.OrdinalIgnoreCase) || + m.Description.Contains(request.Q, StringComparison.OrdinalIgnoreCase)); + } + + if (!string.IsNullOrWhiteSpace(request.Namespace)) + { + filteredModules = filteredModules.Where(m => m.Namespace == request.Namespace); + } + + if (!string.IsNullOrWhiteSpace(request.Provider)) + { + filteredModules = filteredModules.Where(m => m.Provider == request.Provider); + } + + // Group by namespace, name, provider to get unique modules + var modules = filteredModules + .GroupBy(m => new { m.Namespace, m.Name, m.Provider }) + .Select(g => g.OrderByDescending(m => m.Version).First()) // Take latest version + .Skip(request.Offset) + .Take(request.Limit) + .ToList(); + + var result = new ModuleList + { + Modules = modules.Select(m => new ModuleListItem + { + Id = $"{m.Namespace}/{m.Name}/{m.Provider}", + Owner = m.Namespace, + Namespace = m.Namespace, + Name = m.Name, + Version = m.Version, + Provider = m.Provider, + Description = m.Description, + PublishedAt = m.PublishedAt.ToString("o"), + Versions = _modules.Values + .Where(v => v.Namespace == m.Namespace && v.Name == m.Name && v.Provider == m.Provider) + .Select(v => v.Version) + .OrderByDescending(v => v) + .ToList(), + DownloadUrl = $"{_baseUrl}/v1/modules/{m.Namespace}/{m.Name}/{m.Provider}/{m.Version}/download" + }).ToList(), + Meta = new Dictionary + { + { "limit", request.Limit.ToString() }, + { "current_offset", request.Offset.ToString() } + } + }; + + return Task.FromResult(result); + } + + /// + /// Gets detailed information about a specific module + /// + public Task GetModuleAsync(string @namespace, string name, string provider, string version) + { + var key = GetModuleKey(@namespace, name, provider, version); + if (!_modules.TryGetValue(key, out var storage)) + { + return Task.FromResult(null); + } + + var versions = _modules.Values + .Where(m => m.Namespace == @namespace && m.Name == name && m.Provider == provider) + .Select(m => m.Version) + .OrderByDescending(v => v) + .ToList(); + + var module = new Module + { + Id = $"{@namespace}/{name}/{provider}/{version}", + Owner = @namespace, + Namespace = @namespace, + Name = name, + Version = version, + Provider = provider, + Description = storage.Description, + PublishedAt = storage.PublishedAt.ToString("o"), + Versions = versions, + Root = "root", + Submodules = new List(), // Assuming no submodules for simplicity + Providers = new Dictionary + { + { provider, ">=0.12" } // Simplified provider constraints + }, + DownloadUrl = $"{_baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download" + }; + + return Task.FromResult(module); + } + + /// + /// Gets all versions of a specific module + /// + public Task GetModuleVersionsAsync(string @namespace, string name, string provider) + { + var versions = _modules.Values + .Where(m => m.Namespace == @namespace && m.Name == name && m.Provider == provider) + .Select(m => m.Version) + .OrderByDescending(v => v) + .ToList(); + + return Task.FromResult(new ModuleVersions { Versions = versions }); + } + + /// + /// Gets the storage path information for a specific module version + /// + public Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) + { + var key = GetModuleKey(@namespace, name, provider, version); + if (!_modules.TryGetValue(key, out var storage)) + { + return Task.FromResult(null); + } + + return Task.FromResult(storage); + } + + /// + /// Adds a new module to the database + /// + public Task AddModuleAsync(ModuleStorage module) + { + var key = GetModuleKey(module.Namespace, module.Name, module.Provider, module.Version); + + // Check if module already exists + if (_modules.ContainsKey(key)) + { + return Task.FromResult(false); + } + + return Task.FromResult(_modules.TryAdd(key, module)); + } + + /// + /// Generates a unique key for a module version + /// + private static string GetModuleKey(string @namespace, string name, string provider, string version) + { + return $"{@namespace}/{name}/{provider}/{version}".ToLowerInvariant(); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs new file mode 100644 index 0000000..7ba11fd --- /dev/null +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -0,0 +1,228 @@ +namespace TerraformRegistry.Services; + +using TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; +using System.IO.Compression; +using System.Text.Json; +using Microsoft.Extensions.Configuration; + +/// +/// Implementation of module service with local file system storage +/// +public class LocalModuleService : ModuleService +{ + private readonly IDatabaseService _databaseService; + private readonly string _moduleStoragePath; + + public LocalModuleService(IConfiguration configuration, IDatabaseService databaseService) + { + _databaseService = databaseService; + + // 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 + Console.WriteLine($"Using local module storage 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 + Console.WriteLine($"Error loading module from {zipFile}: {ex.Message}"); + } + } + } + + Console.WriteLine($"Loaded modules from disk."); + } + catch (Exception ex) + { + // Log any errors during initialization + Console.WriteLine($"Error scanning module directory: {ex.Message}"); + } + } + + /// + /// 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) + { + Console.WriteLine($"Invalid module filename format: {fileName}"); + return; + } + + // 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)) + { + Console.WriteLine($"Skipping module {fileName}: Version '{version}' is not a valid Semantic Version (SemVer 2.0.0)"); + return; + } + + // Try to extract description from the zip file + string 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, AppJsonSerializerContext.Default.ModuleMetadata); + + if (metadata != null && !string.IsNullOrEmpty(metadata.Description)) + { + description = metadata.Description; + } + } + } + } + catch + { + // If we can't extract 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 = new List() // Simplified, no dependencies + }; + + // Add to database + _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); + return moduleStorage?.FilePath; + } + + /// + /// 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) + { + // Create namespace directory + var namespaceDir = Path.Combine(_moduleStoragePath, @namespace); + if (!Directory.Exists(namespaceDir)) + { + Directory.CreateDirectory(namespaceDir); + } + + // Save the module zip file + var fileName = $"{name}-{provider}-{version}.zip"; + var filePath = Path.Combine(namespaceDir, fileName); + + using (var fileStream = File.Create(filePath)) + { + await moduleContent.CopyToAsync(fileStream); + } + + var module = new ModuleStorage + { + Namespace = @namespace, + Name = name, + Provider = provider, + Version = version, + Description = description, + FilePath = filePath, + PublishedAt = DateTime.UtcNow, // Use current time for newly uploaded modules + Dependencies = new List() // Simplified, no dependencies + }; + + return await _databaseService.AddModuleAsync(module); + } +} \ No newline at end of file diff --git a/TerraformRegistry/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj new file mode 100644 index 0000000..6aea3bf --- /dev/null +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -0,0 +1,40 @@ + + + + net9.0 + enable + enable + true + Speed + true + true + Debug;Release + + true + true + Speed + true + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TerraformRegistry/appsettings.Development.json b/TerraformRegistry/appsettings.Development.json new file mode 100644 index 0000000..feac267 --- /dev/null +++ b/TerraformRegistry/appsettings.Development.json @@ -0,0 +1,31 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "BaseUrl": "http://localhost:5131", + "ModuleStoragePath": "modules", + "StorageProvider": "local", + "DatabaseProvider": "inmemory", + "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 (inmemory or postgres)", + "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..17b104f --- /dev/null +++ b/TerraformRegistry/appsettings.json @@ -0,0 +1,32 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "BaseUrl": "http://localhost:5131", + "ModuleStoragePath": "modules", + "StorageProvider": "azure", + "DatabaseProvider": "inmemory", + "AzureStorage": { + "ConnectionString": "", + "ContainerName": "modules", + "SasTokenExpiryMinutes": 5 + }, + "PostgreSQL": { + "ConnectionString": "Host=localhost;Database=terraform_registry;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 (inmemory or postgres)", + "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" + } +} diff --git a/TerraformRegistry/web/index.html b/TerraformRegistry/web/index.html new file mode 100644 index 0000000..43a6d5d --- /dev/null +++ b/TerraformRegistry/web/index.html @@ -0,0 +1,17 @@ +^^^^Terraform +Registry +SPA^^^^Welcome +to +the +Terraform +Registry +SPA^^This +is +a +placeholder +for +your +single +page +application.^^^ 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/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..79de9ec --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,53 @@ +--- + +# Development-specific overrides +services: + # app: + # build: + # context: . + # dockerfile: Dockerfile.dev # Using a development-specific Dockerfile + # container_name: terraform-registry-app-dev + # ports: + # - "5131:80" + # - "5132:443" # Exposing HTTPS port for development + # volumes: + # - ./TerraformRegistry:/app/TerraformRegistry # Mount source code for hot reload + # - 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 + + postgres: + image: postgres:17 + ports: + - "5433:5432" + volumes: + - postgres_data_dev:/var/lib/postgresql/data + environment: + POSTGRES_USER: terraform_reg_user + POSTGRES_PASSWORD: terraform_reg_password + POSTGRES_DB: terraform_registry_dev + + # Adding a database admin tool for development + pgadmin: + image: dpage/pgadmin4 + 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: \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..12142d8 --- /dev/null +++ b/docker-compose.prod.yml @@ -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/terraform-registry.sln b/terraform-registry.sln new file mode 100644 index 0000000..cc159ef --- /dev/null +++ b/terraform-registry.sln @@ -0,0 +1,24 @@ +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 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + 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}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA326FFE-5464-E266-1CE7-A2CE82632658}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DB8A1D43-CCD7-4FFA-81F4-28A79B221890} + EndGlobalSection +EndGlobal From 22d5cd6cf8c8168a3c503eaa78dccec626af7038 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 24 Apr 2025 12:01:28 +0100 Subject: [PATCH 02/29] Add the native AOT dependencies --- Dockerfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ca29cc0..0166682 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,21 @@ FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src +# Install native AOT dependencies +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + clang \ + lld \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + # Define build arguments with defaults ARG USE_POSTGRESQL=false ARG USE_AZURE_BLOB=false COPY ["TerraformRegistry/TerraformRegistry.csproj", "TerraformRegistry/"] RUN dotnet restore "TerraformRegistry/TerraformRegistry.csproj" /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} -COPY . . +COPY . . WORKDIR "/src/TerraformRegistry" RUN dotnet build "TerraformRegistry.csproj" -c Release -o /app/build /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} From 782ba624ba266d1980bd6cef6637e46617acab4a Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 24 Apr 2025 13:05:33 +0100 Subject: [PATCH 03/29] Disable AOT + Dockerfile cleanup --- Dockerfile | 41 ++++++++++++---------- TerraformRegistry/TerraformRegistry.csproj | 11 +++--- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0166682..8d76ceb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,31 @@ -FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build -WORKDIR /src - -# Install native AOT dependencies -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - clang \ - lld \ - build-essential \ - && rm -rf /var/lib/apt/lists/* +FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build +WORKDIR /app # Define build arguments with defaults -ARG USE_POSTGRESQL=false -ARG USE_AZURE_BLOB=false +ARG USE_POSTGRESQL=true +ARG USE_AZURE_BLOB=true + +# 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/ + +# Restore using the solution file +RUN dotnet restore terraform-registry.sln /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} + +# Copy the rest of the source code +COPY . . -COPY ["TerraformRegistry/TerraformRegistry.csproj", "TerraformRegistry/"] -RUN dotnet restore "TerraformRegistry/TerraformRegistry.csproj" /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} -COPY . . -WORKDIR "/src/TerraformRegistry" -RUN dotnet build "TerraformRegistry.csproj" -c Release -o /app/build /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +WORKDIR /app/TerraformRegistry +RUN dotnet build TerraformRegistry.csproj -c Release -o /app/build /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} FROM build AS publish -RUN dotnet publish "TerraformRegistry.csproj" -c Release -o /app/publish /p:UseAppHost=false /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +RUN dotnet publish TerraformRegistry.csproj -c Release -o /app/publish /p:UseAppHost=false /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} -FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final +FROM mcr.microsoft.com/dotnet/aspnet:9.0-alpine AS final WORKDIR /app COPY --from=publish /app/publish . # Create modules directory diff --git a/TerraformRegistry/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj index 6aea3bf..8316586 100644 --- a/TerraformRegistry/TerraformRegistry.csproj +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -4,16 +4,17 @@ net9.0 enable enable - true - Speed - true - true + + + Debug;Release + From b1d1ffe2db7962fe0b29334aca899d4a41c72976 Mon Sep 17 00:00:00 2001 From: matty Date: Wed, 30 Apr 2025 10:28:44 +0100 Subject: [PATCH 04/29] Refactor services and improve logging. Updated services to use dependency injection for cleaner initialization and improved configuration error handling. Replaced `Console` calls with structured logging via `ILogger` to enhance observability. Added new integration tests for well-known endpoints and upgraded dependencies such as Npgsql to v9.0.3. --- .../AzureBlobModuleService.cs | 27 +-- .../TerraformRegistry.AzureBlob.csproj | 5 +- .../Migrations/MigrationManager.cs | 9 +- .../PostgreSQLDatabaseService.cs | 39 ++-- .../TerraformRegistry.PostgreSQL.csproj | 2 +- .../WellKnownEndpointTests.cs | 47 +++++ TerraformRegistry/Program.cs | 191 ++++++++++-------- .../Services/LocalModuleService.cs | 17 +- TerraformRegistry/TerraformRegistry.csproj | 18 +- docker-compose.dev.yml | 2 +- terraform-registry.sln | 83 ++++++++ 11 files changed, 305 insertions(+), 135 deletions(-) create mode 100644 TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs diff --git a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs index cb84b67..a5c707b 100644 --- a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -8,6 +8,7 @@ namespace TerraformRegistry.AzureBlob; using Azure.Storage.Blobs.Specialized; using Azure.Storage.Sas; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using TerraformRegistry.API; using TerraformRegistry.API.Interfaces; using TerraformRegistry.API.Utilities; @@ -23,10 +24,12 @@ public class AzureBlobModuleService : ModuleService private readonly BlobContainerClient _containerClient; private readonly string _containerName; private readonly int _sasTokenExpiryMinutes; + private readonly ILogger _logger; - public AzureBlobModuleService(IConfiguration configuration, IDatabaseService databaseService) + public AzureBlobModuleService(IConfiguration configuration, IDatabaseService databaseService, ILogger logger) { _databaseService = databaseService; + _logger = logger; // Get Azure Storage connection settings from configuration var connectionString = configuration["AzureStorage:ConnectionString"] @@ -80,7 +83,7 @@ public override Task GetModuleVersionsAsync(string @namespace, s if (moduleStorage == null) { // Module not found in database - Console.WriteLine($"Module {@namespace}/{name}/{provider}/{version} not found in database"); + _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} not found in database"); return null; } @@ -94,7 +97,7 @@ public override Task GetModuleVersionsAsync(string @namespace, s if (!await blobClient.ExistsAsync()) { // This indicates data inconsistency - database record exists but no blob - Console.WriteLine($"Module {@namespace}/{name}/{provider}/{version} exists in database but blob not found at {blobPath}"); + _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} exists in database but blob not found at {blobPath}"); return null; } @@ -117,7 +120,7 @@ public override Task GetModuleVersionsAsync(string @namespace, s catch (Exception ex) { // Log any errors during SAS token generation - Console.WriteLine($"Error generating SAS token for module {@namespace}/{name}/{provider}/{version}: {ex.Message}"); + _logger.LogError(ex, $"Error generating SAS token for module {@namespace}/{name}/{provider}/{version}"); return null; } } @@ -142,7 +145,7 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str // Check if blob already exists to avoid duplication if (await blobClient.ExistsAsync()) { - Console.WriteLine($"Module {@namespace}/{name}/{provider}/{version} already exists in blob storage"); + _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} already exists in blob storage"); return false; } @@ -183,7 +186,7 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str { // Clean up the blob if database insertion fails to maintain consistency await blobClient.DeleteAsync(); - Console.WriteLine($"Failed to add module {@namespace}/{name}/{provider}/{version} to database, cleaned up blob storage"); + _logger.LogError($"Failed to add module {@namespace}/{name}/{provider}/{version} to database, cleaned up blob storage"); } return result; @@ -191,7 +194,7 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str catch (Exception ex) { // Log any errors during upload - Console.WriteLine($"Error uploading module {@namespace}/{name}/{provider}/{version}: {ex.Message}"); + _logger.LogError(ex, $"Error uploading module {@namespace}/{name}/{provider}/{version}"); // Try to clean up the blob if an error occurred try @@ -223,7 +226,7 @@ private async void LoadExistingModules() { try { - Console.WriteLine("Starting synchronization between Azure Blob Storage and PostgreSQL database..."); + _logger.LogInformation("Starting synchronization between Azure Blob Storage and PostgreSQL database..."); int syncCount = 0; // List all blobs in the container @@ -314,7 +317,7 @@ private async void LoadExistingModules() if (result) { syncCount++; - Console.WriteLine($"Synchronized module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} from blob storage to database"); + _logger.LogInformation($"Synchronized module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} from blob storage to database"); } } } @@ -322,16 +325,16 @@ private async void LoadExistingModules() catch (Exception ex) { // Log the error but continue processing other blobs - Console.WriteLine($"Error processing blob {blobItem.Name}: {ex.Message}"); + _logger.LogError(ex, $"Error processing blob {blobItem.Name}"); } } - Console.WriteLine($"Synchronization complete. Added {syncCount} modules from Azure Blob Storage to the database."); + _logger.LogInformation($"Synchronization complete. Added {syncCount} modules from Azure Blob Storage to the database."); } catch (Exception ex) { // Log any errors during initialization - Console.WriteLine($"Error during blob storage/database synchronization: {ex.Message}"); + _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 index e2cf302..f514a62 100644 --- a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -11,8 +11,9 @@ - - + + + \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs index 3757183..4470686 100644 --- a/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs +++ b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs @@ -3,6 +3,7 @@ namespace TerraformRegistry.PostgreSQL.Migrations; using System.Data; using System.Reflection; using System.Text.Json; +using Microsoft.Extensions.Logging; using Npgsql; /// @@ -12,12 +13,14 @@ public class MigrationManager { private readonly List _migrations = new List(); private const string SchemaVersionTable = "schema_version"; + private readonly ILogger _logger; /// /// Initializes a new instance of the MigrationManager class /// - public MigrationManager() + public MigrationManager(ILogger logger) { + _logger = logger; // Discover all migration implementations in the assembly DiscoverMigrations(); } @@ -180,11 +183,11 @@ private async Task ApplyMigrationAsync(NpgsqlConnection connection, NpgsqlTransa versionCommand.Parameters.AddWithValue("@description", migration.Description); await versionCommand.ExecuteNonQueryAsync(); - Console.WriteLine($"Applied database migration to version {migration.Version}: {migration.Description}"); + _logger.LogInformation("Applied database migration to version {Version}: {Description}", migration.Version, migration.Description); } catch (Exception ex) { - Console.WriteLine($"Error applying migration to version {migration.Version}: {ex.Message}"); + _logger.LogError(ex, "Error applying migration to version {Version}", migration.Version); throw; } } diff --git a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs index af2acc9..8ed9322 100644 --- a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -1,58 +1,53 @@ -namespace TerraformRegistry.PostgreSQL; - using System.Text.Json; +using Microsoft.Extensions.Logging; using Npgsql; using TerraformRegistry.API.Interfaces; using TerraformRegistry.Models; using TerraformRegistry.PostgreSQL.Migrations; +namespace TerraformRegistry.PostgreSQL; + /// -/// Implementation of database service using PostgreSQL +/// Implementation of a database service using PostgreSQL /// -public class PostgreSQLDatabaseService : IDatabaseService +public class PostgreSqlDatabaseService : IDatabaseService, IInitializableDb { private readonly string _connectionString; private readonly string _baseUrl; private readonly MigrationManager _migrationManager; + private readonly ILogger _logger; - public PostgreSQLDatabaseService(string connectionString, string baseUrl) + public PostgreSqlDatabaseService(string connectionString, string baseUrl, ILogger logger, MigrationManager migrationManager) { _connectionString = connectionString; _baseUrl = baseUrl; - _migrationManager = new MigrationManager(); + _migrationManager = migrationManager; + _logger = logger; + } - // Initialize the database if needed - InitializeDatabase().GetAwaiter().GetResult(); + public async Task InitializeDatabase() + { + await InitializeDatabaseImpl(); } - /// - /// Initialize the database schema if it doesn't exist or needs upgrading - /// - private async Task InitializeDatabase() + private async Task InitializeDatabaseImpl() { await using var connection = new NpgsqlConnection(_connectionString); await connection.OpenAsync(); - // Check if we need to initialize the database if (await _migrationManager.NeedsInitializationAsync(connection)) { - // Start a transaction to ensure all schema changes are atomic await using var transaction = await connection.BeginTransactionAsync(); - try { - // Apply all necessary migrations await _migrationManager.InitializeDatabaseAsync(connection, transaction); - - // Commit all changes await transaction.CommitAsync(); - Console.WriteLine("Database initialization and migrations completed successfully"); + _logger.LogInformation("Database initialization and migrations completed successfully"); } catch (Exception ex) { - // Roll back all changes if any part fails await transaction.RollbackAsync(); - Console.WriteLine($"Error initializing database: {ex.Message}"); + _logger.LogError(ex, "Error initializing database"); throw; } } @@ -415,7 +410,7 @@ DO UPDATE SET } catch (Exception ex) { - Console.WriteLine($"Error adding module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} to database: {ex.Message}"); + _logger.LogError(ex, "Error adding module {Namespace}/{Name}/{Provider}/{Version} to database", module.Namespace, module.Name, module.Provider, module.Version); return false; } } diff --git a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj index 0e0498f..f4d8243 100644 --- a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj +++ b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj @@ -11,7 +11,7 @@ - + \ 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..2295dc2 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs @@ -0,0 +1,47 @@ +using System.Net; +using System.Text.Json; +using TerraformRegistry.Tests.IntegrationTests; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class WellKnownEndpointTests : IntegrationTestBase +{ + public WellKnownEndpointTests(ITestOutputHelper output) : base(output) + { + } + + [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 = new + { + service_discovery = "/.well-known/terraform.json", + modules = "/v1/modules/" + } + }; + + using var jsonDoc = JsonDocument.Parse(content); + var actualJson = new + { + modules = new + { + service_discovery = jsonDoc.RootElement.GetProperty("modules").GetProperty("service-discovery").GetString(), + modules = jsonDoc.RootElement.GetProperty("modules").GetProperty("modules").GetString() + } + }; + + Assert.Equal(expectedJson.modules.service_discovery, actualJson.modules.service_discovery); + Assert.Equal(expectedJson.modules.modules, actualJson.modules.modules); + } +} \ No newline at end of file diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index d8c2f61..e1d2d01 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -7,113 +7,142 @@ var builder = WebApplication.CreateSlimBuilder(args); -// Add services to the container -// Add configurations - with support for environment variables builder.Configuration .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true) - .AddEnvironmentVariables("TF_REG_") // Add environment variables with prefix - .AddInMemoryCollection(new List> - { - new("BaseUrl", "http://localhost:5131"), - new("ModuleStoragePath", Path.Combine(Directory.GetCurrentDirectory(), "modules")), - new("DatabaseProvider", "inmemory"), // Add default database provider - new("AuthorizationToken", null) // Add default for authorization token - }); - -// Get the base URL from configuration -var baseUrl = builder.Configuration["BaseUrl"] ?? "http://localhost:5131"; - -// Register database service based on configuration + .AddEnvironmentVariables("TF_REG_"); + var databaseProvider = builder.Configuration["DatabaseProvider"]?.ToLower() ?? "inmemory"; switch (databaseProvider) { case "postgres": - var postgresConnectionString = builder.Configuration["PostgreSQL:ConnectionString"]; - if (string.IsNullOrEmpty(postgresConnectionString)) - { - throw new Exception("PostgreSQL connection string is not configured"); - } - -#if UsePostgreSQL + builder.Services.AddSingleton(); builder.Services.AddSingleton(provider => - new TerraformRegistry.PostgreSQL.PostgreSQLDatabaseService(postgresConnectionString, baseUrl)); - Console.WriteLine("Using PostgreSQL database for module metadata"); -#else - throw new Exception("PostgreSQL support is not included in this build. Rebuild with UsePostgreSQL=true"); -#endif + { + var config = provider.GetRequiredService(); + var loggerDb = provider.GetRequiredService>(); + var migrationManager = provider.GetRequiredService(); + var connectionString = config["PostgreSQL:ConnectionString"]; + if (string.IsNullOrEmpty(connectionString)) + { + throw new InvalidOperationException("PostgreSQL connection string is missing or empty. Please check your configuration."); + } + var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; + if (string.IsNullOrEmpty(baseUrl)) + { + throw new InvalidOperationException("BaseUrl is missing or empty. Please check your configuration."); + } + return new TerraformRegistry.PostgreSQL.PostgreSqlDatabaseService(connectionString, baseUrl, loggerDb, migrationManager); + }); + builder.Services.AddSingleton(provider => (IInitializableDb)provider.GetRequiredService()); break; case "inmemory": - default: builder.Services.AddSingleton(provider => - new InMemoryDatabaseService(baseUrl)); - Console.WriteLine("Using in-memory database for module metadata"); + { + var config = provider.GetRequiredService(); + var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; + if (string.IsNullOrEmpty(baseUrl)) + { + throw new InvalidOperationException("BaseUrl is missing or empty. Please check your configuration."); + } + return new InMemoryDatabaseService(baseUrl); + }); break; + + default: + throw new Exception($"Invalid database provider specified: '{databaseProvider}'. Check configuration."); } -// Choose which module service to use based on configuration var storageProvider = builder.Configuration["StorageProvider"]?.ToLower() ?? "local"; switch (storageProvider) { case "azure": -#if UseAzureBlob builder.Services.AddSingleton(); - Console.WriteLine("Using Azure Blob Storage for module storage"); -#else - throw new Exception("Azure Blob Storage support is not included in this build. Rebuild with UseAzureBlob=true"); -#endif break; case "local": - default: - builder.Services.AddSingleton(); - Console.WriteLine("Using local file system for module storage"); + builder.Services.AddSingleton(provider => + { + var config = provider.GetRequiredService(); + var db = provider.GetRequiredService(); + var logger = provider.GetRequiredService>(); + 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); + }); break; + + default: + throw new Exception($"Invalid storage provider specified: '{storageProvider}'. Check configuration."); } -// Configure JSON serialization with source generation +// Register the database initializer hosted service +builder.Services.AddHostedService(); + builder.Services.ConfigureHttpJsonOptions(options => { options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; }); -// Add Swagger/OpenAPI support for development -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddOpenApiDocument(options => +bool enableSwagger = false; +var enableSwaggerConfig = builder.Configuration["EnableSwagger"]; +if (!string.IsNullOrEmpty(enableSwaggerConfig) && bool.TryParse(enableSwaggerConfig, out var parsed)) { - options.Title = "Terraform Registry API"; - options.Version = "v1"; - options.Description = "A private Terraform Registry API for modules"; -}); - -var app = builder.Build(); + enableSwagger = parsed; +} +else if (builder.Environment.IsDevelopment()) +{ + enableSwagger = true; +} -// Authorization middleware for API endpoints -var authToken = builder.Configuration["AuthorizationToken"]; -if (!string.IsNullOrEmpty(authToken)) +if (enableSwagger) { - app.Use(async (context, next) => + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddOpenApiDocument(options => { - // Only protect API endpoints (not static files or root) - var path = context.Request.Path.Value ?? string.Empty; - if (path.StartsWith("/v1/") || path.StartsWith("/.well-known/")) + 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 NSwag.OpenApiSecurityScheme { - var header = context.Request.Headers["Authorization"].FirstOrDefault(); - if (string.IsNullOrEmpty(header) || !header.Equals($"Bearer {authToken}", StringComparison.Ordinal)) - { - context.Response.StatusCode = StatusCodes.Status401Unauthorized; - await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); - return; - } - } - await next(); + Type = NSwag.OpenApiSecuritySchemeType.Http, + Scheme = "bearer", + BearerFormat = "JWT", + Name = "Authorization", + In = NSwag.OpenApiSecurityApiKeyLocation.Header, + Description = "Enter your Bearer token in the format: Bearer {token}" + }); + options.OperationProcessors.Add(new NSwag.Generation.Processors.Security.AspNetCoreOperationSecurityScopeProcessor("Bearer")); }); } -// Configure static files middleware for serving SPA +var app = builder.Build(); + +var logger = app.Services.GetRequiredService>(); +logger.LogInformation("Using {DatabaseProvider} database for module metadata", databaseProvider); +logger.LogInformation("Using {StorageProvider} storage for module storage", storageProvider); + +var authToken = app.Configuration["AuthorizationToken"]; + +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."); +} + +if (!string.IsNullOrEmpty(authToken)) +{ + // Use the new AuthenticationMiddleware + app.UseMiddleware(authToken); +} + var webFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "web"); if (Directory.Exists(webFolderPath)) { @@ -124,16 +153,12 @@ }); } -// Configure the HTTP request pipeline -if (app.Environment.IsDevelopment()) +if (enableSwagger) { app.UseOpenApi(); app.UseSwaggerUi(); - - // No longer redirecting to Swagger docs from root } -// In all environments, serve the SPA's index.html for the root route if it exists app.MapGet("/", async (HttpContext context) => { var indexPath = Path.Combine(webFolderPath, "index.html"); @@ -150,39 +175,40 @@ app.UseHttpsRedirection(); -// Define routes directly with minimal API patterns -// Service discovery endpoint app.MapGet("/.well-known/terraform.json", ServiceDiscoveryHandlers.GetServiceDiscovery) .WithTags("Service Discovery") .WithDescription("Terraform service discovery endpoint") .Produces(); -// Module endpoints app.MapGet("/v1/modules", (IModuleService moduleService, string? q, string? @namespace, string? provider, int offset, int limit) => ModuleHandlers.ListModules(moduleService, q, @namespace, provider, offset, limit)) .WithTags("Modules") .WithDescription("Lists or searches modules") - .Produces(); + .Produces() + .RequireAuthorization(); 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); + .ProducesProblem(404) + .RequireAuthorization(); 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(); + .Produces() + .RequireAuthorization(); app.MapGet("/v1/modules/{namespace}/{name}/{provider}/{version}/download", (string @namespace, string name, string provider, string version, IModuleService moduleService) => ModuleHandlers.DownloadModule(@namespace, name, provider, version, moduleService)) .WithTags("Modules") .WithDescription("Downloads a specific module version") .Produces(200, contentType: "application/zip") - .ProducesProblem(404); + .ProducesProblem(404) + .RequireAuthorization(); 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)) @@ -191,12 +217,11 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, .Accepts("multipart/form-data") .ProducesProblem(400) .ProducesProblem(409) - .Produces(201); + .Produces(201) + .RequireAuthorization(); -// Add a fallback route for the SPA to handle client-side routing app.MapFallback(async (HttpContext context) => { - // Check if the request is for an API route - if so, let it 404 normally if (context.Request.Path.StartsWithSegments("/v1") || context.Request.Path.StartsWithSegments("/.well-known") || context.Request.Path.StartsWithSegments("/swagger")) @@ -212,4 +237,6 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, } }); -app.Run(); \ No newline at end of file +app.Run(); + +public partial class Program; \ No newline at end of file diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs index 7ba11fd..5e6ca58 100644 --- a/TerraformRegistry/Services/LocalModuleService.cs +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -7,6 +7,7 @@ namespace TerraformRegistry.Services; using System.IO.Compression; using System.Text.Json; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; /// /// Implementation of module service with local file system storage @@ -15,16 +16,18 @@ public class LocalModuleService : ModuleService { private readonly IDatabaseService _databaseService; private readonly string _moduleStoragePath; + private readonly ILogger _logger; - public LocalModuleService(IConfiguration configuration, IDatabaseService databaseService) + 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 - Console.WriteLine($"Using local module storage path: {_moduleStoragePath}"); + _logger.LogInformation("Using local module storage path: {Path}", _moduleStoragePath); // Ensure module storage directory exists if (!Directory.Exists(_moduleStoragePath)) @@ -64,17 +67,17 @@ private void LoadExistingModules() catch (Exception ex) { // Log the error but continue processing other files - Console.WriteLine($"Error loading module from {zipFile}: {ex.Message}"); + _logger.LogError(ex, "Error loading module from {ZipFile}", zipFile); } } } - Console.WriteLine($"Loaded modules from disk."); + _logger.LogInformation("Loaded modules from disk."); } catch (Exception ex) { // Log any errors during initialization - Console.WriteLine($"Error scanning module directory: {ex.Message}"); + _logger.LogError(ex, "Error scanning module directory"); } } @@ -90,7 +93,7 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) if (parts.Length < 3) { - Console.WriteLine($"Invalid module filename format: {fileName}"); + _logger.LogWarning("Invalid module filename format: {FileName}", fileName); return; } @@ -104,7 +107,7 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) // Validate the version string against SemVer 2.0.0 specification if (!SemVerValidator.IsValid(version)) { - Console.WriteLine($"Skipping module {fileName}: Version '{version}' is not a valid Semantic Version (SemVer 2.0.0)"); + _logger.LogWarning("Skipping module {FileName}: Version '{Version}' is not a valid Semantic Version (SemVer 2.0.0)", fileName, version); return; } diff --git a/TerraformRegistry/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj index 8316586..e83a445 100644 --- a/TerraformRegistry/TerraformRegistry.csproj +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -17,18 +17,26 @@ true --> + + + + + + + + - + - - + + + + diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 79de9ec..38c9cec 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -24,7 +24,7 @@ services: postgres: image: postgres:17 ports: - - "5433:5432" + - "5432:5432" volumes: - postgres_data_dev:/var/lib/postgresql/data environment: diff --git a/terraform-registry.sln b/terraform-registry.sln index cc159ef..6c98992 100644 --- a/terraform-registry.sln +++ b/terraform-registry.sln @@ -1,19 +1,102 @@ + 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 From 31c1c8367cb3501867e0ddd462fbb787d0af112a Mon Sep 17 00:00:00 2001 From: matty Date: Wed, 30 Apr 2025 10:30:26 +0100 Subject: [PATCH 05/29] Add TerraformRegistry.Tests project to Docker build context --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 8d76ceb..50ec156 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,7 @@ 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 /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} From 1de2da6ce07e41729af7ef4800047ac87281a8d8 Mon Sep 17 00:00:00 2001 From: matty Date: Wed, 30 Apr 2025 10:37:39 +0100 Subject: [PATCH 06/29] Add middleware, services, tests, and Docker setup for Terraform Registry --- .../Interfaces/IInitializableDb.cs | 9 + .../IntegrationTests/IntegrationTestBase.cs | 221 ++++++++++++++++++ .../IntegrationTests/UploadModuleTests.cs | 73 ++++++ .../TerraformRegistry.Tests.csproj | 36 +++ .../TestData/test-module.zip | Bin 0 -> 453 bytes .../Utilities/SemVerValidatorTests.cs | 123 ++++++++++ .../WellKnownEndpointTests.cs | 0 .../Middleware/AuthenticationMiddleware.cs | 42 ++++ .../DatabaseInitializerHostedService.cs | 32 +++ docker-compose.dev.build.yml | 52 +++++ 10 files changed, 588 insertions(+) create mode 100644 TerraformRegistry.API/Interfaces/IInitializableDb.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs create mode 100644 TerraformRegistry.Tests/TerraformRegistry.Tests.csproj create mode 100644 TerraformRegistry.Tests/TestData/test-module.zip create mode 100644 TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs create mode 100644 TerraformRegistry.Tests/WellKnownEndpointTests.cs create mode 100644 TerraformRegistry/Middleware/AuthenticationMiddleware.cs create mode 100644 TerraformRegistry/Services/DatabaseInitializerHostedService.cs create mode 100644 docker-compose.dev.build.yml diff --git a/TerraformRegistry.API/Interfaces/IInitializableDb.cs b/TerraformRegistry.API/Interfaces/IInitializableDb.cs new file mode 100644 index 0000000..ab3ff58 --- /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(); +} diff --git a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs new file mode 100644 index 0000000..dfd43b0 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs @@ -0,0 +1,221 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using System.Text; +using System.Threading; +using Testcontainers.PostgreSql; +using DotNet.Testcontainers.Containers; +using DotNet.Testcontainers.Configurations; +using DotNet.Testcontainers.Builders; +using Xunit; +using Xunit.Abstractions; +using Xunit.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; + +namespace TerraformRegistry.Tests.IntegrationTests; + +// Base class for integration tests +public abstract class IntegrationTestBase : IAsyncLifetime +{ + protected PostgreSqlContainer _postgresContainer = null!; + protected WebApplicationFactory _factory = null!; + protected HttpClient _client = null!; + protected readonly ITestOutputHelper _output; + protected XunitLoggerProvider _loggerProvider = null!; + private CancellationTokenSource _logMonitorCts = new(); + + protected IntegrationTestBase(ITestOutputHelper output) + { + _output = output; + } + + public virtual async Task InitializeAsync() + { + _output.WriteLine("Starting PostgreSQL test container..."); + + 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()}"); + + // Start monitoring logs in the background + // _ = MonitorContainerLogsAsync(); + } + catch (Exception ex) + { + _output.WriteLine($"Failed to start PostgreSQL container: {ex}"); + throw; + } + + _loggerProvider = new XunitLoggerProvider(_output, (category, level) => true); + + _factory = new WebApplicationFactory() + .WithWebHostBuilder(builder => + { + builder.ConfigureAppConfiguration((context, config) => + { + var connStr = _postgresContainer.GetConnectionString(); + config.AddInMemoryCollection([ + new KeyValuePair("PostgreSQL:ConnectionString", connStr), + new KeyValuePair("DatabaseProvider", "postgres"), + new KeyValuePair("BaseUrl", "http://localhost:5000") + ]); + }); + + builder.ConfigureLogging(logging => + { + logging.ClearProviders(); + logging.AddProvider(_loggerProvider); + + logging.SetMinimumLevel(LogLevel.Information); + logging.AddFilter("Microsoft.AspNetCore", LogLevel.Warning); + logging.AddFilter("Testcontainers", LogLevel.Information); + }); + }); + + _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 ITestOutputHelper _output; + private readonly StringBuilder _lineBuffer = new(); + + 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) + { + string text = Encoding.UTF8.GetString(buffer, offset, count); + + for (int i = 0; i < text.Length; i++) + { + char 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); + } + } + } +} + diff --git a/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs new file mode 100644 index 0000000..90b4424 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs @@ -0,0 +1,73 @@ +using System.IO; +using System.Net; +using System.Net.Http.Headers; +using System.Reflection; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Testing; +using Xunit; +using Xunit.Abstractions; + +namespace TerraformRegistry.Tests.IntegrationTests; + +public class UploadModuleTests : IntegrationTestBase +{ + private const string TestDataDirectory = "TestData"; + private const string TestModuleName = "test-module.zip"; + private const string AuthToken = "default-auth-token"; + + public UploadModuleTests(ITestOutputHelper output) : base(output) + { + Environment.SetEnvironmentVariable("AuthorizationToken", AuthToken); + } + + [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, "file", fileName); + + var response = await client.PutAsync("/modules/test-ns/test-name/test-provider/0.1.0/file", content); + + Assert.Equal(HttpStatusCode.OK, 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; + } +} diff --git a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj new file mode 100644 index 0000000..ace027a --- /dev/null +++ b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj @@ -0,0 +1,36 @@ + + + + net9.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 0000000000000000000000000000000000000000..3e15f3dec3ce783668f360eadd42c071fd564ef4 GIT binary patch literal 453 zcmWIWW@Zs#-~d8h;W<$ZNPwL|fgv|BGf%H1t+axhfsq9y2PQ&8cp2E)Z}MfpFf&7d zH#-MNo(V(%K>*y?95iFOfX3#RmK2nh6yq?t7HD!E5NiUlX>TCcAp-%{|J-{IE3=>A z-P8JC=EweY=6?NHD9lh$a?cpsSfFD%u=gha{-W9$CDWJfp1;mNY0;&w&Hsx27|&Tg=h(yDj3B2g?|pDR8R+a@tPG5x& 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)); + } +} diff --git a/TerraformRegistry.Tests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/WellKnownEndpointTests.cs new file mode 100644 index 0000000..e69de29 diff --git a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs new file mode 100644 index 0000000..c6d17cb --- /dev/null +++ b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using System.Linq; +using System.Threading.Tasks; + +namespace TerraformRegistry.Middleware +{ + public class AuthenticationMiddleware + { + private readonly RequestDelegate _next; + private readonly string _authToken; + private readonly ILogger _logger; + private const string AuthorizationHeader = "Authorization"; + private const string BearerPrefix = "Bearer "; + private static readonly string[] ProtectedPathPrefixes = new[] { "/v1/" }; + + public AuthenticationMiddleware(RequestDelegate next, string authToken, ILogger logger) + { + _next = next; + _authToken = authToken; + _logger = logger; + } + + 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(); + if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{_authToken}", StringComparison.Ordinal)) + { + _logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, context.Connection.RemoteIpAddress); + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + context.Response.Headers["WWW-Authenticate"] = "Bearer"; + await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); + return; + } + } + await _next(context); + } + } +} diff --git a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs new file mode 100644 index 0000000..20ebc99 --- /dev/null +++ b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; + +namespace TerraformRegistry.Services +{ + /// + /// Hosted service to initialize the database at application startup. + /// + public class DatabaseInitializerHostedService : IHostedService + { + private readonly IInitializableDb? _initializableDb; + + public DatabaseInitializerHostedService(IServiceProvider serviceProvider) + { + // Try to resolve IInitializableDb (may be null for in-memory DB) + _initializableDb = serviceProvider.GetService(typeof(IInitializableDb)) as IInitializableDb; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + if (_initializableDb != null) + { + await _initializableDb.InitializeDatabase(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/docker-compose.dev.build.yml b/docker-compose.dev.build.yml new file mode 100644 index 0000000..430aa4c --- /dev/null +++ b/docker-compose.dev.build.yml @@ -0,0 +1,52 @@ +--- + +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 + depends_on: + - postgres + + postgres: + image: postgres:17 + ports: + - "5433:5432" + volumes: + - postgres_data_dev:/var/lib/postgresql/data + environment: + POSTGRES_USER: terraform_reg_user + POSTGRES_PASSWORD: terraform_reg_password + POSTGRES_DB: terraform_registry_dev + + pgadmin: + image: dpage/pgadmin4 + 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: From 21d9c2800c731abee0d49cef8ba0480f0cbd31a2 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 8 May 2025 01:30:58 +0100 Subject: [PATCH 07/29] Bug fixes and improvements --- .../Interfaces/IDatabaseService.cs | 5 + .../UploadModuleResponse.cs | 4 + .../Migrations/Migration_1_0_0.cs | 22 +- .../PostgreSQLDatabaseService.cs | 35 +- .../DownloadModuleUnauthorizedTests.cs | 22 + .../GetModuleUnauthorizedTests.cs | 22 + .../GetModuleVersionsUnauthorizedTests.cs | 22 + .../IntegrationTests/IntegrationTestBase.cs | 69 +-- .../ListModulesUnauthorizedTests.cs | 22 + .../UploadAndListModulesTests.cs | 41 ++ .../IntegrationTests/UploadModuleTests.cs | 34 +- .../WellKnownEndpointTests.cs | 6 +- TerraformRegistry/Handlers/ModuleHandlers.cs | 69 ++- TerraformRegistry/JsonSerializerContext.cs | 7 +- .../Middleware/AuthenticationMiddleware.cs | 21 +- .../Models/StringArrayWrapper.cs | 12 + TerraformRegistry/Program.cs | 392 ++++++++++-------- .../DatabaseInitializerHostedService.cs | 4 - .../Services/InMemoryDatabaseService.cs | 9 + .../Services/LocalModuleService.cs | 119 +++++- TerraformRegistry/appsettings.json | 2 +- 21 files changed, 645 insertions(+), 294 deletions(-) create mode 100644 TerraformRegistry.Models/UploadModuleResponse.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs create mode 100644 TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs create mode 100644 TerraformRegistry/Models/StringArrayWrapper.cs diff --git a/TerraformRegistry.API/Interfaces/IDatabaseService.cs b/TerraformRegistry.API/Interfaces/IDatabaseService.cs index 0fc61e3..482098c 100644 --- a/TerraformRegistry.API/Interfaces/IDatabaseService.cs +++ b/TerraformRegistry.API/Interfaces/IDatabaseService.cs @@ -31,4 +31,9 @@ public interface IDatabaseService /// Adds a new module to the database /// Task AddModuleAsync(ModuleStorage module); + + /// + /// Removes a module from the database + /// + Task RemoveModuleAsync(ModuleStorage module); } \ No newline at end of file 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.PostgreSQL/Migrations/Migration_1_0_0.cs b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs index b023d3e..7c56d3b 100644 --- a/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs +++ b/TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_0.cs @@ -3,7 +3,7 @@ namespace TerraformRegistry.PostgreSQL.Migrations; using Npgsql; /// -/// Combined initial database schema migration (v1.2.0) +/// 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 @@ -11,19 +11,18 @@ namespace TerraformRegistry.PostgreSQL.Migrations; /// /// Gets the migration version in SemVer format /// - public string Version => "1.2.0"; // Updated version + public string Version => "1.0.0"; // Updated version /// /// Gets a description of what this migration does /// - public string Description => "Initial schema, metadata column, and download tracking"; // Updated description + public string Description => "Initial schema"; /// /// Applies the migration to the database /// public async Task ApplyAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) { - // Combined SQL from migrations 1.0.0, 1.1.0, and 1.2.0 var combinedSql = @" -- Migration 1.0.0: Initial schema creation CREATE TABLE IF NOT EXISTS modules ( @@ -36,23 +35,18 @@ version VARCHAR(50) NOT NULL, 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 (1.0.0) + -- 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); - - -- Migration 1.1.0: Add metadata column - -- Add a new column for additional metadata - ALTER TABLE modules ADD COLUMN IF NOT EXISTS metadata JSONB NOT NULL DEFAULT '{}'; - - -- Create an index for efficient JSON queries on metadata (1.1.0) + -- Create an index for efficient JSON queries on metadata CREATE INDEX IF NOT EXISTS idx_module_metadata ON modules USING GIN (metadata); - -- Migration 1.2.0: Add module download tracking -- Create downloads table CREATE TABLE IF NOT EXISTS module_downloads ( id SERIAL PRIMARY KEY, @@ -66,14 +60,14 @@ client_ip VARCHAR(50), user_agent TEXT ); - -- Create indexes for faster queries (1.2.0) + -- 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 (1.2.0) + -- Create function to record a download CREATE OR REPLACE FUNCTION record_module_download( p_namespace VARCHAR(255), p_name VARCHAR(255), diff --git a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs index 8ed9322..6f09d16 100644 --- a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -401,7 +401,7 @@ DO UPDATE SET command.Parameters.AddWithValue("@description", module.Description); command.Parameters.AddWithValue("@storagePath", module.FilePath); // Link to blob storage path command.Parameters.AddWithValue("@publishedAt", module.PublishedAt); - command.Parameters.AddWithValue("@dependencies", JsonSerializer.Serialize(module.Dependencies)); + command.Parameters.AddWithValue("@dependencies", module.Dependencies == null ? "[]" : JsonSerializer.Serialize(module.Dependencies)).NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Jsonb; // Execute and get the ID of the inserted/updated row var result = await command.ExecuteScalarAsync(); @@ -414,4 +414,37 @@ DO UPDATE SET 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; + } + } } \ 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..c94d99d --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs @@ -0,0 +1,22 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit; +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); + } +} diff --git a/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs new file mode 100644 index 0000000..68e47ca --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs @@ -0,0 +1,22 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit; +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); + } +} diff --git a/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs new file mode 100644 index 0000000..f78dd77 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs @@ -0,0 +1,22 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit; +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); + } +} diff --git a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs index dfd43b0..588b392 100644 --- a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs +++ b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs @@ -24,16 +24,55 @@ public abstract class IntegrationTestBase : IAsyncLifetime protected readonly ITestOutputHelper _output; protected XunitLoggerProvider _loggerProvider = null!; private CancellationTokenSource _logMonitorCts = new(); + private string _authToken; - protected IntegrationTestBase(ITestOutputHelper output) + 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)); @@ -50,7 +89,7 @@ public virtual async Task InitializeAsync() await _postgresContainer.StartAsync(); _output.WriteLine($"PostgreSQL container started successfully. Connection string: {_postgresContainer.GetConnectionString()}"); - // Start monitoring logs in the background + // Optionally, start monitoring logs in the background // _ = MonitorContainerLogsAsync(); } catch (Exception ex) @@ -59,31 +98,7 @@ public virtual async Task InitializeAsync() throw; } - _loggerProvider = new XunitLoggerProvider(_output, (category, level) => true); - - _factory = new WebApplicationFactory() - .WithWebHostBuilder(builder => - { - builder.ConfigureAppConfiguration((context, config) => - { - var connStr = _postgresContainer.GetConnectionString(); - config.AddInMemoryCollection([ - new KeyValuePair("PostgreSQL:ConnectionString", connStr), - new KeyValuePair("DatabaseProvider", "postgres"), - new KeyValuePair("BaseUrl", "http://localhost:5000") - ]); - }); - - builder.ConfigureLogging(logging => - { - logging.ClearProviders(); - logging.AddProvider(_loggerProvider); - - logging.SetMinimumLevel(LogLevel.Information); - logging.AddFilter("Microsoft.AspNetCore", LogLevel.Warning); - logging.AddFilter("Testcontainers", LogLevel.Information); - }); - }); + _loggerProvider = new XunitLoggerProvider(_output, (_, _) => true); _client = _factory.CreateClient(); } diff --git a/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs new file mode 100644 index 0000000..8d47431 --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs @@ -0,0 +1,22 @@ +using System.Net; +using System.Net.Http.Headers; +using Xunit; +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); + } +} diff --git a/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs b/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs new file mode 100644 index 0000000..150a08d --- /dev/null +++ b/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs @@ -0,0 +1,41 @@ +using System.Net; +using System.Net.Http.Headers; +using System.Text.Json; +using System.Threading.Tasks; +using Xunit; +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 index 90b4424..8e1b60e 100644 --- a/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs @@ -1,23 +1,25 @@ -using System.IO; using System.Net; using System.Net.Http.Headers; using System.Reflection; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Testing; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; -public class UploadModuleTests : IntegrationTestBase +public class UploadModuleTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) { private const string TestDataDirectory = "TestData"; private const string TestModuleName = "test-module.zip"; - private const string AuthToken = "default-auth-token"; - - public UploadModuleTests(ITestOutputHelper output) : base(output) + protected const string AuthToken = "default-auth-token"; + + [Fact] + public async Task Invalid_Authorization_ReturnsUnauthorized() { - Environment.SetEnvironmentVariable("AuthorizationToken", AuthToken); + 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] @@ -35,7 +37,8 @@ public async Task Upload_ValidModule_ReturnsOk() 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."); + _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); } @@ -43,11 +46,14 @@ public async Task Upload_ValidModule_ReturnsOk() using var content = new MultipartFormDataContent(); using var streamContent = new StreamContent(fileStream); streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/gzip"); - content.Add(streamContent, "file", fileName); + content.Add(streamContent, "moduleFile", fileName); + + var response = await client.PostAsync("/v1/modules/test-ns/test-name/test-provider/0.1.0", content); - var response = await client.PutAsync("/modules/test-ns/test-name/test-provider/0.1.0/file", content); + var responseContent = await response.Content.ReadAsStringAsync(); + _output.WriteLine($"Response content: {responseContent}"); - Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal(HttpStatusCode.Created, response.StatusCode); } /// @@ -70,4 +76,4 @@ private string GetProjectDirectory() return projectDir; } -} +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs index 2295dc2..7f06bb3 100644 --- a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs @@ -5,11 +5,9 @@ namespace TerraformRegistry.Tests.IntegrationTests; -public class WellKnownEndpointTests : IntegrationTestBase +public class WellKnownEndpointTests(ITestOutputHelper output) : IntegrationTestBase(output, AuthToken) { - public WellKnownEndpointTests(ITestOutputHelper output) : base(output) - { - } + private const string AuthToken = "default-auth-token"; [Fact] public async Task WellKnown_Endpoint_Returns_Expected_Response() diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs index fedd1a1..5572d1c 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -26,6 +26,12 @@ static ModuleHandlers() _logger = loggerFactory.CreateLogger("ModuleHandlers"); } + // Helper to return error responses in Terraform Registry format + private static IResult Error(int statusCode, string message) + { + return Results.Json(new { errors = new[] { message } }, statusCode: statusCode); + } + /// /// Lists or searches modules /// @@ -69,7 +75,7 @@ public static async Task GetModule( var module = await moduleService.GetModuleAsync(@namespace, name, provider, version); if (module == null) { - return NotFound(); + return Error(404, "Module not found"); } return Ok(module); @@ -88,6 +94,10 @@ public static async Task GetModuleVersions( @namespace, name, provider); var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); + if (versions == null || versions.Versions == null || versions.Versions.Count == 0) + { + return Error(404, "Module not found"); + } return Ok(versions); } @@ -99,7 +109,8 @@ public static async Task DownloadModule( string name, string provider, string version, - IModuleService moduleService) + IModuleService moduleService, + HttpContext context) { _logger.LogInformation("Downloading module: {Namespace}/{Name}/{Provider}/{Version}", @namespace, name, provider, version); @@ -107,25 +118,36 @@ public static async Task DownloadModule( var downloadPath = await moduleService.GetModuleDownloadPathAsync(@namespace, name, provider, version); if (downloadPath == null) { - return NotFound(); + return Error(404, "Module not found"); } - // Check if the result is a URL (Azure Blob SAS URL) - if (Uri.TryCreate(downloadPath, UriKind.Absolute, out var uriResult) && - (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps)) - { - _logger.LogInformation("Redirecting to blob storage URL for download"); - return Redirect(downloadPath); - } + context.Response.Headers["X-Terraform-Get"] = downloadPath; + return Results.NoContent(); + } - // Otherwise, treat it as a local file path - if (!System.IO.File.Exists(downloadPath)) + /// + /// 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 latest = versions?.Versions?.OrderByDescending(v => v, Comparer.Create((a, b) => + SemVerValidator.Compare(a, b) ?? 0)).FirstOrDefault(); + if (string.IsNullOrEmpty(latest)) { - _logger.LogWarning("Module file not found: {FilePath}", downloadPath); - return NotFound("Module file not found"); + return Error(404, "Module not found"); } - return File(downloadPath, "application/zip", Path.GetFileName(downloadPath)); + return await DownloadModule(@namespace, name, provider, latest, moduleService, context); } /// @@ -146,7 +168,7 @@ public static async Task UploadModule( if (!SemVerValidator.IsValid(version)) { _logger.LogWarning("Invalid version format: {Version}", version); - return BadRequest($"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]"); + return Error(400, $"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]"); } var form = await request.ReadFormAsync(); @@ -155,31 +177,32 @@ public static async Task UploadModule( if (moduleFile == null || moduleFile.Length == 0) { - return BadRequest("No file uploaded"); + return Error(400, "No file uploaded"); } try { - using var stream = moduleFile.OpenReadStream(); + await using var stream = moduleFile.OpenReadStream(); var result = await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description); if (!result) { - return Conflict("Module version already exists"); + return Error(409, "Module version already exists"); } - // Using location header instead of CreatedAtAction for minimal API - return Created($"/v1/modules/{@namespace}/{name}/{provider}/{version}", null); + // 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}", version); - return BadRequest(ex.Message); + return Error(400, ex.Message); } catch (Exception ex) { _logger.LogError(ex, "Error uploading module"); - return Problem("An error occurred while uploading the module", statusCode: 500); + return Error(500, "An error occurred while uploading the module"); } } } \ No newline at end of file diff --git a/TerraformRegistry/JsonSerializerContext.cs b/TerraformRegistry/JsonSerializerContext.cs index d68b8a3..6ad1493 100644 --- a/TerraformRegistry/JsonSerializerContext.cs +++ b/TerraformRegistry/JsonSerializerContext.cs @@ -1,3 +1,5 @@ +using Microsoft.AspNetCore.Mvc; + namespace TerraformRegistry; using System.Text.Json.Serialization; @@ -16,7 +18,10 @@ namespace TerraformRegistry; [JsonSerializable(typeof(ModuleStorage))] [JsonSerializable(typeof(ModuleSubmodule))] [JsonSerializable(typeof(ModuleVersions))] -[JsonSerializable(typeof(ModuleMetadata))] +[JsonSerializable(typeof(ProblemDetails))] +[JsonSerializable(typeof(UploadModuleResponse))] +[JsonSerializable(typeof(StringArrayWrapper))] +[JsonSerializable(typeof(string[]))] public partial class AppJsonSerializerContext : JsonSerializerContext { } diff --git a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs index c6d17cb..ef6713c 100644 --- a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs +++ b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs @@ -5,38 +5,31 @@ namespace TerraformRegistry.Middleware { - public class AuthenticationMiddleware + public class AuthenticationMiddleware( + RequestDelegate next, + string authToken, + ILogger logger) { - private readonly RequestDelegate _next; - private readonly string _authToken; - private readonly ILogger _logger; private const string AuthorizationHeader = "Authorization"; private const string BearerPrefix = "Bearer "; private static readonly string[] ProtectedPathPrefixes = new[] { "/v1/" }; - public AuthenticationMiddleware(RequestDelegate next, string authToken, ILogger logger) - { - _next = next; - _authToken = authToken; - _logger = logger; - } - 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(); - if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{_authToken}", StringComparison.Ordinal)) + if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) { - _logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, context.Connection.RemoteIpAddress); + logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, context.Connection.RemoteIpAddress); context.Response.StatusCode = StatusCodes.Status401Unauthorized; context.Response.Headers["WWW-Authenticate"] = "Bearer"; await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); return; } } - await _next(context); + await next(context); } } } diff --git a/TerraformRegistry/Models/StringArrayWrapper.cs b/TerraformRegistry/Models/StringArrayWrapper.cs new file mode 100644 index 0000000..945a567 --- /dev/null +++ b/TerraformRegistry/Models/StringArrayWrapper.cs @@ -0,0 +1,12 @@ +using System; + +namespace TerraformRegistry.Models; + +/// +/// Wrapper class for use in JsonSerialization where an array of strings is used. +/// This replaces anonymous types like new { property = new string[] { ... } } +/// +public class StringArrayWrapper +{ + public string[] Values { get; set; } = Array.Empty(); +} diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index e1d2d01..f9ba4c1 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -1,9 +1,16 @@ +using Microsoft.Extensions.FileProviders; +using NSwag; +using NSwag.Generation.Processors.Security; using TerraformRegistry; 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; -using Microsoft.Extensions.FileProviders; +using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateSlimBuilder(args); @@ -12,229 +19,268 @@ .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables("TF_REG_"); -var databaseProvider = builder.Configuration["DatabaseProvider"]?.ToLower() ?? "inmemory"; - -switch (databaseProvider) +// Register MigrationManager and IInitializableDb for postgres +builder.Services.AddSingleton(); +builder.Services.AddSingleton(provider => { - case "postgres": - builder.Services.AddSingleton(); - builder.Services.AddSingleton(provider => - { - var config = provider.GetRequiredService(); - var loggerDb = provider.GetRequiredService>(); - var migrationManager = provider.GetRequiredService(); - var connectionString = config["PostgreSQL:ConnectionString"]; - if (string.IsNullOrEmpty(connectionString)) - { - throw new InvalidOperationException("PostgreSQL connection string is missing or empty. Please check your configuration."); - } - var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; - if (string.IsNullOrEmpty(baseUrl)) - { - throw new InvalidOperationException("BaseUrl is missing or empty. Please check your configuration."); - } - return new TerraformRegistry.PostgreSQL.PostgreSqlDatabaseService(connectionString, baseUrl, loggerDb, migrationManager); - }); - builder.Services.AddSingleton(provider => (IInitializableDb)provider.GetRequiredService()); - break; - - case "inmemory": - builder.Services.AddSingleton(provider => - { - var config = provider.GetRequiredService(); - var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; - if (string.IsNullOrEmpty(baseUrl)) - { - throw new InvalidOperationException("BaseUrl is missing or empty. Please check your configuration."); - } - return new InMemoryDatabaseService(baseUrl); - }); - break; - - default: - throw new Exception($"Invalid database provider specified: '{databaseProvider}'. Check configuration."); -} + var db = provider.GetRequiredService(); + return db as IInitializableDb ?? throw new InvalidOperationException("Database service does not implement IInitializableDb"); +}); -var storageProvider = builder.Configuration["StorageProvider"]?.ToLower() ?? "local"; +// 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() ?? "inmemory"; + 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 "inmemory": + return new InMemoryDatabaseService(baseUrl); + default: + throw new Exception($"Invalid database provider specified: '{databaseProvider}'. Check configuration."); + } +}); -switch (storageProvider) +// Register module storage service using DI factory +builder.Services.AddSingleton(provider => { - case "azure": - builder.Services.AddSingleton(); - break; - - case "local": - builder.Services.AddSingleton(provider => - { - var config = provider.GetRequiredService(); - var db = provider.GetRequiredService(); - var logger = provider.GetRequiredService>(); - 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); - }); - break; - - default: - throw new Exception($"Invalid storage provider specified: '{storageProvider}'. Check configuration."); -} + 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."); + } +}); -// Register the database initializer hosted service builder.Services.AddHostedService(); builder.Services.ConfigureHttpJsonOptions(options => { - options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; + options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; }); bool enableSwagger = false; var enableSwaggerConfig = builder.Configuration["EnableSwagger"]; if (!string.IsNullOrEmpty(enableSwaggerConfig) && bool.TryParse(enableSwaggerConfig, out var parsed)) { - enableSwagger = parsed; + enableSwagger = parsed; } else if (builder.Environment.IsDevelopment()) { - enableSwagger = true; + 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 NSwag.OpenApiSecurityScheme - { - Type = NSwag.OpenApiSecuritySchemeType.Http, - Scheme = "bearer", - BearerFormat = "JWT", - Name = "Authorization", - In = NSwag.OpenApiSecurityApiKeyLocation.Header, - Description = "Enter your Bearer token in the format: Bearer {token}" - }); - options.OperationProcessors.Add(new NSwag.Generation.Processors.Security.AspNetCoreOperationSecurityScopeProcessor("Bearer")); - }); + 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>(); -logger.LogInformation("Using {DatabaseProvider} database for module metadata", databaseProvider); -logger.LogInformation("Using {StorageProvider} storage for module storage", storageProvider); +var config = app.Services.GetRequiredService(); +logger.LogInformation("Using {DatabaseProvider} database for module metadata", config["DatabaseProvider"] ?? "inmemory"); +logger.LogInformation("Using {StorageProvider} storage for module storage", config["StorageProvider"] ?? "local"); var authToken = app.Configuration["AuthorizationToken"]; - -if (authToken == "default-auth-token") +if (string.IsNullOrEmpty(authToken)) { - logger.LogWarning("WARNING: The default AuthorizationToken is in use. This is not secure. Please set a secure token in your configuration."); + throw new InvalidOperationException("AuthorizationToken is missing or empty. Please set a secure token in your configuration."); } - -if (!string.IsNullOrEmpty(authToken)) +if (authToken == "default-auth-token") { - // Use the new AuthenticationMiddleware - app.UseMiddleware(authToken); + logger.LogWarning("WARNING: The default AuthorizationToken is in use. This is not secure. Please set a secure token in your configuration."); } +app.UseHttpsRedirection(); + var webFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "web"); if (Directory.Exists(webFolderPath)) { - app.UseStaticFiles(new StaticFileOptions - { - FileProvider = new PhysicalFileProvider(webFolderPath), - RequestPath = "" - }); + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(webFolderPath), + RequestPath = "" + }); } +app.UseMiddleware(authToken); +// Removed app.UseAuthorization(); + if (enableSwagger) { - app.UseOpenApi(); - app.UseSwaggerUi(); + app.UseOpenApi(); + app.UseSwaggerUi(); } app.MapGet("/", async (HttpContext 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; - } + 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; + } }); -app.UseHttpsRedirection(); - 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, int limit) => - ModuleHandlers.ListModules(moduleService, q, @namespace, provider, offset, limit)) - .WithTags("Modules") - .WithDescription("Lists or searches modules") - .Produces() - .RequireAuthorization(); - -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) - .RequireAuthorization(); - -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() - .RequireAuthorization(); - -app.MapGet("/v1/modules/{namespace}/{name}/{provider}/{version}/download", (string @namespace, string name, string provider, string version, IModuleService moduleService) => - ModuleHandlers.DownloadModule(@namespace, name, provider, version, moduleService)) - .WithTags("Modules") - .WithDescription("Downloads a specific module version") - .Produces(200, contentType: "application/zip") - .ProducesProblem(404) - .RequireAuthorization(); - -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) - .RequireAuthorization(); + .WithTags("Service Discovery") + .WithDescription("Terraform service discovery endpoint") + .Produces(); + +app.MapGet("/v1/modules", + (IModuleService moduleService, string? q, string? @namespace, string? provider, int offset, int limit) => + 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 (HttpContext 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 (!System.IO.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.MapFallback(async (HttpContext context) => { - if (context.Request.Path.StartsWithSegments("/v1") || - context.Request.Path.StartsWithSegments("/.well-known") || - context.Request.Path.StartsWithSegments("/swagger")) - { - return; - } - - var indexPath = Path.Combine(webFolderPath, "index.html"); - if (File.Exists(indexPath)) - { - context.Response.ContentType = "text/html"; - await context.Response.SendFileAsync(indexPath); - } + // Serve index.html only at root + if (context.Request.Path == "/") + { + var indexPath = Path.Combine(webFolderPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + return; + } + } + + // If path starts with /v1/, return problem JSON + if (context.Request.Path.StartsWithSegments("/v1")) + { + 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; + } + + // All other paths: 404 + context.Response.StatusCode = 404; }); app.Run(); diff --git a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs index 20ebc99..b900b94 100644 --- a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs +++ b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs @@ -1,7 +1,3 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using TerraformRegistry.API; using TerraformRegistry.API.Interfaces; namespace TerraformRegistry.Services diff --git a/TerraformRegistry/Services/InMemoryDatabaseService.cs b/TerraformRegistry/Services/InMemoryDatabaseService.cs index 4aac444..2276737 100644 --- a/TerraformRegistry/Services/InMemoryDatabaseService.cs +++ b/TerraformRegistry/Services/InMemoryDatabaseService.cs @@ -162,6 +162,15 @@ public Task AddModuleAsync(ModuleStorage module) return Task.FromResult(_modules.TryAdd(key, module)); } + /// + /// Removes a module from the in-memory database + /// + public Task RemoveModuleAsync(ModuleStorage module) + { + var key = GetModuleKey(module.Namespace, module.Name, module.Provider, module.Version); + return Task.FromResult(_modules.TryRemove(key, out _)); + } + /// /// Generates a unique key for a module version /// diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs index 5e6ca58..c9ac5e8 100644 --- a/TerraformRegistry/Services/LocalModuleService.cs +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -8,6 +8,7 @@ namespace TerraformRegistry.Services; using System.Text.Json; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using System.Collections.Concurrent; /// /// Implementation of module service with local file system storage @@ -18,6 +19,10 @@ public class LocalModuleService : ModuleService private readonly string _moduleStoragePath; private readonly ILogger _logger; + // Token storage for download links + private static readonly ConcurrentDictionary _downloadTokens = new(); + private static readonly TimeSpan _tokenLifetime = TimeSpan.FromMinutes(10); + public LocalModuleService(IConfiguration configuration, IDatabaseService databaseService, ILogger logger) { _databaseService = databaseService; @@ -190,7 +195,33 @@ public override Task GetModuleVersionsAsync(string @namespace, s public override async Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, string version) { var moduleStorage = await _databaseService.GetModuleStorageAsync(@namespace, name, provider, version); - return moduleStorage?.FilePath; + 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 base path as needed) + return $"/module/download?token={token}"; + } + + // Helper for endpoint to validate and retrieve file path + public static bool TryGetFilePathFromToken(string token, out string filePath) + { + filePath = string.Empty; + if (_downloadTokens.TryGetValue(token, out var entry)) + { + if (entry.Expiry > DateTime.UtcNow) + { + filePath = entry.FilePath; + return true; + } + // Expired, remove + _downloadTokens.TryRemove(token, out _); + } + return false; } /// @@ -205,27 +236,79 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str Directory.CreateDirectory(namespaceDir); } - // Save the module zip file + // Save the module zip file as a temporary file first var fileName = $"{name}-{provider}-{version}.zip"; - var filePath = Path.Combine(namespaceDir, fileName); + var tempFileName = $"{fileName}.tmp"; + var tempFilePath = Path.Combine(namespaceDir, tempFileName); + var finalFilePath = Path.Combine(namespaceDir, fileName); - using (var fileStream = File.Create(filePath)) + try { - await moduleContent.CopyToAsync(fileStream); - } + 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 = filePath, - PublishedAt = DateTime.UtcNow, // Use current time for newly uploaded modules - Dependencies = new List() // Simplified, no dependencies - }; + var module = new ModuleStorage + { + Namespace = @namespace, + Name = name, + Provider = provider, + Version = version, + Description = description, + FilePath = finalFilePath, + PublishedAt = DateTime.UtcNow, + Dependencies = new List() + }; - return await _databaseService.AddModuleAsync(module); + var dbResult = await _databaseService.AddModuleAsync(module); + if (dbResult) + { + try + { + // Move temp file to final file name + if (File.Exists(finalFilePath)) + { + File.Delete(finalFilePath); + } + File.Move(tempFilePath, finalFilePath); + return true; + } + catch (Exception fileMoveEx) + { + // Rollback DB entry if file move fails + 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; + } + } + else + { + // DB failed, delete temp file + File.Delete(tempFilePath); + return false; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to upload module {Namespace}/{Name}/{Provider}/{Version}", @namespace, name, provider, version); + // Clean up temp file if it exists + if (File.Exists(tempFilePath)) + { + File.Delete(tempFilePath); + } + return false; + } } } \ No newline at end of file diff --git a/TerraformRegistry/appsettings.json b/TerraformRegistry/appsettings.json index 17b104f..737ccd1 100644 --- a/TerraformRegistry/appsettings.json +++ b/TerraformRegistry/appsettings.json @@ -8,7 +8,7 @@ "AllowedHosts": "*", "BaseUrl": "http://localhost:5131", "ModuleStoragePath": "modules", - "StorageProvider": "azure", + "StorageProvider": "local", "DatabaseProvider": "inmemory", "AzureStorage": { "ConnectionString": "", From 1854ee0ba0984f250040c17e1d64eba577b963d5 Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 15:05:31 +0100 Subject: [PATCH 08/29] Fixes & adding tests --- .github/workflows/test.yaml | 37 +++ .../AzureBlobModuleService.cs | 79 +++++-- .../TerraformRegistry.AzureBlob.csproj | 1 + .../DownloadModuleUnauthorizedTests.cs | 3 +- .../GetModuleUnauthorizedTests.cs | 3 +- .../GetModuleVersionsUnauthorizedTests.cs | 3 +- .../IntegrationTests/IntegrationTestBase.cs | 57 ++--- .../ListModulesUnauthorizedTests.cs | 3 +- .../UploadAndListModulesTests.cs | 4 - .../IntegrationTests/UploadModuleTests.cs | 6 +- .../WellKnownEndpointTests.cs | 4 +- .../TerraformRegistry.Tests.csproj | 58 ++--- .../AzureBlobModuleServiceConstructorTests.cs | 179 ++++++++++++++ .../AzureBlobModuleServiceDelegationTests.cs | 90 +++++++ .../AzureBlobModuleServiceDownloadTests.cs | 223 ++++++++++++++++++ .../AzureBlobModuleServiceUploadTests.cs | 206 ++++++++++++++++ .../UnitTests/EnvironmentVariablesTests.cs | 39 +++ .../UnitTests/LocalModuleServiceTests.cs | 204 ++++++++++++++++ .../Utilities/SemVerValidatorTests.cs | 8 +- .../WellKnownEndpointTests.cs | 0 TerraformRegistry/Program.cs | 1 - 21 files changed, 1112 insertions(+), 96 deletions(-) create mode 100644 .github/workflows/test.yaml create mode 100644 TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs create mode 100644 TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs create mode 100644 TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDownloadTests.cs create mode 100644 TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs create mode 100644 TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs create mode 100644 TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs delete mode 100644 TerraformRegistry.Tests/WellKnownEndpointTests.cs diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..12123ba --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,37 @@ +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 + run: dotnet test TerraformRegistry.Tests/TerraformRegistry.Tests.csproj --no-build --configuration Release --logger "trx;LogFileName=test_results.trx" + env: + ASPNETCORE_ENVIRONMENT: Test diff --git a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs index a5c707b..89503bb 100644 --- a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -3,6 +3,7 @@ namespace TerraformRegistry.AzureBlob; using System.Collections.Concurrent; using System.IO.Compression; using System.Text.Json; +using Azure.Identity; // Added for Managed Identity using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Azure.Storage.Blobs.Specialized; @@ -15,38 +16,86 @@ namespace TerraformRegistry.AzureBlob; using TerraformRegistry.Models; /// -/// Implementation of module service using Azure Blob Storage +/// Implementation of a module service using Azure Blob Storage /// public class AzureBlobModuleService : ModuleService { private readonly IDatabaseService _databaseService; - private readonly BlobServiceClient _blobServiceClient; private readonly BlobContainerClient _containerClient; private readonly string _containerName; private readonly int _sasTokenExpiryMinutes; private readonly ILogger _logger; - public AzureBlobModuleService(IConfiguration configuration, IDatabaseService databaseService, ILogger logger) + public AzureBlobModuleService( + IConfiguration configuration, + IDatabaseService databaseService, + ILogger logger, + BlobServiceClient? blobServiceClient = null) { _databaseService = databaseService; _logger = logger; - // Get Azure Storage connection settings from configuration - var connectionString = configuration["AzureStorage:ConnectionString"] - ?? throw new ArgumentNullException("AzureStorage:ConnectionString", "Azure Storage connection string is required"); - - _containerName = configuration["AzureStorage:ContainerName"] ?? "modules"; + // 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; + } - // Initialize Azure Blob Storage clients - _blobServiceClient = new BlobServiceClient(connectionString); - _containerClient = _blobServiceClient.GetBlobContainerClient(_containerName); + BlobServiceClient clientToUse; - // Ensure container exists - _containerClient.CreateIfNotExists(PublicAccessType.None); + 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"]; - // Load existing modules from Azure Blob Storage - LoadExistingModules(); + // 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(PublicAccessType.None); + _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. + } } /// diff --git a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj index f514a62..288a2b0 100644 --- a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -11,6 +11,7 @@ + diff --git a/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs index c94d99d..2d97845 100644 --- a/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/DownloadModuleUnauthorizedTests.cs @@ -1,6 +1,5 @@ using System.Net; using System.Net.Http.Headers; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -19,4 +18,4 @@ public async Task DownloadModule_InvalidAuthorization_ReturnsUnauthorized() 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 index 68e47ca..6c4d9fd 100644 --- a/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleUnauthorizedTests.cs @@ -1,6 +1,5 @@ using System.Net; using System.Net.Http.Headers; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -19,4 +18,4 @@ public async Task GetModule_InvalidAuthorization_ReturnsUnauthorized() 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 index f78dd77..7df54e7 100644 --- a/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/GetModuleVersionsUnauthorizedTests.cs @@ -1,6 +1,5 @@ using System.Net; using System.Net.Http.Headers; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -19,4 +18,4 @@ public async Task GetModuleVersions_InvalidAuthorization_ReturnsUnauthorized() 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 index 588b392..867e746 100644 --- a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs +++ b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs @@ -1,30 +1,25 @@ +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 System.Text; -using System.Threading; using Testcontainers.PostgreSql; -using DotNet.Testcontainers.Containers; -using DotNet.Testcontainers.Configurations; -using DotNet.Testcontainers.Builders; -using Xunit; using Xunit.Abstractions; using Xunit.Extensions.Logging; -using Microsoft.Extensions.DependencyInjection; namespace TerraformRegistry.Tests.IntegrationTests; // Base class for integration tests public abstract class IntegrationTestBase : IAsyncLifetime { - protected PostgreSqlContainer _postgresContainer = null!; - protected WebApplicationFactory _factory = null!; - protected HttpClient _client = null!; protected readonly ITestOutputHelper _output; + private readonly string _authToken; + protected HttpClient _client = null!; + protected WebApplicationFactory _factory = null!; protected XunitLoggerProvider _loggerProvider = null!; - private CancellationTokenSource _logMonitorCts = new(); - private string _authToken; + private readonly CancellationTokenSource _logMonitorCts = new(); + protected PostgreSqlContainer _postgresContainer = null!; protected IntegrationTestBase(ITestOutputHelper output, string authToken) { @@ -87,7 +82,8 @@ public virtual async Task InitializeAsync() try { await _postgresContainer.StartAsync(); - _output.WriteLine($"PostgreSQL container started successfully. Connection string: {_postgresContainer.GetConnectionString()}"); + _output.WriteLine( + $"PostgreSQL container started successfully. Connection string: {_postgresContainer.GetConnectionString()}"); // Optionally, start monitoring logs in the background // _ = MonitorContainerLogsAsync(); @@ -112,7 +108,6 @@ public virtual async Task DisposeAsync() _factory?.Dispose(); if (_postgresContainer != null) - { try { _output.WriteLine("Stopping PostgreSQL container..."); @@ -123,7 +118,6 @@ public virtual async Task DisposeAsync() { _output.WriteLine($"Error stopping PostgreSQL container: {ex.Message}"); } - } _loggerProvider?.Dispose(); } @@ -141,15 +135,9 @@ private async Task MonitorContainerLogsAsync() 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(stdout)) _output.WriteLine($"PostgreSQL Container Stdout: {stdout}"); - if (!string.IsNullOrEmpty(stderr)) - { - _output.WriteLine($"PostgreSQL Container Stderr: {stderr}"); - } + if (!string.IsNullOrEmpty(stderr)) _output.WriteLine($"PostgreSQL Container Stderr: {stderr}"); } catch (Exception ex) { @@ -174,8 +162,8 @@ private async Task MonitorContainerLogsAsync() // Custom stream class to redirect container output to test output public class OutputToTestConsoleStream : Stream { - private readonly ITestOutputHelper _output; private readonly StringBuilder _lineBuffer = new(); + private readonly ITestOutputHelper _output; public OutputToTestConsoleStream(ITestOutputHelper output) { @@ -186,9 +174,16 @@ public OutputToTestConsoleStream(ITestOutputHelper output) 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 long Position + { + get => 0; + set { } + } + + public override void Flush() + { + } public override int Read(byte[] buffer, int offset, int count) { @@ -207,11 +202,11 @@ public override void SetLength(long value) public override void Write(byte[] buffer, int offset, int count) { - string text = Encoding.UTF8.GetString(buffer, offset, count); + var text = Encoding.UTF8.GetString(buffer, offset, count); - for (int i = 0; i < text.Length; i++) + for (var i = 0; i < text.Length; i++) { - char c = text[i]; + var c = text[i]; if (c == '\n') { // End of line found, write to output @@ -223,6 +218,7 @@ public override void Write(byte[] buffer, int offset, int count) { // Ignore write errors during test cleanup } + _lineBuffer.Clear(); } else if (c != '\r') @@ -232,5 +228,4 @@ public override void Write(byte[] buffer, int offset, int count) } } } -} - +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs index 8d47431..4c2997e 100644 --- a/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/ListModulesUnauthorizedTests.cs @@ -1,6 +1,5 @@ using System.Net; using System.Net.Http.Headers; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -19,4 +18,4 @@ public async Task ListModules_InvalidAuthorization_ReturnsUnauthorized() 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 index 150a08d..02b81e6 100644 --- a/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/UploadAndListModulesTests.cs @@ -1,8 +1,5 @@ using System.Net; using System.Net.Http.Headers; -using System.Text.Json; -using System.Threading.Tasks; -using Xunit; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -36,6 +33,5 @@ public async Task ListModules_OutputsResponse() 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 index 8e1b60e..0098738 100644 --- a/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/UploadModuleTests.cs @@ -10,7 +10,7 @@ public class UploadModuleTests(ITestOutputHelper output) : IntegrationTestBase(o 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() { @@ -57,7 +57,7 @@ public async Task Upload_ValidModule_ReturnsOk() } /// - /// Gets the test project directory path + /// Gets the test project directory path /// private string GetProjectDirectory() { @@ -70,9 +70,7 @@ private string GetProjectDirectory() 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; } diff --git a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs index 7f06bb3..afa8cb6 100644 --- a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs @@ -1,6 +1,5 @@ using System.Net; using System.Text.Json; -using TerraformRegistry.Tests.IntegrationTests; using Xunit.Abstractions; namespace TerraformRegistry.Tests.IntegrationTests; @@ -34,7 +33,8 @@ public async Task WellKnown_Endpoint_Returns_Expected_Response() { modules = new { - service_discovery = jsonDoc.RootElement.GetProperty("modules").GetProperty("service-discovery").GetString(), + service_discovery = jsonDoc.RootElement.GetProperty("modules").GetProperty("service-discovery") + .GetString(), modules = jsonDoc.RootElement.GetProperty("modules").GetProperty("modules").GetString() } }; diff --git a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj index ace027a..d046a26 100644 --- a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj +++ b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj @@ -1,36 +1,38 @@  - - net9.0 - enable - enable - false - + + net9.0 + enable + enable + false + - - - - - - - - - + + + + + + + + + + - - - + + + - - - - - + + + + + + - - - PreserveNewest - - + + + PreserveNewest + + \ No newline at end of file diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs new file mode 100644 index 0000000..0d2be0f --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs @@ -0,0 +1,179 @@ +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..d2a2281 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs @@ -0,0 +1,90 @@ +using System.Threading.Tasks; +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; +using Xunit; + +namespace TerraformRegistry.Tests.UnitTests.AzureBlob; + +public class AzureBlobModuleServiceDelegationTests +{ + private readonly Mock _mockDatabaseService = new(); + private readonly Mock> _mockLogger = new(); + private readonly Mock _mockConfiguration = new(); + private readonly Mock _mockBlobServiceClient = new(); + private readonly Mock _mockContainerClient = new(); + private const string ContainerName = "test-container"; + + 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() => new( + _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 + { + 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); + } +} 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..4ef7939 --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs @@ -0,0 +1,206 @@ +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/EnvironmentVariablesTests.cs b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs new file mode 100644 index 0000000..3da0d1e --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.Extensions.Configuration; +using Xunit; + +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"]); + } + } +} diff --git a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs new file mode 100644 index 0000000..64e193f --- /dev/null +++ b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs @@ -0,0 +1,204 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; +using TerraformRegistry.Services; +using Xunit; + +namespace TerraformRegistry.Tests.UnitTests +{ + public class LocalModuleServiceTests + { + private readonly Mock _mockDbService; + private readonly Mock> _mockLogger; + private readonly IConfiguration _configuration; + 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 + { + 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) + => base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc); + } + } +} diff --git a/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs b/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs index 9c370ba..1fbc9f2 100644 --- a/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs +++ b/TerraformRegistry.Tests/Utilities/SemVerValidatorTests.cs @@ -49,9 +49,11 @@ public void IsValid_ReturnsExpectedResult(string? version, bool expected) [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) + 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); + 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); @@ -120,4 +122,4 @@ public void Compare_ReturnsExpectedResult(string version1, string version2, int? { Assert.Equal(expected, SemVerValidator.Compare(version1, version2)); } -} +} \ No newline at end of file diff --git a/TerraformRegistry.Tests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/WellKnownEndpointTests.cs deleted file mode 100644 index e69de29..0000000 diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index f9ba4c1..739d082 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -154,7 +154,6 @@ } app.UseMiddleware(authToken); -// Removed app.UseAuthorization(); if (enableSwagger) { From 84b91d3d42cc26bb0a9ee16af289c2d5ea8b3ef9 Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 15:28:45 +0100 Subject: [PATCH 09/29] Code coverage tests --- .github/workflows/test.yaml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 12123ba..cc839f9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -31,7 +31,19 @@ jobs: - name: Build solution run: dotnet build --no-restore --configuration Release - - name: Run tests - run: dotnet test TerraformRegistry.Tests/TerraformRegistry.Tests.csproj --no-build --configuration Release --logger "trx;LogFileName=test_results.trx" + - 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 From cd9fbee7fbced76c777336371529e4490823dfe6 Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 16:50:02 +0100 Subject: [PATCH 10/29] Add configurable port --- Dockerfile | 2 -- TerraformRegistry/Program.cs | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 50ec156..427f733 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,4 @@ COPY --from=publish /app/publish . RUN mkdir -p /app/modules # Create web directory and copy static files COPY TerraformRegistry/web /app/web -EXPOSE 80 -EXPOSE 443 ENTRYPOINT ["dotnet", "TerraformRegistry.dll"] \ No newline at end of file diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index 739d082..f24e561 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -161,6 +161,12 @@ app.UseSwaggerUi(); } +var port = builder.Configuration["PORT"] ?? builder.Configuration["Port"] ?? "80"; +if (!int.TryParse(port, out var portNumber)) +{ + throw new InvalidOperationException($"Invalid port specified: '{port}'. Please check your configuration."); +} + app.MapGet("/", async (HttpContext context) => { var indexPath = Path.Combine(webFolderPath, "index.html"); @@ -282,6 +288,6 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, context.Response.StatusCode = 404; }); -app.Run(); +app.Run($"http://0.0.0.0:{portNumber}"); public partial class Program; \ No newline at end of file From 3040510f03da670c1d85500e1a8c66501b8c59a0 Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 16:53:35 +0100 Subject: [PATCH 11/29] Update README.md and default port --- README.md | 65 ++++++++++++++---------------------- TerraformRegistry/Program.cs | 2 +- 2 files changed, 26 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 38d065e..cf5677b 100644 --- a/README.md +++ b/README.md @@ -27,16 +27,23 @@ A lightweight private Terraform Registry implementation currently focusing on su ### Environment Variables -The application can be configured using the following environment variables: - -| Environment Variable | Description | Default Value | Required | -| -------------------------------------------- | ------------------------------------- | ----------------------- | -------------------------------------- | -| `TF_REG_BaseUrl` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | -| `TF_REG_StorageProvider` | Storage provider (`local` or `azure`) | `local` | Yes | -| `TF_REG_ModuleStoragePath` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | -| `TF_REG_AzureStorage__ConnectionString` | Azure Storage connection string | Empty | Only when `StorageProvider` is `azure` | -| `TF_REG_AzureStorage__ContainerName` | Azure Storage container name | `modules` | Only when `StorageProvider` is `azure` | -| `TF_REG_AzureStorage__SasTokenExpiryMinutes` | Expiry time in minutes for SAS tokens | `5` | Only when `StorageProvider` is `azure` | +The application can be configured using the following environment variables (all must be prefixed with `TF_REG_`): + +| Environment Variable | Description | Default Value | Required | +| ------------------------------------- | ------------------------------------------------ | ----------------------- | ------------------------------------------ | +| `TF_REG_PORT` | Port the application listens on | `5131` | No | +| `TF_REG_BASEURL` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | +| `TF_REG_DATABASEPROVIDER` | Database provider (`postgres` or `inmemory`) | `inmemory` | No | +| `TF_REG_POSTGRESQL__CONNECTIONSTRING` | PostgreSQL connection string | Empty | Only when `DatabaseProvider` is `postgres` | +| `TF_REG_STORAGEPROVIDER` | Storage provider (`local` or `azure`) | `local` | Yes | +| `TF_REG_MODULESTORAGEPATH` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | +| `TF_REG_AZUREBLOB__CONNECTIONSTRING` | Azure Blob Storage connection string | Empty | Only when `StorageProvider` is `azure` | +| `TF_REG_AZUREBLOB__CONTAINERNAME` | Azure Blob Storage container name | `modules` | Only when `StorageProvider` is `azure` | +| `TF_REG_AUTHORIZATIONTOKEN` | Token required for API authentication | Empty | No | +| `TF_REG_ENABLESWAGGER` | Enable or disable Swagger UI (`true` or `false`) | `true` in dev | No | + +> **Note:** For nested configuration (like `PostgreSQL:ConnectionString`), use double underscores: +> `TF_REG_POSTGRESQL__CONNECTIONSTRING` ### Configuration Precedence @@ -45,19 +52,22 @@ Configuration values are loaded in the following order, with later values overri 1. Default values 2. Configuration in `appsettings.json` 3. Configuration in `appsettings.{Environment}.json` -4. Environment variables +4. Environment variables (with `TF_REG_` prefix) ### Docker Example ```bash docker run -p 5131:80 \ - -e TF_REG_BaseUrl=http://registry.example.com \ - -e TF_REG_StorageProvider=azure \ - -e TF_REG_AzureStorage__ConnectionString="DefaultEndpointsProtocol=https;AccountName=youraccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net" \ + -e TF_REG_PORT=80 \ + -e TF_REG_BASEURL=http://registry.example.com \ + -e TF_REG_STORAGEPROVIDER=azure \ + -e TF_REG_AZUREBLOB__CONNECTIONSTRING="DefaultEndpointsProtocol=https;AccountName=youraccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net" \ terraform-registry ``` -## Usage with Terraform +You can override the port mapping at runtime with Docker's `-p` flag, regardless of the `EXPOSE` instruction in the Dockerfile. + +### Usage with Terraform Configure Terraform to use this private registry: @@ -70,28 +80,3 @@ terraform { } } ``` - -## Development - -### Building and Running - -```bash -# Build the project -dotnet build - -# Run the project -dotnet run - -# Build for Release -dotnet publish -c Release -``` - -### Testing API Endpoints - -When running in development mode, navigate to `/swagger` for interactive API documentation. - -## Project Structure - -- `Handlers/` - Minimal API endpoint handlers -- `Models/` - Data models for the Terraform Registry -- `Services/` - Business logic services diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index f24e561..27703f4 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -161,7 +161,7 @@ app.UseSwaggerUi(); } -var port = builder.Configuration["PORT"] ?? builder.Configuration["Port"] ?? "80"; +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."); From 6609d27241e9c2e041796ac4d41e976d463894bf Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 17:06:55 +0100 Subject: [PATCH 12/29] Add missing Azure account name to README --- README.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index cf5677b..33573fa 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,20 @@ A lightweight private Terraform Registry implementation currently focusing on su The application can be configured using the following environment variables (all must be prefixed with `TF_REG_`): -| Environment Variable | Description | Default Value | Required | -| ------------------------------------- | ------------------------------------------------ | ----------------------- | ------------------------------------------ | -| `TF_REG_PORT` | Port the application listens on | `5131` | No | -| `TF_REG_BASEURL` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | -| `TF_REG_DATABASEPROVIDER` | Database provider (`postgres` or `inmemory`) | `inmemory` | No | -| `TF_REG_POSTGRESQL__CONNECTIONSTRING` | PostgreSQL connection string | Empty | Only when `DatabaseProvider` is `postgres` | -| `TF_REG_STORAGEPROVIDER` | Storage provider (`local` or `azure`) | `local` | Yes | -| `TF_REG_MODULESTORAGEPATH` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | -| `TF_REG_AZUREBLOB__CONNECTIONSTRING` | Azure Blob Storage connection string | Empty | Only when `StorageProvider` is `azure` | -| `TF_REG_AZUREBLOB__CONTAINERNAME` | Azure Blob Storage container name | `modules` | Only when `StorageProvider` is `azure` | -| `TF_REG_AUTHORIZATIONTOKEN` | Token required for API authentication | Empty | No | -| `TF_REG_ENABLESWAGGER` | Enable or disable Swagger UI (`true` or `false`) | `true` in dev | No | +| Environment Variable | Description | Default Value | Required | +| -------------------------------------------- | ------------------------------------------------- | ----------------------- | ------------------------------------------ | +| `TF_REG_PORT` | Port the application listens on | `5131` | No | +| `TF_REG_BASEURL` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | +| `TF_REG_DATABASEPROVIDER` | Database provider (`postgres` or `inmemory`) | `inmemory` | No | +| `TF_REG_POSTGRESQL__CONNECTIONSTRING` | PostgreSQL connection string | Empty | Only when `DatabaseProvider` is `postgres` | +| `TF_REG_STORAGEPROVIDER` | Storage provider (`local` or `azure`) | `local` | Yes | +| `TF_REG_MODULESTORAGEPATH` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | +| `TF_REG_AZUREBLOB__CONNECTIONSTRING` | Azure Blob Storage connection string | Empty | Only when `StorageProvider` is `azure` | +| `TF_REG_AZUREBLOB__CONTAINERNAME` | Azure Blob Storage container name | `modules` | Only when `StorageProvider` is `azure` | +| `TF_REG_AZURESTORAGE__ACCOUNTNAME` | Azure Storage account name (for Managed Identity) | Empty | Only when using Managed Identity | +| `TF_REG_AZURESTORAGE__SASTOKENEXPIRYMINUTES` | SAS token expiry in minutes | `5` | No | +| `TF_REG_AUTHORIZATIONTOKEN` | Token required for API authentication | Empty | No | +| `TF_REG_ENABLESWAGGER` | Enable or disable Swagger UI (`true` or `false`) | `true` in dev | No | > **Note:** For nested configuration (like `PostgreSQL:ConnectionString`), use double underscores: > `TF_REG_POSTGRESQL__CONNECTIONSTRING` @@ -62,6 +64,8 @@ docker run -p 5131:80 \ -e TF_REG_BASEURL=http://registry.example.com \ -e TF_REG_STORAGEPROVIDER=azure \ -e TF_REG_AZUREBLOB__CONNECTIONSTRING="DefaultEndpointsProtocol=https;AccountName=youraccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net" \ + -e TF_REG_AZUREBLOB__CONTAINERNAME=modules \ + -e TF_REG_AZURESTORAGE__ACCOUNTNAME=youraccountname \ terraform-registry ``` From 618661d1f074559c52b5f57a3b7d5ac004bdcbfd Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 10 May 2025 17:14:32 +0100 Subject: [PATCH 13/29] Run release only on code changes --- .github/workflows/release.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fcf4945..f190c24 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,10 +9,14 @@ on: - "hotfix/**" tags: - "v*.*.*" + paths: + - "TerraformRegistry**/**" pull_request: branches: - main - develop + paths: + - "TerraformRegistry**/**" workflow_dispatch: inputs: use_postgresql: From fd23b77c994dfea54dc5f1a5265e4b38b64099ec Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 22 May 2025 00:32:01 +0100 Subject: [PATCH 14/29] Project cleanup --- .../Interfaces/IDatabaseService.cs | 18 +- .../Interfaces/IInitializableDb.cs | 4 +- .../Interfaces/IModuleService.cs | 19 +- TerraformRegistry.API/ModuleService.cs | 37 +- .../TerraformRegistry.API.csproj | 16 +- .../Utilities/SemVerValidator.cs | 38 +- .../AzureBlobModuleService.cs | 105 +++--- .../TerraformRegistry.AzureBlob.csproj | 28 +- TerraformRegistry.Models/Module.cs | 48 +-- TerraformRegistry.Models/ModuleList.cs | 12 +- TerraformRegistry.Models/ModuleListItem.cs | 39 +- TerraformRegistry.Models/ModuleMetadata.cs | 8 +- .../ModuleSearchRequest.cs | 21 +- TerraformRegistry.Models/ModuleStorage.cs | 2 +- TerraformRegistry.Models/ModuleSubmodule.cs | 12 +- TerraformRegistry.Models/ModuleVersions.cs | 9 +- TerraformRegistry.Models/ServiceDiscovery.cs | 6 +- .../TerraformRegistry.Models.csproj | 10 +- .../Migrations/IDatabaseMigration.cs | 12 +- .../Migrations/MigrationManager.cs | 52 ++- .../PostgreSQLDatabaseService.cs | 116 +++--- .../TerraformRegistry.PostgreSQL.csproj | 22 +- .../IntegrationTests/IntegrationTestBase.cs | 4 +- .../AzureBlobModuleServiceConstructorTests.cs | 17 +- .../AzureBlobModuleServiceDelegationTests.cs | 30 +- .../AzureBlobModuleServiceUploadTests.cs | 1 + .../UnitTests/EnvironmentVariablesTests.cs | 59 ++- .../UnitTests/LocalModuleServiceTests.cs | 353 +++++++++--------- TerraformRegistry/Handlers/ModuleHandlers.cs | 67 ++-- .../Handlers/ServiceDiscoveryHandlers.cs | 8 +- TerraformRegistry/JsonSerializerContext.cs | 7 +- .../Middleware/AuthenticationMiddleware.cs | 50 ++- .../Models/StringArrayWrapper.cs | 10 +- TerraformRegistry/Program.cs | 57 ++- .../DatabaseInitializerHostedService.cs | 37 +- .../Services/InMemoryDatabaseService.cs | 53 +-- .../Services/LocalModuleService.cs | 157 ++++---- TerraformRegistry/TerraformRegistry.csproj | 82 ++-- TerraformRegistry/web/index.html | 7 +- 39 files changed, 759 insertions(+), 874 deletions(-) diff --git a/TerraformRegistry.API/Interfaces/IDatabaseService.cs b/TerraformRegistry.API/Interfaces/IDatabaseService.cs index 482098c..3ffaa21 100644 --- a/TerraformRegistry.API/Interfaces/IDatabaseService.cs +++ b/TerraformRegistry.API/Interfaces/IDatabaseService.cs @@ -1,39 +1,39 @@ -namespace TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; -using Models; +namespace TerraformRegistry.API.Interfaces; /// -/// Interface for database services that store module metadata +/// Interface for database services that store module metadata /// public interface IDatabaseService { /// - /// Lists all modules based on search criteria + /// Lists all modules based on search criteria /// Task ListModulesAsync(ModuleSearchRequest request); /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// Task GetModuleAsync(string @namespace, string name, string provider, string version); /// - /// Gets all versions of a specific module + /// 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 + /// 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 + /// Adds a new module to the database /// Task AddModuleAsync(ModuleStorage module); /// - /// Removes a module from the database + /// Removes a module from the database /// Task RemoveModuleAsync(ModuleStorage module); } \ No newline at end of file diff --git a/TerraformRegistry.API/Interfaces/IInitializableDb.cs b/TerraformRegistry.API/Interfaces/IInitializableDb.cs index ab3ff58..f320625 100644 --- a/TerraformRegistry.API/Interfaces/IInitializableDb.cs +++ b/TerraformRegistry.API/Interfaces/IInitializableDb.cs @@ -1,9 +1,9 @@ namespace TerraformRegistry.API.Interfaces; /// -/// Interface for services that can be explicitly initialized at startup. +/// 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 index 0f75e5e..997b243 100644 --- a/TerraformRegistry.API/Interfaces/IModuleService.cs +++ b/TerraformRegistry.API/Interfaces/IModuleService.cs @@ -1,34 +1,35 @@ -namespace TerraformRegistry.API.Interfaces; +using TerraformRegistry.Models; -using Models; +namespace TerraformRegistry.API.Interfaces; /// -/// Interface for module operations in the Terraform Registry +/// Interface for module operations in the Terraform Registry /// public interface IModuleService { /// - /// Lists all modules + /// Lists all modules /// Task ListModulesAsync(ModuleSearchRequest request); /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// Task GetModuleAsync(string @namespace, string name, string provider, string version); /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// Task GetModuleVersionsAsync(string @namespace, string name, string provider); /// - /// Gets the download path for a specific module version + /// Gets the download path for a specific module version /// Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, string version); /// - /// Uploads a new module + /// Uploads a new module /// - Task UploadModuleAsync(string @namespace, string name, string provider, string version, Stream moduleContent, string description); + Task UploadModuleAsync(string @namespace, string name, string provider, string version, Stream moduleContent, + string description); } \ No newline at end of file diff --git a/TerraformRegistry.API/ModuleService.cs b/TerraformRegistry.API/ModuleService.cs index a2a3576..9d77e23 100644 --- a/TerraformRegistry.API/ModuleService.cs +++ b/TerraformRegistry.API/ModuleService.cs @@ -1,51 +1,54 @@ -namespace TerraformRegistry.API; +using TerraformRegistry.API.Interfaces; +using TerraformRegistry.API.Utilities; +using TerraformRegistry.Models; -using Interfaces; -using Models; -using Utilities; +namespace TerraformRegistry.API; /// -/// Abstract base class for module services that implements SemVer validation +/// Abstract base class for module services that implements SemVer validation /// public abstract class ModuleService : IModuleService { /// - /// Lists all modules + /// Lists all modules /// public abstract Task ListModulesAsync(ModuleSearchRequest request); /// - /// Gets detailed information about a specific module + /// 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 + /// 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 + /// Gets the download path for a specific module version /// - public abstract Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, string version); + public abstract Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, + string version); /// - /// Uploads a new module with SemVer validation + /// Uploads a new module with SemVer validation /// - public async Task UploadModuleAsync(string @namespace, string name, string provider, string version, Stream moduleContent, string description) + public async Task UploadModuleAsync(string @namespace, string name, string provider, string version, + Stream moduleContent, string description) { // 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)); - } + 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); } /// - /// Implementation-specific method to upload a module after validation + /// 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); + protected abstract Task UploadModuleAsyncImpl(string @namespace, string name, string provider, string version, + Stream moduleContent, string description); } \ No newline at end of file diff --git a/TerraformRegistry.API/TerraformRegistry.API.csproj b/TerraformRegistry.API/TerraformRegistry.API.csproj index b111f1b..3cbb7af 100644 --- a/TerraformRegistry.API/TerraformRegistry.API.csproj +++ b/TerraformRegistry.API/TerraformRegistry.API.csproj @@ -1,13 +1,13 @@  - - - + + + - - net9.0 - enable - enable - + + net9.0 + enable + enable + diff --git a/TerraformRegistry.API/Utilities/SemVerValidator.cs b/TerraformRegistry.API/Utilities/SemVerValidator.cs index 16833e6..02835dc 100644 --- a/TerraformRegistry.API/Utilities/SemVerValidator.cs +++ b/TerraformRegistry.API/Utilities/SemVerValidator.cs @@ -1,10 +1,10 @@ -namespace TerraformRegistry.API.Utilities; - 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/ +/// Provides validation and parsing for Semantic Versioning 2.0.0. +/// For full specification, see: https://semver.org/ /// public static class SemVerValidator { @@ -15,7 +15,7 @@ public static class SemVerValidator RegexOptions.Compiled); /// - /// Determines whether the specified version string is a valid SemVer 2.0.0. + /// 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. @@ -28,7 +28,7 @@ public static bool IsValid(string version) } /// - /// Attempts to parse a version string into its semantic version components. + /// 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. @@ -64,24 +64,22 @@ public static bool TryParse(string version, out int major, out int minor, out in } /// - /// Compares two semantic version strings. + /// 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. + /// 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); @@ -114,28 +112,20 @@ private static int ComparePrerelease(string prerelease1, string prerelease2) var id1 = identifiers1[i]; var id2 = identifiers2[i]; - bool isNum1 = int.TryParse(id1, out var num1); - bool isNum2 = int.TryParse(id2, out var num2); + 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; diff --git a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs index 89503bb..dd465e4 100644 --- a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -1,12 +1,6 @@ -namespace TerraformRegistry.AzureBlob; - -using System.Collections.Concurrent; -using System.IO.Compression; -using System.Text.Json; -using Azure.Identity; // Added for Managed Identity +using Azure.Identity; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; -using Azure.Storage.Blobs.Specialized; using Azure.Storage.Sas; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; @@ -15,16 +9,20 @@ namespace TerraformRegistry.AzureBlob; using TerraformRegistry.API.Utilities; using TerraformRegistry.Models; +namespace TerraformRegistry.AzureBlob; + +// Added for Managed Identity + /// -/// Implementation of a module service using Azure Blob Storage +/// Implementation of a module service using Azure Blob Storage /// public class AzureBlobModuleService : ModuleService { - private readonly IDatabaseService _databaseService; private readonly BlobContainerClient _containerClient; private readonly string _containerName; - private readonly int _sasTokenExpiryMinutes; + private readonly IDatabaseService _databaseService; private readonly ILogger _logger; + private readonly int _sasTokenExpiryMinutes; public AzureBlobModuleService( IConfiguration configuration, @@ -37,12 +35,15 @@ public AzureBlobModuleService( // Get Azure Storage configuration values _containerName = configuration["AzureStorage:ContainerName"] - ?? throw new ArgumentNullException("AzureStorage:ContainerName", "Azure Storage container name is required."); - + ?? 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); + _logger.LogWarning( + "AzureStorage:SasTokenExpiryMinutes must be a positive integer, but was configured as {ConfiguredValue}. Defaulting to 5 minutes.", + _sasTokenExpiryMinutes); _sasTokenExpiryMinutes = 5; } @@ -65,11 +66,15 @@ public AzureBlobModuleService( { if (string.IsNullOrEmpty(accountName)) { - const string errorMessage = "Azure Storage AccountName ('AzureStorage:AccountName') is required when connection string is not provided (for Managed Identity)."; + 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); + + _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()); @@ -88,18 +93,20 @@ public AzureBlobModuleService( try { _logger.LogInformation("Ensuring blob container '{ContainerName}' exists...", _containerName); - _containerClient.CreateIfNotExists(PublicAccessType.None); + _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); + _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 + /// Lists all modules based on search criteria /// public override Task ListModulesAsync(ModuleSearchRequest request) { @@ -107,7 +114,7 @@ public override Task ListModulesAsync(ModuleSearchRequest request) } /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// public override Task GetModuleAsync(string @namespace, string name, string provider, string version) { @@ -115,7 +122,7 @@ public override Task ListModulesAsync(ModuleSearchRequest request) } /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// public override Task GetModuleVersionsAsync(string @namespace, string name, string provider) { @@ -123,9 +130,10 @@ public override Task GetModuleVersionsAsync(string @namespace, s } /// - /// Gets the download URL for a specific module version using SAS token + /// 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) + 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); @@ -146,7 +154,8 @@ public override Task GetModuleVersionsAsync(string @namespace, s 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}"); + _logger.LogWarning( + $"Module {@namespace}/{name}/{provider}/{version} exists in database but blob not found at {blobPath}"); return null; } @@ -175,17 +184,17 @@ public override Task GetModuleVersionsAsync(string @namespace, s } /// - /// Implementation-specific method to upload a module after validation + /// 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. + /// 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) + protected override async Task UploadModuleAsyncImpl(string @namespace, string name, string provider, + string version, Stream moduleContent, string description) { // Create a consistent blob path format for easy retrieval var blobPath = $"{@namespace}/{name}-{provider}-{version}.zip"; @@ -235,7 +244,8 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str { // 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"); + _logger.LogError( + $"Failed to add module {@namespace}/{name}/{provider}/{version} to database, cleaned up blob storage"); } return result; @@ -248,10 +258,7 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str // Try to clean up the blob if an error occurred try { - if (await blobClient.ExistsAsync()) - { - await blobClient.DeleteAsync(); - } + if (await blobClient.ExistsAsync()) await blobClient.DeleteAsync(); } catch { @@ -263,24 +270,23 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str } /// - /// Scans the blob container and loads existing modules into memory + /// 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 + /// 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..."); - int syncCount = 0; + var syncCount = 0; // List all blobs in the container await foreach (var blobItem in _containerClient.GetBlobsAsync()) - { try { // Get the blob client @@ -301,7 +307,6 @@ private async void LoadExistingModules() 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 { @@ -310,11 +315,10 @@ private async void LoadExistingModules() Provider = provider, Version = version, Description = description, - FilePath = blobItem.Name, // Store reference to blob location + 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 @@ -347,7 +351,7 @@ private async void LoadExistingModules() Provider = provider, Version = version, Description = $"Module {name} for {provider} (auto-recovered)", - FilePath = blobItem.Name, // Store reference to blob location + FilePath = blobItem.Name, // Store reference to blob location PublishedAt = properties.Value.LastModified.DateTime, Dependencies = new List() // Simplified, no dependencies }; @@ -366,7 +370,8 @@ private async void LoadExistingModules() if (result) { syncCount++; - _logger.LogInformation($"Synchronized module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} from blob storage to database"); + _logger.LogInformation( + $"Synchronized module {module.Namespace}/{module.Name}/{module.Provider}/{module.Version} from blob storage to database"); } } } @@ -376,9 +381,9 @@ private async void LoadExistingModules() // 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."); + _logger.LogInformation( + $"Synchronization complete. Added {syncCount} modules from Azure Blob Storage to the database."); } catch (Exception ex) { diff --git a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj index 288a2b0..cbfe9a4 100644 --- a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -1,20 +1,20 @@  - - - + + + - - net9.0 - enable - enable - + + net9.0 + enable + enable + - - - - - - + + + + + + \ No newline at end of file diff --git a/TerraformRegistry.Models/Module.cs b/TerraformRegistry.Models/Module.cs index f6eacd7..1b6a763 100644 --- a/TerraformRegistry.Models/Module.cs +++ b/TerraformRegistry.Models/Module.cs @@ -1,51 +1,37 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a module with detailed information +/// Represents a module with detailed information /// public class Module { - [JsonPropertyName("id")] - public required string Id { get; set; } + [JsonPropertyName("id")] public required string Id { get; set; } - [JsonPropertyName("owner")] - public required string Owner { get; set; } + [JsonPropertyName("owner")] public required string Owner { get; set; } - [JsonPropertyName("namespace")] - public required string Namespace { get; set; } + [JsonPropertyName("namespace")] public required string Namespace { get; set; } - [JsonPropertyName("name")] - public required string Name { get; set; } + [JsonPropertyName("name")] public required string Name { get; set; } - [JsonPropertyName("version")] - public required string Version { get; set; } + [JsonPropertyName("version")] public required string Version { get; set; } - [JsonPropertyName("provider")] - public required string Provider { get; set; } + [JsonPropertyName("provider")] public required string Provider { get; set; } - [JsonPropertyName("description")] - public string? Description { get; set; } + [JsonPropertyName("description")] public string? Description { get; set; } - [JsonPropertyName("source")] - public string? Source { get; set; } + [JsonPropertyName("source")] public string? Source { get; set; } - [JsonPropertyName("published_at")] - public required string PublishedAt { get; set; } + [JsonPropertyName("published_at")] public required string PublishedAt { get; set; } - [JsonPropertyName("versions")] - public required List Versions { get; set; } + [JsonPropertyName("versions")] public required List Versions { get; set; } - [JsonPropertyName("root")] - public required string Root { get; set; } + [JsonPropertyName("root")] public required string Root { get; set; } - [JsonPropertyName("submodules")] - public required List Submodules { get; set; } + [JsonPropertyName("submodules")] public required List Submodules { get; set; } - [JsonPropertyName("providers")] - public required Dictionary Providers { get; set; } + [JsonPropertyName("providers")] public required Dictionary Providers { get; set; } - [JsonPropertyName("download_url")] - public string? DownloadUrl { 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 index fd985ed..c527bf2 100644 --- a/TerraformRegistry.Models/ModuleList.cs +++ b/TerraformRegistry.Models/ModuleList.cs @@ -1,15 +1,13 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a response for module listing +/// Represents a response for module listing /// public class ModuleList { - [JsonPropertyName("modules")] - public required List Modules { get; set; } + [JsonPropertyName("modules")] public required List Modules { get; set; } - [JsonPropertyName("meta")] - public required Dictionary Meta { 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 index 39747a7..ab41cb7 100644 --- a/TerraformRegistry.Models/ModuleListItem.cs +++ b/TerraformRegistry.Models/ModuleListItem.cs @@ -1,42 +1,31 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a single module in a listing +/// Represents a single module in a listing /// public class ModuleListItem { - [JsonPropertyName("id")] - public required string Id { get; set; } + [JsonPropertyName("id")] public required string Id { get; set; } - [JsonPropertyName("owner")] - public required string Owner { get; set; } + [JsonPropertyName("owner")] public required string Owner { get; set; } - [JsonPropertyName("namespace")] - public required string Namespace { get; set; } + [JsonPropertyName("namespace")] public required string Namespace { get; set; } - [JsonPropertyName("name")] - public required string Name { get; set; } + [JsonPropertyName("name")] public required string Name { get; set; } - [JsonPropertyName("version")] - public required string Version { get; set; } + [JsonPropertyName("version")] public required string Version { get; set; } - [JsonPropertyName("provider")] - public required string Provider { get; set; } + [JsonPropertyName("provider")] public required string Provider { get; set; } - [JsonPropertyName("description")] - public string? Description { get; set; } + [JsonPropertyName("description")] public string? Description { get; set; } - [JsonPropertyName("source")] - public string? Source { get; set; } + [JsonPropertyName("source")] public string? Source { get; set; } - [JsonPropertyName("published_at")] - public required string PublishedAt { get; set; } + [JsonPropertyName("published_at")] public required string PublishedAt { get; set; } - [JsonPropertyName("versions")] - public required List Versions { get; set; } + [JsonPropertyName("versions")] public required List Versions { get; set; } - [JsonPropertyName("download_url")] - public required string DownloadUrl { 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 index ceaa8b8..fab98c4 100644 --- a/TerraformRegistry.Models/ModuleMetadata.cs +++ b/TerraformRegistry.Models/ModuleMetadata.cs @@ -1,17 +1,17 @@ namespace TerraformRegistry.Models; /// -/// Represents metadata for a Terraform module +/// Represents metadata for a Terraform module /// public class ModuleMetadata { /// - /// Description of the module + /// Description of the module /// public string? Description { get; set; } /// - /// Additional properties for module metadata + /// 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 index 98ce8f9..97f6957 100644 --- a/TerraformRegistry.Models/ModuleSearchRequest.cs +++ b/TerraformRegistry.Models/ModuleSearchRequest.cs @@ -1,24 +1,19 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a request to search for modules +/// Represents a request to search for modules /// public class ModuleSearchRequest { - [JsonPropertyName("q")] - public string? Q { get; set; } + [JsonPropertyName("q")] public string? Q { get; set; } - [JsonPropertyName("namespace")] - public string? Namespace { get; set; } + [JsonPropertyName("namespace")] public string? Namespace { get; set; } - [JsonPropertyName("provider")] - public string? Provider { get; set; } + [JsonPropertyName("provider")] public string? Provider { get; set; } - [JsonPropertyName("offset")] - public int Offset { get; set; } = 0; + [JsonPropertyName("offset")] public int Offset { get; set; } = 0; - [JsonPropertyName("limit")] - public int Limit { get; set; } = 10; + [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 index 355f004..0a75384 100644 --- a/TerraformRegistry.Models/ModuleStorage.cs +++ b/TerraformRegistry.Models/ModuleStorage.cs @@ -1,7 +1,7 @@ namespace TerraformRegistry.Models; /// -/// Represents a module storage model for internal use +/// Represents a module storage model for internal use /// public class ModuleStorage { diff --git a/TerraformRegistry.Models/ModuleSubmodule.cs b/TerraformRegistry.Models/ModuleSubmodule.cs index e18be2d..6b1533d 100644 --- a/TerraformRegistry.Models/ModuleSubmodule.cs +++ b/TerraformRegistry.Models/ModuleSubmodule.cs @@ -1,15 +1,13 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a submodule within a module +/// Represents a submodule within a module /// public class ModuleSubmodule { - [JsonPropertyName("path")] - public required string Path { get; set; } + [JsonPropertyName("path")] public required string Path { get; set; } - [JsonPropertyName("providers")] - public required Dictionary Providers { 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 index d8866b9..61eadca 100644 --- a/TerraformRegistry.Models/ModuleVersions.cs +++ b/TerraformRegistry.Models/ModuleVersions.cs @@ -1,12 +1,11 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a response for module versions +/// Represents a response for module versions /// public class ModuleVersions { - [JsonPropertyName("versions")] - public required List Versions { get; set; } + [JsonPropertyName("versions")] public required List Versions { get; set; } } \ No newline at end of file diff --git a/TerraformRegistry.Models/ServiceDiscovery.cs b/TerraformRegistry.Models/ServiceDiscovery.cs index f99c4de..3c959ba 100644 --- a/TerraformRegistry.Models/ServiceDiscovery.cs +++ b/TerraformRegistry.Models/ServiceDiscovery.cs @@ -1,9 +1,9 @@ -namespace TerraformRegistry.Models; - using System.Text.Json.Serialization; +namespace TerraformRegistry.Models; + /// -/// Represents a service discovery response for Terraform Registry +/// Represents a service discovery response for Terraform Registry /// public class ServiceDiscovery { diff --git a/TerraformRegistry.Models/TerraformRegistry.Models.csproj b/TerraformRegistry.Models/TerraformRegistry.Models.csproj index 125f4c9..17b910f 100644 --- a/TerraformRegistry.Models/TerraformRegistry.Models.csproj +++ b/TerraformRegistry.Models/TerraformRegistry.Models.csproj @@ -1,9 +1,9 @@  - - net9.0 - enable - enable - + + net9.0 + enable + enable + diff --git a/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs index b8ebe6b..9b2c506 100644 --- a/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs +++ b/TerraformRegistry.PostgreSQL/Migrations/IDatabaseMigration.cs @@ -1,24 +1,24 @@ -namespace TerraformRegistry.PostgreSQL.Migrations; - using Npgsql; +namespace TerraformRegistry.PostgreSQL.Migrations; + /// -/// Interface for database migrations +/// Interface for database migrations /// public interface IDatabaseMigration { /// - /// Gets the migration version in SemVer format (e.g. 1.0.0) + /// Gets the migration version in SemVer format (e.g. 1.0.0) /// string Version { get; } /// - /// Gets a description of what this migration does + /// Gets a description of what this migration does /// string Description { get; } /// - /// Applies the migration to the database + /// 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 index 4470686..dd54030 100644 --- a/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs +++ b/TerraformRegistry.PostgreSQL/Migrations/MigrationManager.cs @@ -1,22 +1,20 @@ -namespace TerraformRegistry.PostgreSQL.Migrations; - -using System.Data; using System.Reflection; -using System.Text.Json; using Microsoft.Extensions.Logging; using Npgsql; +namespace TerraformRegistry.PostgreSQL.Migrations; + /// -/// Manages database migrations +/// Manages database migrations /// public class MigrationManager { - private readonly List _migrations = new List(); private const string SchemaVersionTable = "schema_version"; private readonly ILogger _logger; + private readonly List _migrations = new(); /// - /// Initializes a new instance of the MigrationManager class + /// Initializes a new instance of the MigrationManager class /// public MigrationManager(ILogger logger) { @@ -26,7 +24,7 @@ public MigrationManager(ILogger logger) } /// - /// Uses reflection to find all classes that implement IDatabaseMigration + /// Uses reflection to find all classes that implement IDatabaseMigration /// private void DiscoverMigrations() { @@ -38,20 +36,16 @@ private void DiscoverMigrations() .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) + /// Compares two version strings (SemVer format) /// private int CompareVersions(string versionA, string versionB) { @@ -71,9 +65,10 @@ private int CompareVersions(string versionA, string versionB) } /// - /// Checks if the database needs initialization by looking for a version table + /// Checks if the database needs initialization by looking for a version table /// - public async Task NeedsInitializationAsync(NpgsqlConnection connection, CancellationToken cancellationToken = default) + public async Task NeedsInitializationAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) { try { @@ -88,10 +83,7 @@ SELECT FROM information_schema.tables 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) - } + if (!tableExists) return true; // Database needs initialization (table doesn't exist) // Check if there are any migrations to run return await HasPendingMigrationsAsync(connection, cancellationToken); @@ -104,9 +96,10 @@ SELECT FROM information_schema.tables } /// - /// Checks if there are any pending migrations that need to be applied + /// Checks if there are any pending migrations that need to be applied /// - private async Task HasPendingMigrationsAsync(NpgsqlConnection connection, CancellationToken cancellationToken = default) + private async Task HasPendingMigrationsAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) { // Get the current database schema version var currentVersion = await GetCurrentVersionAsync(connection, cancellationToken); @@ -116,9 +109,10 @@ private async Task HasPendingMigrationsAsync(NpgsqlConnection connection, } /// - /// Gets the current version of the database schema + /// Gets the current version of the database schema /// - private async Task GetCurrentVersionAsync(NpgsqlConnection connection, CancellationToken cancellationToken = default) + private async Task GetCurrentVersionAsync(NpgsqlConnection connection, + CancellationToken cancellationToken = default) { try { @@ -135,7 +129,7 @@ private async Task GetCurrentVersionAsync(NpgsqlConnection connection, C } /// - /// Initializes the database schema and applies all pending migrations + /// Initializes the database schema and applies all pending migrations /// public async Task InitializeDatabaseAsync(NpgsqlConnection connection, NpgsqlTransaction transaction) { @@ -158,15 +152,14 @@ description TEXT // 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 + /// Applies a single migration and records its version /// - private async Task ApplyMigrationAsync(NpgsqlConnection connection, NpgsqlTransaction transaction, IDatabaseMigration migration) + private async Task ApplyMigrationAsync(NpgsqlConnection connection, NpgsqlTransaction transaction, + IDatabaseMigration migration) { try { @@ -183,7 +176,8 @@ private async Task ApplyMigrationAsync(NpgsqlConnection connection, NpgsqlTransa versionCommand.Parameters.AddWithValue("@description", migration.Description); await versionCommand.ExecuteNonQueryAsync(); - _logger.LogInformation("Applied database migration to version {Version}: {Description}", migration.Version, migration.Description); + _logger.LogInformation("Applied database migration to version {Version}: {Description}", migration.Version, + migration.Description); } catch (Exception ex) { diff --git a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs index 6f09d16..67527f4 100644 --- a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -1,6 +1,7 @@ using System.Text.Json; using Microsoft.Extensions.Logging; using Npgsql; +using NpgsqlTypes; using TerraformRegistry.API.Interfaces; using TerraformRegistry.Models; using TerraformRegistry.PostgreSQL.Migrations; @@ -8,16 +9,17 @@ namespace TerraformRegistry.PostgreSQL; /// -/// Implementation of a database service using PostgreSQL +/// Implementation of a database service using PostgreSQL /// public class PostgreSqlDatabaseService : IDatabaseService, IInitializableDb { - private readonly string _connectionString; private readonly string _baseUrl; - private readonly MigrationManager _migrationManager; + private readonly string _connectionString; private readonly ILogger _logger; + private readonly MigrationManager _migrationManager; - public PostgreSqlDatabaseService(string connectionString, string baseUrl, ILogger logger, MigrationManager migrationManager) + public PostgreSqlDatabaseService(string connectionString, string baseUrl, ILogger logger, + MigrationManager migrationManager) { _connectionString = connectionString; _baseUrl = baseUrl; @@ -25,36 +27,8 @@ public PostgreSqlDatabaseService(string connectionString, string baseUrl, ILogge _logger = logger; } - 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; - } - } - } - /// - /// Lists all modules based on search criteria + /// Lists all modules based on search criteria /// public async Task ListModulesAsync(ModuleSearchRequest request) { @@ -172,7 +146,7 @@ latest_versions lv ON } /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// public async Task GetModuleAsync(string @namespace, string name, string provider, string version) { @@ -217,10 +191,8 @@ namespace = @namespace AND await using var reader = await command.ExecuteReaderAsync(); if (!await reader.ReadAsync()) - { // No matching module found return null; - } // Dependencies are stored as a JSON array in PostgreSQL var dependenciesJson = reader.GetString(7); @@ -251,7 +223,7 @@ namespace = @namespace AND } /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// public async Task GetModuleVersionsAsync(string @namespace, string name, string provider) { @@ -277,10 +249,7 @@ ORDER BY var versions = new List(); await using var reader = await command.ExecuteReaderAsync(); - while (await reader.ReadAsync()) - { - versions.Add(reader.GetString(0)); - } + while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); // Return the updated ModuleVersions structure return new ModuleVersions @@ -290,14 +259,15 @@ ORDER BY } /// - /// Gets the storage path information for a specific module version + /// Gets the storage path information for a specific module version /// /// - /// This method retrieves the storage metadata that connects a module's metadata in the database - /// with its physical file location in blob storage. The FilePath property is particularly important - /// as it's used by the blob storage service to locate and retrieve the actual module file. + /// This method retrieves the storage metadata that connects a module's metadata in the database + /// with its physical file location in blob storage. The FilePath property is particularly important + /// as it's used by the blob storage service to locate and retrieve the actual module file. /// - public async Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) + public async Task GetModuleStorageAsync(string @namespace, string name, string provider, + string version) { var sql = @" SELECT @@ -328,10 +298,8 @@ namespace = @namespace AND await using var reader = await command.ExecuteReaderAsync(); if (!await reader.ReadAsync()) - { // No matching module found return null; - } // Dependencies are stored as a JSON array in PostgreSQL var dependenciesJson = reader.GetString(7); @@ -344,19 +312,19 @@ namespace = @namespace AND Provider = reader.GetString(2), Version = reader.GetString(3), Description = reader.GetString(4), - FilePath = reader.GetString(5), // Critical field that maps to blob storage + FilePath = reader.GetString(5), // Critical field that maps to blob storage PublishedAt = reader.GetDateTime(6), Dependencies = dependencies }; } /// - /// Adds a new module to the database + /// Adds a new module to the database /// /// - /// This method stores module metadata in the database, including a reference to the blob storage path - /// where the actual module file is stored. The storage_path column creates the link between database - /// records and physical files in the blob storage. + /// This method stores module metadata in the database, including a reference to the blob storage path + /// where the actual module file is stored. The storage_path column creates the link between database + /// records and physical files in the blob storage. /// public async Task AddModuleAsync(ModuleStorage module) { @@ -399,9 +367,11 @@ DO UPDATE SET command.Parameters.AddWithValue("@provider", module.Provider); command.Parameters.AddWithValue("@version", module.Version); command.Parameters.AddWithValue("@description", module.Description); - command.Parameters.AddWithValue("@storagePath", module.FilePath); // Link to blob storage path + command.Parameters.AddWithValue("@storagePath", module.FilePath); // Link to blob storage path command.Parameters.AddWithValue("@publishedAt", module.PublishedAt); - command.Parameters.AddWithValue("@dependencies", module.Dependencies == null ? "[]" : JsonSerializer.Serialize(module.Dependencies)).NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Jsonb; + command.Parameters.AddWithValue("@dependencies", + module.Dependencies == null ? "[]" : JsonSerializer.Serialize(module.Dependencies)).NpgsqlDbType = + NpgsqlDbType.Jsonb; // Execute and get the ID of the inserted/updated row var result = await command.ExecuteScalarAsync(); @@ -410,13 +380,14 @@ DO UPDATE SET } catch (Exception ex) { - _logger.LogError(ex, "Error adding module {Namespace}/{Name}/{Provider}/{Version} to database", module.Namespace, module.Name, module.Provider, module.Version); + _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 + /// Removes a module from the database /// public async Task RemoveModuleAsync(ModuleStorage module) { @@ -443,8 +414,37 @@ DELETE FROM modules } catch (Exception ex) { - _logger.LogError(ex, "Error removing module {Namespace}/{Name}/{Provider}/{Version} from database", module.Namespace, module.Name, module.Provider, module.Version); + _logger.LogError(ex, "Error removing module {Namespace}/{Name}/{Provider}/{Version} from database", + module.Namespace, module.Name, module.Provider, module.Version); return false; } } + + 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 index f4d8243..e8a9618 100644 --- a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj +++ b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj @@ -1,17 +1,17 @@  - - - + + + - - net9.0 - enable - enable - + + net9.0 + enable + enable + - - - + + + \ No newline at end of file diff --git a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs index 867e746..60efe12 100644 --- a/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs +++ b/TerraformRegistry.Tests/IntegrationTests/IntegrationTestBase.cs @@ -13,12 +13,12 @@ namespace TerraformRegistry.Tests.IntegrationTests; // Base class for integration tests public abstract class IntegrationTestBase : IAsyncLifetime { - protected readonly ITestOutputHelper _output; 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!; - private readonly CancellationTokenSource _logMonitorCts = new(); protected PostgreSqlContainer _postgresContainer = null!; protected IntegrationTestBase(ITestOutputHelper output, string authToken) diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs index 0d2be0f..5faea31 100644 --- a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceConstructorTests.cs @@ -28,7 +28,8 @@ public AzureBlobModuleServiceConstructorTests() _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(It.IsAny())) .Returns(_mockBlobContainerClient.Object); _mockBlobContainerClient.Setup(c => - c.CreateIfNotExists(It.IsAny(), It.IsAny>(), It.IsAny(), It.IsAny())) + c.CreateIfNotExists(It.IsAny(), It.IsAny>(), + It.IsAny(), It.IsAny())) .Returns(Mock.Of>()); } @@ -65,7 +66,8 @@ public void Constructor_Initializes_Clients_And_Creates_Container_IfNotExists() // 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); + _mockBlobContainerClient.Verify( + c => c.CreateIfNotExists(PublicAccessType.None, null, null, It.IsAny()), Times.Once); } // Test: Should throw ArgumentNullException if ContainerName is missing from configuration @@ -134,7 +136,7 @@ public void Constructor_ThrowsArgumentNullException_If_ConnectionString_And_Acco var config = new ConfigurationBuilder() .AddInMemoryCollection(new[] { - new KeyValuePair("AzureStorage:ContainerName", _containerName), + new KeyValuePair("AzureStorage:ContainerName", _containerName) // No ConnectionString, no AccountName }) .Build(); @@ -163,11 +165,14 @@ public void Constructor_Logs_And_Rethrows_If_CreateIfNotExists_Fails() }; var configuration = CreateConfiguration(settings); var testException = new Exception("fail"); - _mockBlobContainerClient.Setup(c => c.CreateIfNotExists(PublicAccessType.None, null, null, It.IsAny())) + _mockBlobContainerClient.Setup(c => + c.CreateIfNotExists(PublicAccessType.None, null, null, It.IsAny())) .Throws(testException); - _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)).Returns(_mockBlobContainerClient.Object); + _mockBlobServiceClient.Setup(s => s.GetBlobContainerClient(_containerName)) + .Returns(_mockBlobContainerClient.Object); var ex = Assert.Throws(() => - new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, _mockBlobServiceClient.Object)); + new AzureBlobModuleService(configuration, _mockDatabaseService.Object, _mockLogger.Object, + _mockBlobServiceClient.Object)); Assert.Equal(testException, ex); _mockLogger.Verify(x => x.Log( LogLevel.Error, diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs index d2a2281..a7ddfba 100644 --- a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs @@ -1,4 +1,4 @@ -using System.Threading.Tasks; +using Azure; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Microsoft.Extensions.Configuration; @@ -7,32 +7,36 @@ using TerraformRegistry.API.Interfaces; using TerraformRegistry.AzureBlob; using TerraformRegistry.Models; -using Xunit; namespace TerraformRegistry.Tests.UnitTests.AzureBlob; public class AzureBlobModuleServiceDelegationTests { - private readonly Mock _mockDatabaseService = new(); - private readonly Mock> _mockLogger = new(); - private readonly Mock _mockConfiguration = new(); + private const string ContainerName = "test-container"; private readonly Mock _mockBlobServiceClient = new(); + private readonly Mock _mockConfiguration = new(); private readonly Mock _mockContainerClient = new(); - private const string ContainerName = "test-container"; + 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>()); + _mockContainerClient + .Setup(c => c.CreateIfNotExists(It.IsAny(), It.IsAny>(), + default)).Returns(Mock.Of>()); } - private AzureBlobModuleService CreateService() => new( - _mockConfiguration.Object, - _mockDatabaseService.Object, - _mockLogger.Object, - _mockBlobServiceClient.Object); + private AzureBlobModuleService CreateService() + { + return new AzureBlobModuleService( + _mockConfiguration.Object, + _mockDatabaseService.Object, + _mockLogger.Object, + _mockBlobServiceClient.Object); + } [Fact] public async Task ListModulesAsync_Delegates_To_DatabaseService() @@ -87,4 +91,4 @@ public async Task GetModuleVersionsAsync_Delegates_To_DatabaseService() 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/AzureBlobModuleServiceUploadTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs index 4ef7939..72436d0 100644 --- a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceUploadTests.cs @@ -7,6 +7,7 @@ using TerraformRegistry.API.Interfaces; using TerraformRegistry.AzureBlob; using TerraformRegistry.Models; + // Required for Response namespace TerraformRegistry.Tests.UnitTests.AzureBlob; diff --git a/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs index 3da0d1e..0a1d9ad 100644 --- a/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs +++ b/TerraformRegistry.Tests/UnitTests/EnvironmentVariablesTests.cs @@ -1,39 +1,36 @@ -using System; using Microsoft.Extensions.Configuration; -using Xunit; -namespace TerraformRegistry.Tests.UnitTests +namespace TerraformRegistry.Tests.UnitTests; + +public class EnvironmentVariablesTests { - 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() { - // 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[] { - // 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); + ("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(); + 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"]); - } + // 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/LocalModuleServiceTests.cs b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs index 64e193f..8c4afcf 100644 --- a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs +++ b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs @@ -1,204 +1,209 @@ -using System; -using System.IO; -using System.Threading.Tasks; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Moq; using TerraformRegistry.API.Interfaces; using TerraformRegistry.Models; using TerraformRegistry.Services; -using Xunit; -namespace TerraformRegistry.Tests.UnitTests +namespace TerraformRegistry.Tests.UnitTests; + +public class LocalModuleServiceTests { - public class LocalModuleServiceTests - { - private readonly Mock _mockDbService; - private readonly Mock> _mockLogger; - private readonly IConfiguration _configuration; - private readonly string _testModulePath; + private readonly IConfiguration _configuration; + private readonly Mock _mockDbService; + private readonly Mock> _mockLogger; + private readonly string _testModulePath; - public LocalModuleServiceTests() + public LocalModuleServiceTests() + { + _mockDbService = new Mock(); + _mockLogger = new Mock>(); + var inMemorySettings = new Dictionary { - _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); - } + { "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 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 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() + // 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 { - // 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); - } + 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() + // 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 { - // 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); - } + 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() + // 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 { - // Arrange - var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); - var expected = new ModuleVersions - { - 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); - } + 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 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() + // 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 { - // 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); - } + 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 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() + // 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) { - // 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 Task CallUploadModuleAsyncImpl(string ns, string name, string provider, string version, + Stream content, string desc) { - 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) - => base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc); + return base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc); } } -} +} \ No newline at end of file diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs index 5572d1c..6e441ee 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -1,14 +1,13 @@ -namespace TerraformRegistry.Handlers; - -using Models; using TerraformRegistry.API.Interfaces; using TerraformRegistry.API.Utilities; -using Microsoft.Extensions.Logging; -using Microsoft.AspNetCore.Http; -using static Microsoft.AspNetCore.Http.Results; +using TerraformRegistry.Models; + +namespace TerraformRegistry.Handlers; + +using static Results; /// -/// Handlers for module operations +/// Handlers for module operations /// public static class ModuleHandlers { @@ -18,10 +17,7 @@ public static class ModuleHandlers static ModuleHandlers() { // Create a logger factory and get a logger instance - var loggerFactory = LoggerFactory.Create(builder => - { - builder.AddConsole(); - }); + var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); }); _logger = loggerFactory.CreateLogger("ModuleHandlers"); } @@ -29,11 +25,11 @@ static ModuleHandlers() // Helper to return error responses in Terraform Registry format private static IResult Error(int statusCode, string message) { - return Results.Json(new { errors = new[] { message } }, statusCode: statusCode); + return Json(new { errors = new[] { message } }, statusCode: statusCode); } /// - /// Lists or searches modules + /// Lists or searches modules /// public static async Task ListModules( IModuleService moduleService, @@ -60,7 +56,7 @@ public static async Task ListModules( } /// - /// Gets a specific module + /// Gets a specific module /// public static async Task GetModule( string @namespace, @@ -73,16 +69,13 @@ public static async Task GetModule( @namespace, name, provider, version); var module = await moduleService.GetModuleAsync(@namespace, name, provider, version); - if (module == null) - { - return Error(404, "Module not found"); - } + if (module == null) return Error(404, "Module not found"); return Ok(module); } /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// public static async Task GetModuleVersions( string @namespace, @@ -95,14 +88,12 @@ public static async Task GetModuleVersions( var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); if (versions == null || versions.Versions == null || versions.Versions.Count == 0) - { return Error(404, "Module not found"); - } return Ok(versions); } /// - /// Downloads a specific module version + /// Downloads a specific module version /// public static async Task DownloadModule( string @namespace, @@ -116,17 +107,14 @@ public static async Task DownloadModule( @namespace, name, provider, version); var downloadPath = await moduleService.GetModuleDownloadPathAsync(@namespace, name, provider, version); - if (downloadPath == null) - { - return Error(404, "Module not found"); - } + if (downloadPath == null) return Error(404, "Module not found"); context.Response.Headers["X-Terraform-Get"] = downloadPath; - return Results.NoContent(); + return NoContent(); } /// - /// Downloads the latest version of a module for a provider + /// Downloads the latest version of a module for a provider /// public static async Task DownloadLatestModule( string @namespace, @@ -142,16 +130,13 @@ public static async Task DownloadLatestModule( var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); var latest = versions?.Versions?.OrderByDescending(v => v, Comparer.Create((a, b) => SemVerValidator.Compare(a, b) ?? 0)).FirstOrDefault(); - if (string.IsNullOrEmpty(latest)) - { - return Error(404, "Module not found"); - } + if (string.IsNullOrEmpty(latest)) return Error(404, "Module not found"); return await DownloadModule(@namespace, name, provider, latest, moduleService, context); } /// - /// Uploads a new module version + /// Uploads a new module version /// public static async Task UploadModule( string @namespace, @@ -168,27 +153,23 @@ public static async Task UploadModule( if (!SemVerValidator.IsValid(version)) { _logger.LogWarning("Invalid version format: {Version}", version); - return Error(400, $"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]"); + return Error(400, + $"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 Error(400, "No file uploaded"); - } + if (moduleFile == null || moduleFile.Length == 0) return Error(400, "No file uploaded"); try { await using var stream = moduleFile.OpenReadStream(); - var result = await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description); + var result = + await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description); - if (!result) - { - return Error(409, "Module version already exists"); - } + if (!result) return Error(409, "Module version already exists"); // Return JSON with filename using DTO var response = new UploadModuleResponse { Filename = moduleFile.FileName }; diff --git a/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs index b5c8a45..bbc318d 100644 --- a/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs +++ b/TerraformRegistry/Handlers/ServiceDiscoveryHandlers.cs @@ -1,14 +1,14 @@ -namespace TerraformRegistry.Handlers; +using TerraformRegistry.Models; -using Models; +namespace TerraformRegistry.Handlers; /// -/// Handlers for service discovery +/// Handlers for service discovery /// public static class ServiceDiscoveryHandlers { /// - /// Terraform service discovery endpoint + /// Terraform service discovery endpoint /// public static IResult GetServiceDiscovery() { diff --git a/TerraformRegistry/JsonSerializerContext.cs b/TerraformRegistry/JsonSerializerContext.cs index 6ad1493..394bc2b 100644 --- a/TerraformRegistry/JsonSerializerContext.cs +++ b/TerraformRegistry/JsonSerializerContext.cs @@ -1,10 +1,9 @@ +using System.Text.Json.Serialization; using Microsoft.AspNetCore.Mvc; +using TerraformRegistry.Models; namespace TerraformRegistry; -using System.Text.Json.Serialization; -using Models; - [JsonSourceGenerationOptions( WriteIndented = false, PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase, @@ -24,4 +23,4 @@ namespace TerraformRegistry; [JsonSerializable(typeof(string[]))] public partial class AppJsonSerializerContext : JsonSerializerContext { -} +} \ No newline at end of file diff --git a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs index ef6713c..41794cd 100644 --- a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs +++ b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs @@ -1,35 +1,31 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using System.Linq; -using System.Threading.Tasks; +namespace TerraformRegistry.Middleware; -namespace TerraformRegistry.Middleware +public class AuthenticationMiddleware( + RequestDelegate next, + string authToken, + ILogger logger) { - public class AuthenticationMiddleware( - RequestDelegate next, - string authToken, - ILogger logger) - { - private const string AuthorizationHeader = "Authorization"; - private const string BearerPrefix = "Bearer "; - private static readonly string[] ProtectedPathPrefixes = new[] { "/v1/" }; + private const string AuthorizationHeader = "Authorization"; + private const string BearerPrefix = "Bearer "; + private static readonly string[] ProtectedPathPrefixes = new[] { "/v1/" }; - public async Task InvokeAsync(HttpContext context) + public async Task InvokeAsync(HttpContext context) + { + var path = context.Request.Path.Value ?? string.Empty; + if (ProtectedPathPrefixes.Any(prefix => path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) { - var path = context.Request.Path.Value ?? string.Empty; - if (ProtectedPathPrefixes.Any(prefix => path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + var header = context.Request.Headers[AuthorizationHeader].FirstOrDefault(); + if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) { - var header = context.Request.Headers[AuthorizationHeader].FirstOrDefault(); - if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) - { - logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, context.Connection.RemoteIpAddress); - context.Response.StatusCode = StatusCodes.Status401Unauthorized; - context.Response.Headers["WWW-Authenticate"] = "Bearer"; - await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); - return; - } + logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, + context.Connection.RemoteIpAddress); + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + context.Response.Headers["WWW-Authenticate"] = "Bearer"; + await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); + return; } - await next(context); } + + await next(context); } -} +} \ No newline at end of file diff --git a/TerraformRegistry/Models/StringArrayWrapper.cs b/TerraformRegistry/Models/StringArrayWrapper.cs index 945a567..d3d27cc 100644 --- a/TerraformRegistry/Models/StringArrayWrapper.cs +++ b/TerraformRegistry/Models/StringArrayWrapper.cs @@ -1,12 +1,10 @@ -using System; - -namespace TerraformRegistry.Models; +namespace TerraformRegistry.Models; /// -/// Wrapper class for use in JsonSerialization where an array of strings is used. -/// This replaces anonymous types like new { property = new string[] { ... } } +/// Wrapper class for use in JsonSerialization where an array of strings is used. +/// This replaces anonymous types like new { property = new string[] { ... } } /// public class StringArrayWrapper { public string[] Values { get; set; } = Array.Empty(); -} +} \ No newline at end of file diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index 27703f4..ebc6e0a 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -1,3 +1,4 @@ +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.FileProviders; using NSwag; using NSwag.Generation.Processors.Security; @@ -10,13 +11,12 @@ using TerraformRegistry.PostgreSQL; using TerraformRegistry.PostgreSQL.Migrations; using TerraformRegistry.Services; -using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateSlimBuilder(args); builder.Configuration - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true) + .AddJsonFile("appsettings.json", true, true) + .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", true, true) .AddEnvironmentVariables("TF_REG_"); // Register MigrationManager and IInitializableDb for postgres @@ -24,7 +24,8 @@ builder.Services.AddSingleton(provider => { var db = provider.GetRequiredService(); - return db as IInitializableDb ?? throw new InvalidOperationException("Database service does not implement IInitializableDb"); + return db as IInitializableDb ?? + throw new InvalidOperationException("Database service does not implement IInitializableDb"); }); // Register database service using DI factory @@ -37,18 +38,14 @@ 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 "inmemory": return new InMemoryDatabaseService(baseUrl); @@ -67,7 +64,8 @@ switch (storageProvider) { case "azure": - return new AzureBlobModuleService(config, db, provider.GetRequiredService>()); + return new AzureBlobModuleService(config, db, + provider.GetRequiredService>()); case "local": var storagePath = config["ModuleStoragePath"]; if (string.IsNullOrEmpty(storagePath)) @@ -77,6 +75,7 @@ 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."); @@ -90,16 +89,11 @@ options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; }); -bool enableSwagger = false; +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; -} +else if (builder.Environment.IsDevelopment()) enableSwagger = true; if (enableSwagger) { @@ -128,30 +122,27 @@ // 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"] ?? "inmemory"); +logger.LogInformation("Using {DatabaseProvider} database for module metadata", + config["DatabaseProvider"] ?? "inmemory"); 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."); -} + 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."); -} + logger.LogWarning( + "WARNING: The default AuthorizationToken is in use. This is not secure. Please set a secure token in your configuration."); app.UseHttpsRedirection(); var webFolderPath = Path.Combine(Directory.GetCurrentDirectory(), "web"); if (Directory.Exists(webFolderPath)) -{ app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(webFolderPath), RequestPath = "" }); -} app.UseMiddleware(authToken); @@ -163,11 +154,9 @@ 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 (HttpContext context) => +app.MapGet("/", async context => { var indexPath = Path.Combine(webFolderPath, "index.html"); if (File.Exists(indexPath)) @@ -217,8 +206,8 @@ .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)) + (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) @@ -234,7 +223,7 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, .ProducesProblem(409) .Produces(201); -app.MapGet("/module/download", async (HttpContext context) => +app.MapGet("/module/download", async context => { var token = context.Request.Query["token"].ToString(); if (string.IsNullOrEmpty(token) || !LocalModuleService.TryGetFilePathFromToken(token, out var filePath)) @@ -243,18 +232,20 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, await context.Response.WriteAsync("Invalid or expired download link."); return; } - if (!System.IO.File.Exists(filePath)) + + 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.MapFallback(async (HttpContext context) => +app.MapFallback(async context => { // Serve index.html only at root if (context.Request.Path == "/") diff --git a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs index b900b94..c94d0d9 100644 --- a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs +++ b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs @@ -1,28 +1,21 @@ using TerraformRegistry.API.Interfaces; -namespace TerraformRegistry.Services +namespace TerraformRegistry.Services; + +/// +/// Hosted service to initialize the database at application startup. +/// +public class DatabaseInitializerHostedService(IServiceProvider serviceProvider) : IHostedService { - /// - /// Hosted service to initialize the database at application startup. - /// - public class DatabaseInitializerHostedService : IHostedService + private readonly IInitializableDb? _initializableDb = serviceProvider.GetService(typeof(IInitializableDb)) as IInitializableDb; + + public async Task StartAsync(CancellationToken cancellationToken) { - private readonly IInitializableDb? _initializableDb; - - public DatabaseInitializerHostedService(IServiceProvider serviceProvider) - { - // Try to resolve IInitializableDb (may be null for in-memory DB) - _initializableDb = serviceProvider.GetService(typeof(IInitializableDb)) as IInitializableDb; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - if (_initializableDb != null) - { - await _initializableDb.InitializeDatabase(); - } - } + if (_initializableDb != null) await _initializableDb.InitializeDatabase(); + } - public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/TerraformRegistry/Services/InMemoryDatabaseService.cs b/TerraformRegistry/Services/InMemoryDatabaseService.cs index 2276737..99704f8 100644 --- a/TerraformRegistry/Services/InMemoryDatabaseService.cs +++ b/TerraformRegistry/Services/InMemoryDatabaseService.cs @@ -1,45 +1,33 @@ -namespace TerraformRegistry.Services; - using System.Collections.Concurrent; using TerraformRegistry.API.Interfaces; using TerraformRegistry.Models; +namespace TerraformRegistry.Services; + /// -/// Implementation of database service with in-memory storage +/// Implementation of a database service with in-memory storage /// -public class InMemoryDatabaseService : IDatabaseService +public class InMemoryDatabaseService(string baseUrl) : IDatabaseService { private readonly ConcurrentDictionary _modules = new(); - private readonly string _baseUrl; - - public InMemoryDatabaseService(string baseUrl) - { - _baseUrl = baseUrl; - } /// - /// Lists all modules based on search criteria + /// Lists all modules based on search criteria /// public Task ListModulesAsync(ModuleSearchRequest request) { var filteredModules = _modules.Values.AsEnumerable(); if (!string.IsNullOrWhiteSpace(request.Q)) - { filteredModules = filteredModules.Where(m => m.Name.Contains(request.Q, StringComparison.OrdinalIgnoreCase) || m.Description.Contains(request.Q, StringComparison.OrdinalIgnoreCase)); - } if (!string.IsNullOrWhiteSpace(request.Namespace)) - { filteredModules = filteredModules.Where(m => m.Namespace == request.Namespace); - } if (!string.IsNullOrWhiteSpace(request.Provider)) - { filteredModules = filteredModules.Where(m => m.Provider == request.Provider); - } // Group by namespace, name, provider to get unique modules var modules = filteredModules @@ -66,7 +54,7 @@ public Task ListModulesAsync(ModuleSearchRequest request) .Select(v => v.Version) .OrderByDescending(v => v) .ToList(), - DownloadUrl = $"{_baseUrl}/v1/modules/{m.Namespace}/{m.Name}/{m.Provider}/{m.Version}/download" + DownloadUrl = $"{baseUrl}/v1/modules/{m.Namespace}/{m.Name}/{m.Provider}/{m.Version}/download" }).ToList(), Meta = new Dictionary { @@ -79,15 +67,12 @@ public Task ListModulesAsync(ModuleSearchRequest request) } /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// public Task GetModuleAsync(string @namespace, string name, string provider, string version) { var key = GetModuleKey(@namespace, name, provider, version); - if (!_modules.TryGetValue(key, out var storage)) - { - return Task.FromResult(null); - } + if (!_modules.TryGetValue(key, out var storage)) return Task.FromResult(null); var versions = _modules.Values .Where(m => m.Namespace == @namespace && m.Name == name && m.Provider == provider) @@ -112,14 +97,14 @@ public Task ListModulesAsync(ModuleSearchRequest request) { { provider, ">=0.12" } // Simplified provider constraints }, - DownloadUrl = $"{_baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download" + DownloadUrl = $"{baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download" }; return Task.FromResult(module); } /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// public Task GetModuleVersionsAsync(string @namespace, string name, string provider) { @@ -133,37 +118,31 @@ public Task GetModuleVersionsAsync(string @namespace, string nam } /// - /// Gets the storage path information for a specific module version + /// Gets the storage path information for a specific module version /// public Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) { var key = GetModuleKey(@namespace, name, provider, version); - if (!_modules.TryGetValue(key, out var storage)) - { - return Task.FromResult(null); - } + if (!_modules.TryGetValue(key, out var storage)) return Task.FromResult(null); return Task.FromResult(storage); } /// - /// Adds a new module to the database + /// Adds a new module to the database /// public Task AddModuleAsync(ModuleStorage module) { var key = GetModuleKey(module.Namespace, module.Name, module.Provider, module.Version); // Check if module already exists - if (_modules.ContainsKey(key)) - { - return Task.FromResult(false); - } + if (_modules.ContainsKey(key)) return Task.FromResult(false); return Task.FromResult(_modules.TryAdd(key, module)); } /// - /// Removes a module from the in-memory database + /// Removes a module from the in-memory database /// public Task RemoveModuleAsync(ModuleStorage module) { @@ -172,7 +151,7 @@ public Task RemoveModuleAsync(ModuleStorage module) } /// - /// Generates a unique key for a module version + /// Generates a unique key for a module version /// private static string GetModuleKey(string @namespace, string name, string provider, string version) { diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs index c9ac5e8..07b6f2f 100644 --- a/TerraformRegistry/Services/LocalModuleService.cs +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -1,61 +1,54 @@ -namespace TerraformRegistry.Services; - +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; -using System.IO.Compression; -using System.Text.Json; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; -using System.Collections.Concurrent; + +namespace TerraformRegistry.Services; /// -/// Implementation of module service with local file system storage +/// 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 string _moduleStoragePath; private readonly ILogger _logger; + private readonly string _moduleStoragePath; - // Token storage for download links - private static readonly ConcurrentDictionary _downloadTokens = new(); - private static readonly TimeSpan _tokenLifetime = TimeSpan.FromMinutes(10); - - public LocalModuleService(IConfiguration configuration, IDatabaseService databaseService, ILogger logger) + 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"); + _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); - } + if (!Directory.Exists(_moduleStoragePath)) Directory.CreateDirectory(_moduleStoragePath); // Load existing modules from disk LoadExistingModules(); } /// - /// Scans the module storage directory and loads existing modules into memory + /// 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; - } + if (!Directory.Exists(_moduleStoragePath)) return; // Scan namespace directories foreach (var namespaceDir in Directory.GetDirectories(_moduleStoragePath)) @@ -64,7 +57,6 @@ private void LoadExistingModules() // Scan for module zip files foreach (var zipFile in Directory.GetFiles(namespaceDir, "*.zip")) - { try { LoadModuleFromZip(zipFile, namespaceName); @@ -74,7 +66,6 @@ private void LoadExistingModules() // Log the error but continue processing other files _logger.LogError(ex, "Error loading module from {ZipFile}", zipFile); } - } } _logger.LogInformation("Loaded modules from disk."); @@ -87,7 +78,7 @@ private void LoadExistingModules() } /// - /// Loads a module from a zip file into memory + /// Loads a module from a zip file into memory /// private void LoadModuleFromZip(string zipFilePath, string namespaceName) { @@ -104,7 +95,7 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) // Last part is version var version = parts[^1]; - // Second last part is provider + // 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)); @@ -112,12 +103,14 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) // 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); + _logger.LogWarning( + "Skipping module {FileName}: Version '{Version}' is not a valid Semantic Version (SemVer 2.0.0)", + fileName, version); return; } - // Try to extract description from the zip file - string description = ""; + // Try to extract the description from the zip file + var description = ""; try { using (var archive = ZipFile.OpenRead(zipFilePath)) @@ -136,15 +129,13 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) var metadata = JsonSerializer.Deserialize(content, AppJsonSerializerContext.Default.ModuleMetadata); if (metadata != null && !string.IsNullOrEmpty(metadata.Description)) - { description = metadata.Description; - } } } } catch { - // If we can't extract description, use a default + // If we can't extract the description, use a default description = $"Module {name} for {provider}"; } @@ -158,15 +149,13 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) Description = description, FilePath = zipFilePath, PublishedAt = File.GetCreationTimeUtc(zipFilePath), - Dependencies = new List() // Simplified, no dependencies - }; - - // Add to database + Dependencies = [] }; + _databaseService.AddModuleAsync(module).Wait(); } /// - /// Lists all modules based on search criteria + /// Lists all modules based on search criteria /// public override Task ListModulesAsync(ModuleSearchRequest request) { @@ -174,7 +163,7 @@ public override Task ListModulesAsync(ModuleSearchRequest request) } /// - /// Gets detailed information about a specific module + /// Gets detailed information about a specific module /// public override Task GetModuleAsync(string @namespace, string name, string provider, string version) { @@ -182,7 +171,7 @@ public override Task ListModulesAsync(ModuleSearchRequest request) } /// - /// Gets all versions of a specific module + /// Gets all versions of a specific module /// public override Task GetModuleVersionsAsync(string @namespace, string name, string provider) { @@ -190,9 +179,10 @@ public override Task GetModuleVersionsAsync(string @namespace, s } /// - /// Gets the download path for a specific module version + /// Gets the download path for a specific module version /// - public override async Task GetModuleDownloadPathAsync(string @namespace, string name, string provider, string 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) @@ -200,43 +190,39 @@ public override Task GetModuleVersionsAsync(string @namespace, s // Generate a unique token var token = Guid.NewGuid().ToString("N"); - var expiry = DateTime.UtcNow.Add(_tokenLifetime); - _downloadTokens[token] = (moduleStorage.FilePath, expiry); + var expiry = DateTime.UtcNow.Add(TokenLifetime); + DownloadTokens[token] = (moduleStorage.FilePath, expiry); - // Return the download link (adjust base path as needed) + // Return the download link (adjust the base path as needed) return $"/module/download?token={token}"; } - // Helper for endpoint to validate and retrieve file path + // 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)) + if (!DownloadTokens.TryGetValue(token, out var entry)) return false; + if (entry.Expiry > DateTime.UtcNow) { - if (entry.Expiry > DateTime.UtcNow) - { - filePath = entry.FilePath; - return true; - } - // Expired, remove - _downloadTokens.TryRemove(token, out _); + filePath = entry.FilePath; + return true; } + + // Expired, remove + DownloadTokens.TryRemove(token, out _); + return false; } /// - /// Implementation-specific method to upload a module after validation + /// 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) + protected override async Task UploadModuleAsyncImpl(string @namespace, string name, string provider, + string version, Stream moduleContent, string description) { - // Create namespace directory var namespaceDir = Path.Combine(_moduleStoragePath, @namespace); - if (!Directory.Exists(namespaceDir)) - { - Directory.CreateDirectory(namespaceDir); - } + if (!Directory.Exists(namespaceDir)) Directory.CreateDirectory(namespaceDir); - // Save the module zip file as a temporary file first var fileName = $"{name}-{provider}-{version}.zip"; var tempFileName = $"{fileName}.tmp"; var tempFilePath = Path.Combine(namespaceDir, tempFileName); @@ -244,7 +230,7 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str try { - using (var fileStream = File.Create(tempFilePath)) + await using (var fileStream = File.Create(tempFilePath)) { await moduleContent.CopyToAsync(fileStream); } @@ -258,56 +244,45 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str Description = description, FilePath = finalFilePath, PublishedAt = DateTime.UtcNow, - Dependencies = new List() + Dependencies = [] }; var dbResult = await _databaseService.AddModuleAsync(module); if (dbResult) - { try { - // Move temp file to final file name - if (File.Exists(finalFilePath)) - { - File.Delete(finalFilePath); - } + if (File.Exists(finalFilePath)) File.Delete(finalFilePath); File.Move(tempFilePath, finalFilePath); return true; } catch (Exception fileMoveEx) { - // Rollback DB entry if file move fails 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); + _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; } - } - else - { - // DB failed, delete temp file - 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); - // Clean up temp file if it exists - if (File.Exists(tempFilePath)) - { - File.Delete(tempFilePath); - } + _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/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj index e83a445..23208bc 100644 --- a/TerraformRegistry/TerraformRegistry.csproj +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -1,49 +1,49 @@ - - net9.0 - enable - enable - - - - Debug;Release - - - + + net9.0 + enable + enable + + + + Debug;Release + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + \ No newline at end of file diff --git a/TerraformRegistry/web/index.html b/TerraformRegistry/web/index.html index 43a6d5d..daac556 100644 --- a/TerraformRegistry/web/index.html +++ b/TerraformRegistry/web/index.html @@ -1,7 +1,10 @@ ^^^^Terraform + html^>^ +^ +^Terraform Registry -SPA^^^^Welcome +SPA^^^ +^Welcome to the Terraform From d7b9d09019e8cc7796841892d11f0f81582d092f Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 29 May 2025 01:41:09 +0100 Subject: [PATCH 15/29] Update serialization to use reflection based --- TerraformRegistry/JsonSerializerContext.cs | 26 ------------------- TerraformRegistry/Program.cs | 7 +++-- .../Services/LocalModuleService.cs | 5 ++-- 3 files changed, 8 insertions(+), 30 deletions(-) delete mode 100644 TerraformRegistry/JsonSerializerContext.cs diff --git a/TerraformRegistry/JsonSerializerContext.cs b/TerraformRegistry/JsonSerializerContext.cs deleted file mode 100644 index 394bc2b..0000000 --- a/TerraformRegistry/JsonSerializerContext.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Text.Json.Serialization; -using Microsoft.AspNetCore.Mvc; -using TerraformRegistry.Models; - -namespace TerraformRegistry; - -[JsonSourceGenerationOptions( - WriteIndented = false, - PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] -[JsonSerializable(typeof(ServiceDiscovery))] -[JsonSerializable(typeof(Module))] -[JsonSerializable(typeof(ModuleList))] -[JsonSerializable(typeof(ModuleListItem))] -[JsonSerializable(typeof(ModuleMetadata))] -[JsonSerializable(typeof(ModuleSearchRequest))] -[JsonSerializable(typeof(ModuleStorage))] -[JsonSerializable(typeof(ModuleSubmodule))] -[JsonSerializable(typeof(ModuleVersions))] -[JsonSerializable(typeof(ProblemDetails))] -[JsonSerializable(typeof(UploadModuleResponse))] -[JsonSerializable(typeof(StringArrayWrapper))] -[JsonSerializable(typeof(string[]))] -public partial class AppJsonSerializerContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index ebc6e0a..c0c6094 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -86,7 +86,9 @@ builder.Services.ConfigureHttpJsonOptions(options => { - options.SerializerOptions.TypeInfoResolver = AppJsonSerializerContext.Default; + options.SerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase; + options.SerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull; + // Add other options as needed }); var enableSwagger = false; @@ -281,4 +283,5 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, app.Run($"http://0.0.0.0:{portNumber}"); -public partial class Program; \ No newline at end of file +public partial class Program; + diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs index 07b6f2f..44ded04 100644 --- a/TerraformRegistry/Services/LocalModuleService.cs +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -126,7 +126,7 @@ private void LoadModuleFromZip(string zipFilePath, string namespaceName) using var reader = new StreamReader(stream); var content = reader.ReadToEnd(); - var metadata = JsonSerializer.Deserialize(content, AppJsonSerializerContext.Default.ModuleMetadata); + var metadata = JsonSerializer.Deserialize(content); if (metadata != null && !string.IsNullOrEmpty(metadata.Description)) description = metadata.Description; @@ -286,4 +286,5 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str return false; } } -} \ No newline at end of file +} + From 0d95cd934ca23629abeeaacd7bd6a6946acc1902 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 29 May 2025 17:21:20 +0100 Subject: [PATCH 16/29] Fix service discovery for modules --- TerraformRegistry.Models/ServiceDiscovery.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/TerraformRegistry.Models/ServiceDiscovery.cs b/TerraformRegistry.Models/ServiceDiscovery.cs index 3c959ba..14bb955 100644 --- a/TerraformRegistry.Models/ServiceDiscovery.cs +++ b/TerraformRegistry.Models/ServiceDiscovery.cs @@ -7,10 +7,9 @@ namespace TerraformRegistry.Models; /// public class ServiceDiscovery { - [JsonPropertyName("modules")] - public Dictionary Modules { get; set; } = new() - { - { "service-discovery", "/.well-known/terraform.json" }, - { "modules", "/v1/modules/" } - }; + [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 From 40ea47688f252482dc1c81d2250f0305c90588e0 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 29 May 2025 17:33:55 +0100 Subject: [PATCH 17/29] Fix module versions endpoint --- TerraformRegistry.Models/ModuleVersions.cs | 21 +++++++++++++++++-- .../PostgreSQLDatabaseService.cs | 12 +++++++---- .../AzureBlobModuleServiceDelegationTests.cs | 8 ++++++- .../UnitTests/LocalModuleServiceTests.cs | 11 +++++++--- TerraformRegistry/Handlers/ModuleHandlers.cs | 8 ++++--- .../Services/InMemoryDatabaseService.cs | 11 +++++++++- 6 files changed, 57 insertions(+), 14 deletions(-) diff --git a/TerraformRegistry.Models/ModuleVersions.cs b/TerraformRegistry.Models/ModuleVersions.cs index 61eadca..49e5951 100644 --- a/TerraformRegistry.Models/ModuleVersions.cs +++ b/TerraformRegistry.Models/ModuleVersions.cs @@ -3,9 +3,26 @@ namespace TerraformRegistry.Models; /// -/// Represents a response for module versions +/// 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("versions")] public required List Versions { get; set; } + [JsonPropertyName("modules")] public required List Modules { get; set; } = new(); } \ No newline at end of file diff --git a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs index 67527f4..0129a25 100644 --- a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -249,12 +249,16 @@ ORDER BY var versions = new List(); await using var reader = await command.ExecuteReaderAsync(); - while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); - - // Return the updated ModuleVersions structure + while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); // Return the updated ModuleVersions structure with the format expected by Terraform return new ModuleVersions { - Versions = versions + Modules = new List + { + new ModuleVersionInfo + { + Versions = versions.Select(v => new VersionInfo { Version = v }).ToList() + } + } }; } diff --git a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs index a7ddfba..9edc621 100644 --- a/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs +++ b/TerraformRegistry.Tests/UnitTests/AzureBlob/AzureBlobModuleServiceDelegationTests.cs @@ -83,7 +83,13 @@ public async Task GetModuleVersionsAsync_Delegates_To_DatabaseService() { var expected = new ModuleVersions { - Versions = new List() + Modules = new List + { + new ModuleVersionInfo + { + Versions = new List() + } + } }; _mockDatabaseService.Setup(x => x.GetModuleVersionsAsync("ns", "name", "provider")).ReturnsAsync(expected); var service = CreateService(); diff --git a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs index 8c4afcf..4f8071d 100644 --- a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs +++ b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs @@ -107,12 +107,17 @@ public async Task GetModuleAsync_DelegatesToDatabaseService() // Verifies that GetModuleVersionsAsync delegates to the database service and returns the expected versions [Fact] public async Task GetModuleVersionsAsync_DelegatesToDatabaseService() - { - // Arrange + { // Arrange var service = new LocalModuleService(_configuration, _mockDbService.Object, _mockLogger.Object); var expected = new ModuleVersions { - Versions = new List() + Modules = new List + { + new ModuleVersionInfo + { + Versions = new List() + } + } }; _mockDbService.Setup(x => x.GetModuleVersionsAsync("ns", "name", "provider")).ReturnsAsync(expected); // Act diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs index 6e441ee..61de553 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -87,7 +87,8 @@ public static async Task GetModuleVersions( @namespace, name, provider); var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); - if (versions == null || versions.Versions == null || versions.Versions.Count == 0) + if (versions == null || versions.Modules == null || !versions.Modules.Any() || + versions.Modules.FirstOrDefault()?.Versions == null || !versions.Modules.FirstOrDefault()!.Versions.Any()) return Error(404, "Module not found"); return Ok(versions); } @@ -128,8 +129,9 @@ public static async Task DownloadLatestModule( // Get all versions and pick the latest using SemVer sort var versions = await moduleService.GetModuleVersionsAsync(@namespace, name, provider); - var latest = versions?.Versions?.OrderByDescending(v => v, Comparer.Create((a, b) => - SemVerValidator.Compare(a, b) ?? 0)).FirstOrDefault(); + 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 Error(404, "Module not found"); return await DownloadModule(@namespace, name, provider, latest, moduleService, context); diff --git a/TerraformRegistry/Services/InMemoryDatabaseService.cs b/TerraformRegistry/Services/InMemoryDatabaseService.cs index 99704f8..923f164 100644 --- a/TerraformRegistry/Services/InMemoryDatabaseService.cs +++ b/TerraformRegistry/Services/InMemoryDatabaseService.cs @@ -114,7 +114,16 @@ public Task GetModuleVersionsAsync(string @namespace, string nam .OrderByDescending(v => v) .ToList(); - return Task.FromResult(new ModuleVersions { Versions = versions }); + return Task.FromResult(new ModuleVersions + { + Modules = new List + { + new ModuleVersionInfo + { + Versions = versions.Select(v => new VersionInfo { Version = v }).ToList() + } + } + }); } /// From fe8330bb3dc991cc65f69f9cca484ac0634febf9 Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 29 May 2025 17:37:59 +0100 Subject: [PATCH 18/29] Fix test to match changes to well-known endpoint --- .../WellKnownEndpointTests.cs | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs index afa8cb6..415a8e0 100644 --- a/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs +++ b/TerraformRegistry.Tests/IntegrationTests/WellKnownEndpointTests.cs @@ -15,31 +15,20 @@ public async Task WellKnown_Endpoint_Returns_Expected_Response() 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}"); + var content = await response.Content.ReadAsStringAsync(); _output.WriteLine($"Received content: {content}"); // Assert the JSON content var expectedJson = new { - modules = new - { - service_discovery = "/.well-known/terraform.json", - modules = "/v1/modules/" - } + modules_v1 = "/v1/modules/" }; using var jsonDoc = JsonDocument.Parse(content); var actualJson = new { - modules = new - { - service_discovery = jsonDoc.RootElement.GetProperty("modules").GetProperty("service-discovery") - .GetString(), - modules = jsonDoc.RootElement.GetProperty("modules").GetProperty("modules").GetString() - } + modules_v1 = jsonDoc.RootElement.GetProperty("modules.v1").GetString() }; - Assert.Equal(expectedJson.modules.service_discovery, actualJson.modules.service_discovery); - Assert.Equal(expectedJson.modules.modules, actualJson.modules.modules); + Assert.Equal(expectedJson.modules_v1, actualJson.modules_v1); } } \ No newline at end of file From 375db11e9d5fe1939e86521c308f0be942f97002 Mon Sep 17 00:00:00 2001 From: matty Date: Sun, 1 Jun 2025 20:00:37 +0100 Subject: [PATCH 19/29] Add nuxtjs based frontend --- TerraformRegistry/web-src/.gitignore | 24 + TerraformRegistry/web-src/README.md | 75 + TerraformRegistry/web-src/app.vue | 8 + TerraformRegistry/web-src/assets/css/main.css | 36 + .../web-src/composables/useAuth.ts | 34 + TerraformRegistry/web-src/layouts/default.vue | 9 + TerraformRegistry/web-src/middleware/auth.ts | 7 + .../web-src/middleware/global-auth.global.ts | 18 + TerraformRegistry/web-src/nuxt.config.ts | 13 + TerraformRegistry/web-src/package-lock.json | 13020 ++++++++++++++++ TerraformRegistry/web-src/package.json | 24 + TerraformRegistry/web-src/pages/index.vue | 46 + TerraformRegistry/web-src/pages/login.vue | 103 + TerraformRegistry/web-src/pages/modules.vue | 376 + TerraformRegistry/web-src/public/favicon.ico | Bin 0 -> 4286 bytes TerraformRegistry/web-src/public/robots.txt | 2 + .../web-src/server/tsconfig.json | 3 + TerraformRegistry/web-src/tsconfig.json | 4 + TerraformRegistry/web/_nuxt/4J-u_g9l.js | 1 + TerraformRegistry/web/_nuxt/B9sIrZpC.js | 1 + TerraformRegistry/web/_nuxt/BLEGckhC.js | 1 + TerraformRegistry/web/_nuxt/BvVBPIAF.js | 1 + TerraformRegistry/web/_nuxt/CDgII3bh.js | 1 + TerraformRegistry/web/_nuxt/CjNMrKxF.js | 1 + TerraformRegistry/web/_nuxt/CwuZat6W.js | 1 + TerraformRegistry/web/_nuxt/CyQxyuxc.js | 1 + TerraformRegistry/web/_nuxt/DZhRnb1V.js | 6 + TerraformRegistry/web/_nuxt/DfbLerQ4.js | 42 + TerraformRegistry/web/_nuxt/HxsO1gv8.js | 1 + .../web/_nuxt/builds/latest.json | 1 + .../9792f59a-1af7-4ae3-9f14-0457ce5d038c.json | 1 + .../web/_nuxt/entry.DOt0xfNe.css | 1 + .../web/_nuxt/error-404.4oxyXxx0.css | 1 + .../web/_nuxt/error-500.CZqNkBuR.css | 1 + TerraformRegistry/web/_nuxt/jISQO879.js | 1 + TerraformRegistry/web/favicon.ico | Bin 0 -> 4286 bytes TerraformRegistry/web/index.html | 33 +- TerraformRegistry/web/robots.txt | 2 + 38 files changed, 13880 insertions(+), 20 deletions(-) create mode 100644 TerraformRegistry/web-src/.gitignore create mode 100644 TerraformRegistry/web-src/README.md create mode 100644 TerraformRegistry/web-src/app.vue create mode 100644 TerraformRegistry/web-src/assets/css/main.css create mode 100644 TerraformRegistry/web-src/composables/useAuth.ts create mode 100644 TerraformRegistry/web-src/layouts/default.vue create mode 100644 TerraformRegistry/web-src/middleware/auth.ts create mode 100644 TerraformRegistry/web-src/middleware/global-auth.global.ts create mode 100644 TerraformRegistry/web-src/nuxt.config.ts create mode 100644 TerraformRegistry/web-src/package-lock.json create mode 100644 TerraformRegistry/web-src/package.json create mode 100644 TerraformRegistry/web-src/pages/index.vue create mode 100644 TerraformRegistry/web-src/pages/login.vue create mode 100644 TerraformRegistry/web-src/pages/modules.vue create mode 100644 TerraformRegistry/web-src/public/favicon.ico create mode 100644 TerraformRegistry/web-src/public/robots.txt create mode 100644 TerraformRegistry/web-src/server/tsconfig.json create mode 100644 TerraformRegistry/web-src/tsconfig.json create mode 100644 TerraformRegistry/web/_nuxt/4J-u_g9l.js create mode 100644 TerraformRegistry/web/_nuxt/B9sIrZpC.js create mode 100644 TerraformRegistry/web/_nuxt/BLEGckhC.js create mode 100644 TerraformRegistry/web/_nuxt/BvVBPIAF.js create mode 100644 TerraformRegistry/web/_nuxt/CDgII3bh.js create mode 100644 TerraformRegistry/web/_nuxt/CjNMrKxF.js create mode 100644 TerraformRegistry/web/_nuxt/CwuZat6W.js create mode 100644 TerraformRegistry/web/_nuxt/CyQxyuxc.js create mode 100644 TerraformRegistry/web/_nuxt/DZhRnb1V.js create mode 100644 TerraformRegistry/web/_nuxt/DfbLerQ4.js create mode 100644 TerraformRegistry/web/_nuxt/HxsO1gv8.js create mode 100644 TerraformRegistry/web/_nuxt/builds/latest.json create mode 100644 TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json create mode 100644 TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css create mode 100644 TerraformRegistry/web/_nuxt/error-404.4oxyXxx0.css create mode 100644 TerraformRegistry/web/_nuxt/error-500.CZqNkBuR.css create mode 100644 TerraformRegistry/web/_nuxt/jISQO879.js create mode 100644 TerraformRegistry/web/favicon.ico create mode 100644 TerraformRegistry/web/robots.txt 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.vue b/TerraformRegistry/web-src/app.vue new file mode 100644 index 0000000..ed9e94c --- /dev/null +++ b/TerraformRegistry/web-src/app.vue @@ -0,0 +1,8 @@ + diff --git a/TerraformRegistry/web-src/assets/css/main.css b/TerraformRegistry/web-src/assets/css/main.css new file mode 100644 index 0000000..0700ce4 --- /dev/null +++ b/TerraformRegistry/web-src/assets/css/main.css @@ -0,0 +1,36 @@ +@import "tailwindcss"; +@import "@nuxt/ui"; + +/* Custom animations and styles */ +@keyframes fadeIn { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes slideIn { + from { opacity: 0; transform: translateX(-10px); } + to { opacity: 1; transform: translateX(0); } +} + +.fade-in { + animation: fadeIn 0.3s ease-out; +} + +.slide-in { + animation: slideIn 0.3s ease-out; +} + +/* Custom hover effects */ +.hover-lift { + transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; +} + +.hover-lift:hover { + transform: translateY(-2px); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); +} + +/* Smooth transitions */ +* { + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out; +} \ No newline at end of file diff --git a/TerraformRegistry/web-src/composables/useAuth.ts b/TerraformRegistry/web-src/composables/useAuth.ts new file mode 100644 index 0000000..97c2305 --- /dev/null +++ b/TerraformRegistry/web-src/composables/useAuth.ts @@ -0,0 +1,34 @@ +export const useAuth = () => { + const token = useCookie('auth-token', { + default: () => null, + secure: true, + sameSite: 'strict' + }) + + const isAuthenticated = computed(() => { + return !!token.value + }) + + const login = (authToken: string) => { + token.value = authToken + } + + const logout = () => { + token.value = null + navigateTo('/login') + } + + const getAuthHeaders = () => { + return { + 'Authorization': `Bearer ${token.value}` + } + } + + return { + token: readonly(token), + isAuthenticated: readonly(isAuthenticated), + login, + logout, + getAuthHeaders + } +} diff --git a/TerraformRegistry/web-src/layouts/default.vue b/TerraformRegistry/web-src/layouts/default.vue new file mode 100644 index 0000000..22a850d --- /dev/null +++ b/TerraformRegistry/web-src/layouts/default.vue @@ -0,0 +1,9 @@ + + + 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..de78c26 --- /dev/null +++ b/TerraformRegistry/web-src/middleware/global-auth.global.ts @@ -0,0 +1,18 @@ +export default defineNuxtRouteMiddleware((to) => { + // Skip middleware for login page + if (to.path === '/login') { + return + } + + const { isAuthenticated } = useAuth() + + // If not authenticated and trying to access protected routes, redirect to login + if (!isAuthenticated.value && to.path !== '/') { + return navigateTo('/login') + } + + // If authenticated and on root, redirect to modules + if (isAuthenticated.value && to.path === '/') { + return navigateTo('/modules') + } +}) diff --git a/TerraformRegistry/web-src/nuxt.config.ts b/TerraformRegistry/web-src/nuxt.config.ts new file mode 100644 index 0000000..95c63c0 --- /dev/null +++ b/TerraformRegistry/web-src/nuxt.config.ts @@ -0,0 +1,13 @@ +// 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"], + css: ["~/assets/css/main.css"], + nitro: { + prerender: { + routes: ["/"], + }, + }, + ssr: false, +}); diff --git a/TerraformRegistry/web-src/package-lock.json b/TerraformRegistry/web-src/package-lock.json new file mode 100644 index 0000000..7941c32 --- /dev/null +++ b/TerraformRegistry/web-src/package-lock.json @@ -0,0 +1,13020 @@ +{ + "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", + "nuxt": "^3.17.4", + "typescript": "^5.8.3", + "vue": "^3.5.15", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@iconify-json/material-symbols": "^1.2.23" + } + }, + "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/material-symbols": { + "version": "1.2.23", + "resolved": "https://registry.npmjs.org/@iconify-json/material-symbols/-/material-symbols-1.2.23.tgz", + "integrity": "sha512-GoNuWl8dVDiVFQq+HEgbOmPW0vTycs7qXgtpfBAx4XgDI4MVwnEIjIcYy/tlzzjMF1TPDwkX5fI1+KIylSdBwQ==", + "dev": true, + "license": "Apache-2.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/blobs": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.2.0.tgz", + "integrity": "sha512-9djLZHBKsoKk8XCgwWSEPK9QnT8qqxEQGuYh48gFIcNLvpBKkLnHbDZuyUxmNemCfDz7h0HnMXgSPnnUVgARhg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "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/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..78ec65d --- /dev/null +++ b/TerraformRegistry/web-src/package.json @@ -0,0 +1,24 @@ +{ + "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", + "nuxt": "^3.17.4", + "typescript": "^5.8.3", + "vue": "^3.5.15", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@iconify-json/material-symbols": "^1.2.23" + } +} diff --git a/TerraformRegistry/web-src/pages/index.vue b/TerraformRegistry/web-src/pages/index.vue new file mode 100644 index 0000000..1a5d494 --- /dev/null +++ b/TerraformRegistry/web-src/pages/index.vue @@ -0,0 +1,46 @@ + + + diff --git a/TerraformRegistry/web-src/pages/login.vue b/TerraformRegistry/web-src/pages/login.vue new file mode 100644 index 0000000..ee54813 --- /dev/null +++ b/TerraformRegistry/web-src/pages/login.vue @@ -0,0 +1,103 @@ + + + diff --git a/TerraformRegistry/web-src/pages/modules.vue b/TerraformRegistry/web-src/pages/modules.vue new file mode 100644 index 0000000..b9b4d7d --- /dev/null +++ b/TerraformRegistry/web-src/pages/modules.vue @@ -0,0 +1,376 @@ + + + diff --git a/TerraformRegistry/web-src/public/favicon.ico b/TerraformRegistry/web-src/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18993ad91cfd43e03b074dd0b5cc3f37ab38e49c GIT binary patch literal 4286 zcmeHLOKuuL5PjK%MHWVi6lD zOGiREbCw`xmFozJ^aNatJY>w+g ze6a2@u~m#^BZm@8wco9#Crlli0uLb^3E$t2-WIc^#(?t)*@`UpuofJ(Uyh@F>b3Ph z$D^m8Xq~pTkGJ4Q`Q2)te3mgkWYZ^Ijq|hkiP^9`De={bQQ%heZC$QU2UpP(-tbl8 zPWD2abEew;oat@w`uP3J^YpsgT%~jT(Dk%oU}sa$7|n6hBjDj`+I;RX(>)%lm_7N{+B7Mu%H?422lE%MBJH!!YTN2oT7xr>>N-8OF$C&qU^ z>vLsa{$0X%q1fjOe3P1mCv#lN{xQ4_*HCSAZjTb1`}mlc+9rl8$B3OP%VT@mch_~G z7Y+4b{r>9e=M+7vSI;BgB?ryZDY4m>&wcHSn81VH1N~`0gvwH{ z8dv#hG|OK`>1;j7tM#B)Z7zDN?{6=dUal}$e{const{isAuthenticated:t}=a();if(!t.value)return o("/login")});export{n as default}; diff --git a/TerraformRegistry/web/_nuxt/B9sIrZpC.js b/TerraformRegistry/web/_nuxt/B9sIrZpC.js new file mode 100644 index 0000000..777b602 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/B9sIrZpC.js @@ -0,0 +1 @@ +import R from"./DZhRnb1V.js";import{u as E,b as O,t as j,c as V,d as H,P as Q,_ as J,a as K}from"./CyQxyuxc.js";import{a as W,_ as X}from"./BLEGckhC.js";import{p as Y,q as Z,s as G,j as b,o as i,w as d,v as M,k as q,l as s,x as C,y as ee,c as p,t as l,e as te,f as se,r as k,z as ae,a as e,b as c,A as re,d as y,F as N,B as U,m as ne}from"./DfbLerQ4.js";import"./CDgII3bh.js";const ie={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"}},oe={__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(x){const r=x,L=Y(),g=Z(),{orientation:v,size:z}=E(r),{isLeading:_,isTrailing:f,leadingIconName:h,trailingIconName:w}=O(r),m=G(()=>{var u;return j({extend:j(ie),...((u=g.ui)==null?void 0:u.badge)||{}})({color:r.color,variant:r.variant,size:z.value||r.size,square:r.square||!L.default&&!r.label,buttonGroup:v.value})});return(u,$)=>{var I;return i(),b(s(Q),{as:x.as,class:C(m.value.base({class:[(I=r.ui)==null?void 0:I.base,r.class]}))},{default:d(()=>[M(u.$slots,"leading",{},()=>{var a,t,o;return[s(_)&&s(h)?(i(),b(V,{key:0,name:s(h),class:C(m.value.leadingIcon({class:(a=r.ui)==null?void 0:a.leadingIcon}))},null,8,["name","class"])):x.avatar?(i(),b(H,ee({key:1,size:((t=r.ui)==null?void 0:t.leadingAvatarSize)||m.value.leadingAvatarSize()},x.avatar,{class:m.value.leadingAvatar({class:(o=r.ui)==null?void 0:o.leadingAvatar})}),null,16,["size","class"])):q("",!0)]}),M(u.$slots,"default",{},()=>{var a;return[x.label!==void 0&&x.label!==null?(i(),p("span",{key:0,class:C(m.value.label({class:(a=r.ui)==null?void 0:a.label}))},l(x.label),3)):q("",!0)]}),M(u.$slots,"trailing",{},()=>{var a;return[s(f)&&s(w)?(i(),b(V,{key:0,name:s(w),class:C(m.value.trailingIcon({class:(a=r.ui)==null?void 0:a.trailingIcon}))},null,8,["name","class"])):q("",!0)]})]),_:3},8,["as","class"])}}},le={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},ce={class:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700"},de={class:"max-w-7xl mx-auto px-4 py-6"},ue={class:"flex justify-between items-center"},ge={class:"flex items-center space-x-4"},xe={class:"w-12 h-12 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-lg"},fe={class:"max-w-7xl mx-auto px-4 py-8"},me={class:"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"},ye={class:"flex items-center space-x-3"},pe={class:"w-8 h-8 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center"},ve={class:"flex flex-col sm:flex-row items-stretch sm:items-center gap-3 w-full sm:w-auto"},be={key:1,class:"flex flex-col justify-center items-center py-16"},_e={key:2,class:"text-center py-16"},he={class:"w-20 h-20 mx-auto mb-6 bg-gray-100 dark:bg-gray-800 rounded-2xl flex items-center justify-center"},we={class:"text-gray-600 dark:text-gray-400"},ke={key:3,class:"overflow-hidden"},ze={class:"overflow-x-auto"},qe={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},Ie={class:"bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700"},Se={class:"px-6 py-4"},Ae={class:"flex items-center"},Ce={class:"w-10 h-10 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-lg flex items-center justify-center mr-4"},Le={class:"text-white text-sm font-bold"},Me={class:"text-sm font-semibold text-gray-900 dark:text-white"},$e={class:"text-sm text-gray-500 dark:text-gray-400"},Be={class:"px-6 py-4"},je={class:"px-6 py-4"},Ve=["title"],Ne={class:"px-6 py-4"},Ue={class:"text-sm text-gray-600 dark:text-gray-400"},De={class:"px-6 py-4"},Ge={class:"flex flex-wrap gap-1 max-w-32"},Pe={class:"px-6 py-4 text-right"},Te={class:"flex flex-col sm:flex-row justify-between items-center gap-4 bg-gray-50 dark:bg-gray-800 px-6 py-4 rounded-b-lg"},Fe={class:"flex items-center space-x-2"},Re={class:"text-sm text-gray-600 dark:text-gray-400"},D=10,Ke=te({__name:"modules",setup(x){const{logout:r,getAuthHeaders:L}=se(),g=k([]),v=k(!1),z=k(!1),_=k(""),f=k(""),h=k(0),w=G(()=>{if(!f.value)return g.value;const a=f.value.toLowerCase();return g.value.filter(t=>t.name.toLowerCase().includes(a)||t.namespace.toLowerCase().includes(a)||t.provider.toLowerCase().includes(a)||t.description.toLowerCase().includes(a))}),m=a=>new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}),u=async(a=0,t=!1)=>{try{t?z.value=!0:v.value=!0,_.value="";const o=await $fetch(`/v1/modules?offset=${a}&limit=${D}`,{headers:L()});t?g.value.push(...o.modules):g.value=o.modules,h.value=a+D}catch(o){_.value=o.message||"Failed to fetch modules",console.error("Error fetching modules:",o)}finally{v.value=!1,z.value=!1}},$=()=>{h.value=0,u(0,!1)},I=()=>{u(h.value,!0)};return ae(()=>{u()}),(a,t)=>{const o=R,S=J,P=X,T=W,A=oe,F=K;return i(),p("div",le,[e("div",ce,[e("div",de,[e("div",ue,[e("div",ge,[e("div",xe,[c(o,{name:"material-symbols:engineering",class:"text-xl text-white"})]),t[1]||(t[1]=e("div",null,[e("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white"}," Terraform Modules "),e("p",{class:"text-gray-600 dark:text-gray-400 mt-1"}," Manage and browse your infrastructure modules ")],-1))]),c(S,{onClick:s(r),variant:"outline",color:"error",size:"lg"},{default:d(()=>t[2]||(t[2]=[y(" Logout ")])),_:1,__:[2]},8,["onClick"])])])]),e("div",fe,[c(F,{class:"shadow-lg"},re({header:d(()=>[e("div",me,[e("div",ye,[e("div",pe,[c(o,{name:"material-symbols:package-2",class:"text-blue-600 dark:text-blue-400"})]),t[3]||(t[3]=e("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white"}," Module Registry ",-1))]),e("div",ve,[c(P,{modelValue:s(f),"onUpdate:modelValue":t[0]||(t[0]=n=>ne(f)?f.value=n:null),placeholder:"Search modules...",size:"md",class:"w-full sm:w-72"},null,8,["modelValue"]),c(S,{onClick:$,loading:s(v),variant:"outline",size:"md"},{default:d(()=>t[4]||(t[4]=[y(" Refresh ")])),_:1,__:[4]},8,["loading"])])])]),default:d(()=>[s(_)?(i(),b(T,{key:0,color:"error",variant:"soft",title:s(_),class:"mb-6"},null,8,["title"])):q("",!0),s(v)&&!s(g).length?(i(),p("div",be,[c(o,{name:"material-symbols:refresh",class:"animate-spin text-4xl mb-4 text-blue-500"}),t[5]||(t[5]=e("p",{class:"text-gray-600 dark:text-gray-400 text-lg"}," Loading modules... ",-1))])):!s(w).length&&!s(v)?(i(),p("div",_e,[e("div",he,[c(o,{name:"material-symbols:package-2",class:"text-4xl text-gray-400"})]),t[6]||(t[6]=e("h3",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-2"}," No modules found ",-1)),e("p",we,l(s(f)?"Try adjusting your search terms":"Get started by adding your first module"),1)])):(i(),p("div",ke,[e("div",ze,[e("table",qe,[t[8]||(t[8]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Module "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Provider "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Description "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Published "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Versions "),e("th",{class:"px-6 py-4 text-right text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Actions ")])],-1)),e("tbody",Ie,[(i(!0),p(N,null,U(s(w),n=>(i(),p("tr",{key:n.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"},[e("td",Se,[e("div",Ae,[e("div",Ce,[e("div",Le,l(n.name.charAt(0).toUpperCase()),1)]),e("div",null,[e("div",Me,l(n.name),1),e("div",$e,l(n.namespace),1),c(A,{variant:"subtle",size:"xs",class:"mt-1"},{default:d(()=>[y(" v"+l(n.version),1)]),_:2},1024)])])]),e("td",Be,[c(A,{variant:"outline",color:"primary"},{default:d(()=>[y(l(n.provider),1)]),_:2},1024)]),e("td",je,[e("p",{class:"text-sm text-gray-900 dark:text-white max-w-xs",title:n.description},l(n.description||"No description available"),9,Ve)]),e("td",Ne,[e("div",Ue,l(m(n.published_at)),1)]),e("td",De,[e("div",Ge,[(i(!0),p(N,null,U(n.versions.slice(0,3),B=>(i(),b(A,{key:B,variant:"outline",size:"xs",color:"neutral"},{default:d(()=>[y(l(B),1)]),_:2},1024))),128)),n.versions.length>3?(i(),b(A,{key:0,variant:"outline",size:"xs",color:"neutral"},{default:d(()=>[y(" +"+l(n.versions.length-3),1)]),_:2},1024)):q("",!0)])]),e("td",Pe,[c(S,{to:n.download_url,external:"",target:"_blank",variant:"ghost",size:"sm",color:"primary"},{default:d(()=>t[7]||(t[7]=[y(" ⬇ Download ")])),_:2,__:[7]},1032,["to"])])]))),128))])])])]))]),_:2},[s(g).length>0?{name:"footer",fn:d(()=>[e("div",Te,[e("div",Fe,[t[9]||(t[9]=e("div",{class:"w-2 h-2 bg-green-500 rounded-full"},null,-1)),e("p",Re," Showing "+l(s(w).length)+" of "+l(s(g).length)+" modules ",1)]),c(S,{onClick:I,loading:s(z),variant:"outline",size:"sm"},{default:d(()=>t[10]||(t[10]=[y(" Load More Modules ")])),_:1,__:[10]},8,["loading"])])]),key:"0"}:void 0]),1024)])])}}});export{Ke as default}; diff --git a/TerraformRegistry/web/_nuxt/BLEGckhC.js b/TerraformRegistry/web/_nuxt/BLEGckhC.js new file mode 100644 index 0000000..ec12f7b --- /dev/null +++ b/TerraformRegistry/web/_nuxt/BLEGckhC.js @@ -0,0 +1 @@ +import{e as fe,u as ve,b as me,t as j,c as T,d as ie,P as ae,l as pe,g as ye,f as be,_ as L}from"./CyQxyuxc.js";import{C as X,p as re,D as he,q as ne,s as x,r as se,z as xe,j as f,o as s,w as le,a as oe,v as p,c as b,k as d,y as z,l as r,x as c,m as ze,E as qe,G as Ie,H as we,d as Z,t as _,F as ee,B as te}from"./DfbLerQ4.js";const Se={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"}},ke=["id","type","value","name","placeholder","disabled","required","autocomplete"],Pe=Object.assign({inheritAttrs:!1},{__name:"Input",props:X({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:X(["update:modelValue","blur","change"],["update:modelValue"]),setup(e,{expose:l,emit:a}){const i=e,o=a,v=re(),[q,n]=he(e,"modelValue"),u=ne(),{emitFormBlur:S,emitFormInput:k,emitFormChange:C,size:$,color:N,id:B,name:A,highlight:M,disabled:V,emitFormFocus:I,ariaAttrs:g}=fe(i,{}),{orientation:m,size:F}=ve(i),{isLeading:D,isTrailing:O,leadingIconName:R,trailingIconName:E}=me(i),G=x(()=>F.value||$.value),y=x(()=>{var t;return j({extend:j(Se),...((t=u.ui)==null?void 0:t.input)||{}})({type:i.type,color:N.value,variant:i.variant,size:G==null?void 0:G.value,loading:i.loading,highlight:M.value,leading:D.value||!!i.avatar||!!v.leading,trailing:O.value||!!v.trailing,buttonGroup:m.value})}),P=se(null);function Y(t){n.trim&&(t=(t==null?void 0:t.trim())??null),(n.number||i.type==="number")&&(t=pe(t)),n.nullify&&(t||(t=null)),q.value=t,k()}function ce(t){n.lazy||Y(t.target.value)}function ue(t){const w=t.target.value;n.lazy&&Y(w),n.trim&&(t.target.value=w.trim()),C(),o("change",t)}function ge(t){S(),o("blur",t)}function de(){var t;i.autofocus&&((t=P.value)==null||t.focus())}return xe(()=>{setTimeout(()=>{de()},i.autofocusDelay)}),l({inputRef:P}),(t,w)=>{var H;return s(),f(r(ae),{as:e.as,class:c(y.value.root({class:[(H=i.ui)==null?void 0:H.root,i.class]}))},{default:le(()=>{var K,J,Q;return[oe("input",z({id:r(B),ref_key:"inputRef",ref:P,type:e.type,value:r(q),name:r(A),placeholder:e.placeholder,class:y.value.base({class:(K=i.ui)==null?void 0:K.base}),disabled:r(V),required:e.required,autocomplete:e.autocomplete},{...t.$attrs,...r(g)},{onInput:ce,onBlur:ge,onChange:ue,onFocus:w[0]||(w[0]=(...h)=>r(I)&&r(I)(...h))}),null,16,ke),p(t.$slots,"default"),r(D)||e.avatar||v.leading?(s(),b("span",{key:0,class:c(y.value.leading({class:(J=i.ui)==null?void 0:J.leading}))},[p(t.$slots,"leading",{},()=>{var h,U,W;return[r(D)&&r(R)?(s(),f(T,{key:0,name:r(R),class:c(y.value.leadingIcon({class:(h=i.ui)==null?void 0:h.leadingIcon}))},null,8,["name","class"])):e.avatar?(s(),f(ie,z({key:1,size:((U=i.ui)==null?void 0:U.leadingAvatarSize)||y.value.leadingAvatarSize()},e.avatar,{class:y.value.leadingAvatar({class:(W=i.ui)==null?void 0:W.leadingAvatar})}),null,16,["size","class"])):d("",!0)]})],2)):d("",!0),r(O)||v.trailing?(s(),b("span",{key:1,class:c(y.value.trailing({class:(Q=i.ui)==null?void 0:Q.trailing}))},[p(t.$slots,"trailing",{},()=>{var h;return[r(E)?(s(),f(T,{key:0,name:r(E),class:c(y.value.trailingIcon({class:(h=i.ui)==null?void 0:h.trailingIcon}))},null,8,["name","class"])):d("",!0)]})],2)):d("",!0)]}),_:3},8,["as","class"])}}});function Ce(e){return(l,a)=>$e(l,a,r(e))}function $e(e,l,a){return ye(a,`messages.${e}`,e).replace(/\{(\w+)\}/g,(o,v)=>`${(l==null?void 0:l[v])??`{${v}}`}`)}function Ne(e){const l=x(()=>r(e).name),a=x(()=>r(e).code),i=x(()=>r(e).dir),o=ze(e)?e:se(e);return{lang:l,code:a,dir:i,locale:o,t:Ce(e)}}function Be(e){return qe(e,{dir:"ltr"})}const Ae=Be({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"}}}),Me=Symbol.for("nuxt-ui.locale-context"),Ve=e=>{const l=e||Ie(we(Me));return Ne(x(()=>l.value||Ae))},Fe=be(Ve),je={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"}},Le={__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(e,{emit:l}){const a=e,i=l,o=re(),{t:v}=Fe(),q=ne(),n=x(()=>{var u;return j({extend:j(je),...((u=q.ui)==null?void 0:u.alert)||{}})({color:a.color,variant:a.variant,orientation:a.orientation,title:!!a.title||!!o.title})});return(u,S)=>{var k;return s(),f(r(ae),{as:e.as,"data-orientation":e.orientation,class:c(n.value.root({class:[(k=a.ui)==null?void 0:k.root,a.class]}))},{default:le(()=>{var C,$,N,B,A,M,V,I;return[p(u.$slots,"leading",{},()=>{var g,m,F;return[e.avatar?(s(),f(ie,z({key:0,size:((g=a.ui)==null?void 0:g.avatarSize)||n.value.avatarSize()},e.avatar,{class:n.value.avatar({class:(m=a.ui)==null?void 0:m.avatar})}),null,16,["size","class"])):e.icon?(s(),f(T,{key:1,name:e.icon,class:c(n.value.icon({class:(F=a.ui)==null?void 0:F.icon}))},null,8,["name","class"])):d("",!0)]}),oe("div",{class:c(n.value.wrapper({class:(C=a.ui)==null?void 0:C.wrapper}))},[e.title||o.title?(s(),b("div",{key:0,class:c(n.value.title({class:($=a.ui)==null?void 0:$.title}))},[p(u.$slots,"title",{},()=>[Z(_(e.title),1)])],2)):d("",!0),e.description||o.description?(s(),b("div",{key:1,class:c(n.value.description({class:(N=a.ui)==null?void 0:N.description}))},[p(u.$slots,"description",{},()=>[Z(_(e.description),1)])],2)):d("",!0),e.orientation==="vertical"&&((B=e.actions)!=null&&B.length||o.actions)?(s(),b("div",{key:2,class:c(n.value.actions({class:(A=a.ui)==null?void 0:A.actions}))},[p(u.$slots,"actions",{},()=>[(s(!0),b(ee,null,te(e.actions,(g,m)=>(s(),f(L,z({key:m,size:"xs"},{ref_for:!0},g),null,16))),128))])],2)):d("",!0)],2),e.orientation==="horizontal"&&((M=e.actions)!=null&&M.length||o.actions)||e.close?(s(),b("div",{key:0,class:c(n.value.actions({class:(V=a.ui)==null?void 0:V.actions,orientation:"horizontal"}))},[e.orientation==="horizontal"&&((I=e.actions)!=null&&I.length||o.actions)?p(u.$slots,"actions",{key:0},()=>[(s(!0),b(ee,null,te(e.actions,(g,m)=>(s(),f(L,z({key:m,size:"xs"},{ref_for:!0},g),null,16))),128))]):d("",!0),p(u.$slots,"close",{ui:n.value},()=>{var g;return[e.close?(s(),f(L,z({key:0,icon:e.closeIcon||r(q).ui.icons.close,size:"md",color:"neutral",variant:"link","aria-label":r(v)("alert.close")},typeof e.close=="object"?e.close:{},{class:n.value.close({class:(g=a.ui)==null?void 0:g.close}),onClick:S[0]||(S[0]=m=>i("update:open",!1))}),null,16,["icon","aria-label","class"])):d("",!0)]})],2)):d("",!0)]}),_:3},8,["as","data-orientation","class"])}}};export{Pe as _,Le as a}; diff --git a/TerraformRegistry/web/_nuxt/BvVBPIAF.js b/TerraformRegistry/web/_nuxt/BvVBPIAF.js new file mode 100644 index 0000000..12c53bb --- /dev/null +++ b/TerraformRegistry/web/_nuxt/BvVBPIAF.js @@ -0,0 +1 @@ +import l from"./DZhRnb1V.js";import{_ as d,a as m}from"./CyQxyuxc.js";import{e as c,f as _,n as f,c as u,o as x,a as e,b as o,w as n,d as g}from"./DfbLerQ4.js";import"./CDgII3bh.js";const p={class:"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center"},b={class:"max-w-md w-full mx-4 fade-in"},h={class:"text-center p-8"},w={class:"w-20 h-20 mx-auto mb-6 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-2xl flex items-center justify-center shadow-lg slide-in"},T=c({__name:"index",setup(y){const{isAuthenticated:s}=_();return s.value&&f("/modules"),(v,t)=>{const a=l,i=d,r=m;return x(),u("div",p,[e("div",b,[o(r,null,{default:n(()=>[e("div",h,[e("div",w,[o(a,{name:"material-symbols:engineering",class:"text-3xl text-white"})]),t[1]||(t[1]=e("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white mb-3"}," Terraform Registry ",-1)),o(i,{to:"/login",size:"lg",class:"w-full",color:"primary",variant:"solid"},{default:n(()=>t[0]||(t[0]=[g(" Sign In to Continue ")])),_:1,__:[0]})])]),_:1})])])}}});export{T as default}; diff --git a/TerraformRegistry/web/_nuxt/CDgII3bh.js b/TerraformRegistry/web/_nuxt/CDgII3bh.js new file mode 100644 index 0000000..ec61a8c --- /dev/null +++ b/TerraformRegistry/web/_nuxt/CDgII3bh.js @@ -0,0 +1 @@ +import{e as T,g as _,a4 as j,r as N,a5 as A,z as B,a6 as E,a7 as U,a8 as I,a9 as F,K as L,h as P,aa as H,ab as k,ac as V,s as p,ad as O,ae as z,af as D,n as M,ag as W,ah as $,ai as G}from"./DfbLerQ4.js";const K=(...t)=>t.find(u=>u!==void 0);function Q(t){const u=t.componentName||"NuxtLink";function h(e){return typeof e=="string"&&e.startsWith("#")}function R(e,r,b){const a=b??t.trailingSlash;if(!e||a!=="append"&&a!=="remove")return e;if(typeof e=="string")return C(e,a);const o="path"in e&&e.path!==void 0?e.path:r(e).path;return{...e,name:void 0,path:C(o,a)}}function q(e){const r=_(),b=D(),a=p(()=>!!e.target&&e.target!=="_self"),o=p(()=>{const f=e.to||e.href||"";return typeof f=="string"&&O(f,{acceptRelative:!0})}),x=P("RouterLink"),g=x&&typeof x!="string"?x.useLink:void 0,d=p(()=>{if(e.external)return!0;const f=e.to||e.href||"";return typeof f=="object"?!1:f===""||o.value}),l=p(()=>{const f=e.to||e.href||"";return d.value?f:R(f,r.resolve,e.trailingSlash)}),c=d.value||g==null?void 0:g({...e,to:l}),y=p(()=>{var S;const f=e.trailingSlash??t.trailingSlash;if(!l.value||o.value||h(l.value))return l.value;if(d.value){const m=typeof l.value=="object"&&"path"in l.value?k(l.value):l.value,n=typeof m=="object"?r.resolve(m).href:m;return C(n,f)}return typeof l.value=="object"?((S=r.resolve(l.value))==null?void 0:S.href)??null:C(z(b.app.baseURL,l.value),f)});return{to:l,hasTarget:a,isAbsoluteUrl:o,isExternal:d,href:y,isActive:(c==null?void 0:c.isActive)??p(()=>l.value===r.currentRoute.value.path),isExactActive:(c==null?void 0:c.isExactActive)??p(()=>l.value===r.currentRoute.value.path),route:(c==null?void 0:c.route)??p(()=>r.resolve(l.value)),async navigate(f){await M(y.value,{replace:e.replace,external:d.value||a.value})}}}return T({name:u,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:q,setup(e,{slots:r}){const b=_(),{to:a,href:o,navigate:x,isExternal:g,hasTarget:d,isAbsoluteUrl:l}=q(e),c=j(!1),y=N(null),f=n=>{var s;y.value=e.custom?(s=n==null?void 0:n.$el)==null?void 0:s.nextElementSibling:n==null?void 0:n.$el};function S(n){var s,i;return!c.value&&(typeof e.prefetchOn=="string"?e.prefetchOn===n:((s=e.prefetchOn)==null?void 0:s[n])??((i=t.prefetchOn)==null?void 0:i[n]))&&(e.prefetch??t.prefetch)!==!1&&e.noPrefetch!==!0&&e.target!=="_blank"&&!Y()}async function m(n=A()){if(c.value)return;c.value=!0;const s=typeof a.value=="string"?a.value:g.value?k(a.value):b.resolve(a.value).fullPath,i=g.value?new URL(s,window.location.href).href:s;await Promise.all([n.hooks.callHook("link:prefetch",i).catch(()=>{}),!g.value&&!d.value&&V(a.value,b).catch(()=>{})])}if(S("visibility")){const n=A();let s,i=null;B(()=>{const v=J();E(()=>{s=U(()=>{var w;(w=y==null?void 0:y.value)!=null&&w.tagName&&(i=v.observe(y.value,async()=>{i==null||i(),i=null,await m(n)}))})})}),I(()=>{s&&F(s),i==null||i(),i=null})}return()=>{var i;if(!g.value&&!d.value&&!h(a.value)){const v={ref:f,to:a.value,activeClass:e.activeClass||t.activeClass,exactActiveClass:e.exactActiveClass||t.exactActiveClass,replace:e.replace,ariaCurrentValue:e.ariaCurrentValue,custom:e.custom};return e.custom||(S("interaction")&&(v.onPointerenter=m.bind(null,void 0),v.onFocus=m.bind(null,void 0)),c.value&&(v.class=e.prefetchedClass||t.prefetchedClass),v.rel=e.rel||void 0),L(P("RouterLink"),v,r.default)}const n=e.target||null,s=K(e.noRel?"":e.rel,t.externalRelAttribute,l.value||d.value?"noopener noreferrer":"")||null;return e.custom?r.default?r.default({href:o.value,navigate:x,prefetch:m,get route(){if(!o.value)return;const v=new URL(o.value,window.location.href);return{path:v.pathname,fullPath:v.pathname,get query(){return H(v.search)},hash:v.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:o.value}},rel:s,target:n,isExternal:g.value||d.value,isActive:!1,isExactActive:!1}):null:L("a",{ref:y,href:o.value||null,rel:s,target:n},(i=r.default)==null?void 0:i.call(r))}}})}const ee=Q(G);function C(t,u){const h=u==="append"?W:$;return O(t)&&!t.startsWith("http")?t:h(t,!0)}function J(){const t=A();if(t._observer)return t._observer;let u=null;const h=new Map,R=(e,r)=>(u||(u=new IntersectionObserver(b=>{for(const a of b){const o=h.get(a.target);(a.isIntersecting||a.intersectionRatio>0)&&o&&o()}})),h.set(e,r),u.observe(e),()=>{h.delete(e),u==null||u.unobserve(e),h.size===0&&(u==null||u.disconnect(),u=null)});return t._observer={observe:R}}const X=/2g/;function Y(){const t=navigator.connection;return!!(t&&(t.saveData||X.test(t.effectiveType)))}export{ee as _}; diff --git a/TerraformRegistry/web/_nuxt/CjNMrKxF.js b/TerraformRegistry/web/_nuxt/CjNMrKxF.js new file mode 100644 index 0000000..0118f4b --- /dev/null +++ b/TerraformRegistry/web/_nuxt/CjNMrKxF.js @@ -0,0 +1 @@ +import{e as r,c as a,v as o,o as t}from"./DfbLerQ4.js";const s={class:"min-h-screen bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-900 dark:to-gray-800"},l=r({__name:"default",setup(n){return(e,c)=>(t(),a("div",s,[o(e.$slots,"default")]))}});export{l as default}; diff --git a/TerraformRegistry/web/_nuxt/CwuZat6W.js b/TerraformRegistry/web/_nuxt/CwuZat6W.js new file mode 100644 index 0000000..52a2f99 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/CwuZat6W.js @@ -0,0 +1 @@ +import A from"./DZhRnb1V.js";import{_ as U,a as V}from"./BLEGckhC.js";import{_ as B,a as I}from"./CyQxyuxc.js";import{e as P,f as c,g as T,r as m,n as C,c as N,a as t,b as s,w as l,h as $,o as u,i as j,j as z,k as R,l as a,m as S,d as _}from"./DfbLerQ4.js";import"./CDgII3bh.js";const q={class:"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center px-4"},E={class:"max-w-md w-full fade-in"},F={class:"text-center mb-8 slide-in"},G={class:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-lg"},L={class:"p-6"},H={class:"text-center mt-6"},Q=P({__name:"login",setup(M){const{login:f}=c(),p=T(),o=m(""),r=m(!1),n=m(""),g=async()=>{if(!o.value.trim()){n.value="Please enter a valid API token";return}r.value=!0,n.value="";try{await new Promise(i=>setTimeout(i,500)),f(o.value.trim()),await p.push("/modules")}catch{n.value="An error occurred. Please try again."}finally{r.value=!1}},{isAuthenticated:x}=c();return x.value&&C("/modules"),(i,e)=>{const v=A,y=U,b=$("UFormGroup"),k=V,d=B,w=I;return u(),N("div",q,[t("div",E,[t("div",F,[t("div",G,[s(v,{name:"material-symbols:lock",class:"text-2xl text-white"})]),e[1]||(e[1]=t("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white mb-2"}," Welcome ",-1)),e[2]||(e[2]=t("p",{class:"text-gray-600 dark:text-gray-400"}," Sign in to access your Terraform Registry ",-1))]),s(w,null,{default:l(()=>[t("div",L,[t("form",{onSubmit:j(g,["prevent"]),class:"space-y-6"},[s(b,{label:"API Token",name:"token",required:""},{default:l(()=>[s(y,{modelValue:a(o),"onUpdate:modelValue":e[0]||(e[0]=h=>S(o)?o.value=h:null),type:"password",placeholder:"Enter your API token",size:"lg",required:"",loading:a(r),class:"w-full"},null,8,["modelValue","loading"])]),_:1}),a(n)?(u(),z(k,{key:0,color:"error",variant:"soft",title:a(n),class:"mb-4"},null,8,["title"])):R("",!0),s(d,{type:"submit",loading:a(r),disabled:!a(o).trim(),class:"w-full",size:"lg",color:"primary"},{default:l(()=>e[3]||(e[3]=[_(" Sign In ")])),_:1,__:[3]},8,["loading","disabled"])],32)])]),_:1}),t("div",H,[s(d,{to:"/",variant:"ghost",color:"neutral",size:"sm"},{default:l(()=>e[4]||(e[4]=[_(" ← Back to Home ")])),_:1,__:[4]})])])])}}});export{Q as default}; diff --git a/TerraformRegistry/web/_nuxt/CyQxyuxc.js b/TerraformRegistry/web/_nuxt/CyQxyuxc.js new file mode 100644 index 0000000..3bf58e3 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/CyQxyuxc.js @@ -0,0 +1 @@ +import{F as Ar,e as rr,I as Ir,y as D,J as Pr,K as Se,L as jr,G as tr,s as P,M as ke,N as Or,q as ye,O as pe,H as Y,P as Mr,Q as Gr,R as Vr,m as ze,S as We,l as N,T as Br,r as Ne,U as Nr,V as nr,W as $r,X as Tr,Y as sr,j as L,o as G,Z as $e,$ as Rr,a0 as Er,w as Z,a1 as Lr,v as H,c as ge,x as W,t as ar,a2 as Kr,a3 as Wr,E as ir,p as or,b as Dr,k as oe}from"./DfbLerQ4.js";import Hr from"./DZhRnb1V.js";import{_ as Jr}from"./CDgII3bh.js";function lr(e){return e?e.flatMap(r=>r.type===Ar?lr(r.children):[r]):[]}const cr=rr({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:r,slots:t}){return()=>{var o;if(!t.default)return null;const s=lr(t.default()),n=s.findIndex(d=>d.type!==Ir);if(n===-1)return s;const a=s[n];(o=a.props)==null||delete o.ref;const i=a.props?D(r,a.props):r,l=Pr({...a,props:{}},i);return s.length===1?l:(s[n]=l,s)}}}),Fr=["area","img","input"],Te=rr({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:r,slots:t}){const s=e.asChild?"template":e.as;return typeof s=="string"&&Fr.includes(s)?()=>Se(s,r):s!=="template"?()=>Se(e.as,r,{default:t.default}):()=>Se(cr,r,{default:t.default})}});function Re(e){const r=jr(),t=Object.keys((r==null?void 0:r.type.props)??{}).reduce((n,a)=>{const i=(r==null?void 0:r.type.props[a]).default;return i!==void 0&&(n[a]=i),n},{}),s=tr(e);return P(()=>{const n=ke(s.value),a={},i=(r==null?void 0:r.vnode.props)??{};return Object.keys(i).forEach(l=>{a[Or(l)]=i[l]}),Object.keys({...t,...a}).reduce((l,o)=>{var b;const d=(b=n[o])==null?void 0:b.value;return d!==void 0&&(l[o]=d),l},{})})}function Qr(e){const r=ye(),t=P(()=>pe(e)),s=P(()=>t.value.icon&&t.value.leading||t.value.icon&&!t.value.trailing||t.value.loading&&!t.value.trailing||!!t.value.leadingIcon),n=P(()=>t.value.icon&&t.value.trailing||t.value.loading&&t.value.trailing||!!t.value.trailingIcon),a=P(()=>t.value.loading?t.value.loadingIcon||r.ui.icons.loading:t.value.leadingIcon||t.value.icon),i=P(()=>t.value.loading&&!s.value?t.value.loadingIcon||r.ui.icons.loading:t.value.trailingIcon||t.value.icon);return{isLeading:s,isTrailing:n,leadingIconName:a,trailingIconName:i}}const Ur=Symbol("nuxt-ui.button-group");function Xr(e){const r=Y(Ur,void 0);return{orientation:P(()=>r==null?void 0:r.value.orientation),size:P(()=>(e==null?void 0:e.size)??(r==null?void 0:r.value.size))}}function Yr(e){return Gr()?(Vr(e),!0):!1}function yn(e){let r=0,t,s;const n=()=>{r-=1,s&&r<=0&&(s.stop(),t=void 0,s=void 0)};return(...a)=>(r+=1,s||(s=Mr(!0),t=s.run(()=>e(...a))),Yr(n),t)}function Zr(e){if(!ze(e))return We(e);const r=new Proxy({},{get(t,s,n){return N(Reflect.get(e.value,s,n))},set(t,s,n){return ze(e.value[s])&&!ze(n)?e.value[s].value=n:e.value[s]=n,!0},deleteProperty(t,s){return Reflect.deleteProperty(e.value,s)},has(t,s){return Reflect.has(e.value,s)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return We(r)}function ur(e){return Zr(P(e))}function _r(e,...r){const t=r.flat(),s=t[0];return ur(()=>Object.fromEntries(typeof s=="function"?Object.entries(ke(e)).filter(([n,a])=>!s(pe(a),n)):Object.entries(ke(e)).filter(n=>!t.includes(n[0]))))}typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ae=()=>{};function et(...e){if(e.length!==1)return tr(...e);const r=e[0];return typeof r=="function"?Br(Nr(()=>({get:r,set:Ae}))):Ne(r)}function dr(e,...r){const t=r.flat(),s=t[0];return ur(()=>Object.fromEntries(typeof s=="function"?Object.entries(ke(e)).filter(([n,a])=>s(pe(a),n)):t.map(n=>[n,et(e,n)])))}function rt(e,r){function t(...s){return new Promise((n,a)=>{Promise.resolve(e(()=>r.apply(this,s),{fn:r,thisArg:this,args:s})).then(n).catch(a)})}return t}function tt(e,r={}){let t,s,n=Ae;const a=o=>{clearTimeout(o),n(),n=Ae};let i;return o=>{const d=pe(e),b=pe(r.maxWait);return t&&a(t),d<=0||b!==void 0&&b<=0?(s&&(a(s),s=null),Promise.resolve(o())):new Promise((z,I)=>{n=r.rejectOnCancel?I:z,i=o,b&&!s&&(s=setTimeout(()=>{t&&a(t),s=null,z(i())},b)),t=setTimeout(()=>{s&&a(s),s=null,z(o())},d)})}}function nt(e,r=200,t={}){return rt(tt(r,t),e)}const st=Symbol("nuxt-ui.form-options"),at=Symbol("nuxt-ui.form-events"),De=Symbol("nuxt-ui.form-field"),it=Symbol("nuxt-ui.input-id"),ot=Symbol("nuxt-ui.form-inputs"),lt=Symbol("nuxt-ui.form-loading");function mn(e,r){const t=Y(st,void 0),s=Y(at,void 0),n=Y(De,void 0),a=Y(ot,void 0),i=Y(it,void 0);nr(De,void 0),n&&i&&((r==null?void 0:r.bind)===!1?i.value=void 0:e!=null&&e.id&&(i.value=e==null?void 0:e.id),a&&n.value.name&&i.value&&(a.value[n.value.name]={id:i.value,pattern:n.value.errorPattern}));function l(I,j,k){s&&n&&j&&s.emit({type:I,name:j,eager:k})}function o(){l("blur",n==null?void 0:n.value.name)}function d(){l("focus",n==null?void 0:n.value.name)}function b(){l("change",n==null?void 0:n.value.name)}const z=nt(()=>{l("input",n==null?void 0:n.value.name,n==null?void 0:n.value.eagerValidation)},(n==null?void 0:n.value.validateOnInputDelay)??(t==null?void 0:t.value.validateOnInputDelay)??0);return{id:P(()=>(e==null?void 0:e.id)??(i==null?void 0:i.value)),name:P(()=>(e==null?void 0:e.name)??(n==null?void 0:n.value.name)),size:P(()=>(e==null?void 0:e.size)??(n==null?void 0:n.value.size)),color:P(()=>n!=null&&n.value.error?"error":e==null?void 0:e.color),highlight:P(()=>n!=null&&n.value.error?!0:e==null?void 0:e.highlight),disabled:P(()=>(t==null?void 0:t.value.disabled)||(e==null?void 0:e.disabled)),emitFormBlur:o,emitFormInput:z,emitFormChange:b,emitFormFocus:d,ariaAttrs:P(()=>n!=null&&n.value?{"aria-describedby":(["error","hint","description","help"].filter(j=>{var k;return(k=n==null?void 0:n.value)==null?void 0:k[j]}).map(j=>`${n==null?void 0:n.value.ariaId}-${j}`)||[]).join(" "),"aria-invalid":!!(n!=null&&n.value.error)}:void 0)}}function ct(e,r){const t=Ie(e),s=Ie(r);return fr(t,s)}function fr(e,r){var n,a;const t=[],s=new Set([...Object.keys(e.props||{}),...Object.keys(r.props||{})]);if(e.props&&r.props)for(const i of s){const l=e.props[i],o=r.props[i];l&&o?t.push(...fr((n=e.props)==null?void 0:n[i],(a=r.props)==null?void 0:a[i])):(l||o)&&t.push(new He((o||l).key,l?"removed":"added",o,l))}return s.size===0&&e.hash!==r.hash&&t.push(new He((r||e).key,"changed",r,e)),t}function Ie(e,r=""){if(e&&typeof e!="object")return new Je(r,e,$r(e));const t={},s=[];for(const n in e)t[n]=Ie(e[n],r?`${r}.${n}`:n),s.push(t[n].hash);return new Je(r,e,`{${s.join(":")}}`,t)}class He{constructor(r,t,s,n){this.key=r,this.type=t,this.newValue=s,this.oldValue=n}toString(){return this.toJSON()}toJSON(){var r;switch(this.type){case"added":return`Added \`${this.key}\``;case"removed":return`Removed \`${this.key}\``;case"changed":return`Changed \`${this.key}\` from \`${((r=this.oldValue)==null?void 0:r.toString())||"-"}\` to \`${this.newValue.toString()}\``}}}class Je{constructor(r,t,s,n){this.key=r,this.value=t,this.hash=s,this.props=n}toString(){return this.props?`{${Object.keys(this.props).join(",")}}`:JSON.stringify(this.value)}toJSON(){const r=this.key||".";return this.props?`${r}({${Object.keys(this.props).join(",")}})`:`${r}(${this.value})`}}function ut(e,r){const t={...e};for(const s of r)delete t[s];return t}function hn(e,r,t){typeof r=="string"&&(r=r.split(".").map(n=>{const a=Number(n);return Number.isNaN(a)?n:a}));let s=e;for(const n of r){if(s==null)return t;s=s[n]}return s!==void 0?s:t}function xn(e){const r=Number.parseFloat(e);return Number.isNaN(r)?e:r}var Fe=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,E=e=>!e||typeof e!="object"||Object.keys(e).length===0,dt=(e,r)=>JSON.stringify(e)===JSON.stringify(r);function br(e,r){e.forEach(function(t){Array.isArray(t)?br(t,r):r.push(t)})}function gr(e){let r=[];return br(e,r),r}var pr=(...e)=>gr(e).filter(Boolean),Ee=(e,r)=>{let t={},s=Object.keys(e),n=Object.keys(r);for(let a of s)if(n.includes(a)){let i=e[a],l=r[a];Array.isArray(i)||Array.isArray(l)?t[a]=pr(l,i):typeof i=="object"&&typeof l=="object"?t[a]=Ee(i,l):t[a]=l+" "+i}else t[a]=e[a];for(let a of n)s.includes(a)||(t[a]=r[a]);return t},Qe=e=>!e||typeof e!="string"?e:e.replace(/\s+/g," ").trim();const Le="-",ft=e=>{const r=gt(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:s}=e;return{getClassGroupId:i=>{const l=i.split(Le);return l[0]===""&&l.length!==1&&l.shift(),vr(l,r)||bt(i)},getConflictingClassGroupIds:(i,l)=>{const o=t[i]||[];return l&&s[i]?[...o,...s[i]]:o}}},vr=(e,r)=>{var i;if(e.length===0)return r.classGroupId;const t=e[0],s=r.nextPart.get(t),n=s?vr(e.slice(1),s):void 0;if(n)return n;if(r.validators.length===0)return;const a=e.join(Le);return(i=r.validators.find(({validator:l})=>l(a)))==null?void 0:i.classGroupId},Ue=/^\[(.+)\]$/,bt=e=>{if(Ue.test(e)){const r=Ue.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},gt=e=>{const{theme:r,classGroups:t}=e,s={nextPart:new Map,validators:[]};for(const n in t)Pe(t[n],s,n,r);return s},Pe=(e,r,t,s)=>{e.forEach(n=>{if(typeof n=="string"){const a=n===""?r:Xe(r,n);a.classGroupId=t;return}if(typeof n=="function"){if(pt(n)){Pe(n(s),r,t,s);return}r.validators.push({validator:n,classGroupId:t});return}Object.entries(n).forEach(([a,i])=>{Pe(i,Xe(r,a),t,s)})})},Xe=(e,r)=>{let t=e;return r.split(Le).forEach(s=>{t.nextPart.has(s)||t.nextPart.set(s,{nextPart:new Map,validators:[]}),t=t.nextPart.get(s)}),t},pt=e=>e.isThemeGetter,vt=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,s=new Map;const n=(a,i)=>{t.set(a,i),r++,r>e&&(r=0,s=t,t=new Map)};return{get(a){let i=t.get(a);if(i!==void 0)return i;if((i=s.get(a))!==void 0)return n(a,i),i},set(a,i){t.has(a)?t.set(a,i):n(a,i)}}},je="!",Oe=":",yt=Oe.length,mt=e=>{const{prefix:r,experimentalParseClassName:t}=e;let s=n=>{const a=[];let i=0,l=0,o=0,d;for(let k=0;ko?d-o:void 0;return{modifiers:a,hasImportantModifier:I,baseClassName:z,maybePostfixModifierPosition:j}};if(r){const n=r+Oe,a=s;s=i=>i.startsWith(n)?a(i.substring(n.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:i,maybePostfixModifierPosition:void 0}}if(t){const n=s;s=a=>t({className:a,parseClassName:n})}return s},ht=e=>e.endsWith(je)?e.substring(0,e.length-1):e.startsWith(je)?e.substring(1):e,xt=e=>{const r=Object.fromEntries(e.orderSensitiveModifiers.map(s=>[s,!0]));return s=>{if(s.length<=1)return s;const n=[];let a=[];return s.forEach(i=>{i[0]==="["||r[i]?(n.push(...a.sort(),i),a=[]):a.push(i)}),n.push(...a.sort()),n}},wt=e=>({cache:vt(e.cacheSize),parseClassName:mt(e),sortModifiers:xt(e),...ft(e)}),kt=/\s+/,St=(e,r)=>{const{parseClassName:t,getClassGroupId:s,getConflictingClassGroupIds:n,sortModifiers:a}=r,i=[],l=e.trim().split(kt);let o="";for(let d=l.length-1;d>=0;d-=1){const b=l[d],{isExternal:z,modifiers:I,hasImportantModifier:j,baseClassName:k,maybePostfixModifierPosition:q}=t(b);if(z){o=b+(o.length>0?" "+o:o);continue}let A=!!q,$=s(A?k.substring(0,q):k);if(!$){if(!A){o=b+(o.length>0?" "+o:o);continue}if($=s(k),!$){o=b+(o.length>0?" "+o:o);continue}A=!1}const v=a(I).join(":"),T=j?v+je:v,K=T+$;if(i.includes(K))continue;i.push(K);const V=n($,A);for(let g=0;g0?" "+o:o)}return o};function zt(){let e=0,r,t,s="";for(;e{if(typeof e=="string")return e;let r,t="";for(let s=0;sz(b),e());return t=wt(d),s=t.cache.get,n=t.cache.set,a=l,l(o)}function l(o){const d=s(o);if(d)return d;const b=St(o,t);return n(o,b),b}return function(){return a(zt.apply(null,arguments))}}const M=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},mr=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,hr=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ct=/^\d+\/\d+$/,qt=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,At=/\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$/,It=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Pt=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,jt=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ie=e=>Ct.test(e),x=e=>!!e&&!Number.isNaN(Number(e)),re=e=>!!e&&Number.isInteger(Number(e)),Ye=e=>e.endsWith("%")&&x(e.slice(0,-1)),X=e=>qt.test(e),Ot=()=>!0,Mt=e=>At.test(e)&&!It.test(e),Ke=()=>!1,Gt=e=>Pt.test(e),Vt=e=>jt.test(e),Bt=e=>!c(e)&&!u(e),Nt=e=>le(e,kr,Ke),c=e=>mr.test(e),te=e=>le(e,Sr,Mt),Ce=e=>le(e,Ft,x),$t=e=>le(e,xr,Ke),Tt=e=>le(e,wr,Vt),Rt=e=>le(e,Ke,Gt),u=e=>hr.test(e),he=e=>ce(e,Sr),Et=e=>ce(e,Qt),Lt=e=>ce(e,xr),Kt=e=>ce(e,kr),Wt=e=>ce(e,wr),Dt=e=>ce(e,Ut,!0),le=(e,r,t)=>{const s=mr.exec(e);return s?s[1]?r(s[1]):t(s[2]):!1},ce=(e,r,t=!1)=>{const s=hr.exec(e);return s?s[1]?r(s[1]):t:!1},xr=e=>e==="position",Ht=new Set(["image","url"]),wr=e=>Ht.has(e),Jt=new Set(["length","size","percentage"]),kr=e=>Jt.has(e),Sr=e=>e==="length",Ft=e=>e==="number",Qt=e=>e==="family-name",Ut=e=>e==="shadow",Ge=()=>{const e=M("color"),r=M("font"),t=M("text"),s=M("font-weight"),n=M("tracking"),a=M("leading"),i=M("breakpoint"),l=M("container"),o=M("spacing"),d=M("radius"),b=M("shadow"),z=M("inset-shadow"),I=M("drop-shadow"),j=M("blur"),k=M("perspective"),q=M("aspect"),A=M("ease"),$=M("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],K=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto","contain","none"],g=()=>[u,c,o],B=()=>[ie,"full","auto",...g()],ue=()=>[re,"none","subgrid",u,c],de=()=>["auto",{span:["full",re,u,c]},u,c],ne=()=>[re,"auto",u,c],me=()=>["auto","min","max","fr",u,c],h=()=>["start","end","center","between","around","evenly","stretch","baseline"],y=()=>["start","end","center","stretch"],p=()=>["auto",...g()],w=()=>[ie,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...g()],f=()=>[e,u,c],C=()=>[Ye,te],m=()=>["","none","full",d,u,c],S=()=>["",x,he,te],O=()=>["solid","dashed","dotted","double"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],R=()=>["","none",j,u,c],ee=()=>["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",u,c],Q=()=>["none",x,u,c],U=()=>["none",x,u,c],se=()=>[x,u,c],ae=()=>[ie,"full",...g()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[X],breakpoint:[X],color:[Ot],container:[X],"drop-shadow":[X],ease:["in","out","in-out"],font:[Bt],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[X],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[X],shadow:[X],spacing:["px",x],text:[X],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ie,c,u,q]}],container:["container"],columns:[{columns:[x,c,u,l]}],"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:[...T(),c,u]}],overflow:[{overflow:K()}],"overflow-x":[{"overflow-x":K()}],"overflow-y":[{"overflow-y":K()}],overscroll:[{overscroll:V()}],"overscroll-x":[{"overscroll-x":V()}],"overscroll-y":[{"overscroll-y":V()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:B()}],"inset-x":[{"inset-x":B()}],"inset-y":[{"inset-y":B()}],start:[{start:B()}],end:[{end:B()}],top:[{top:B()}],right:[{right:B()}],bottom:[{bottom:B()}],left:[{left:B()}],visibility:["visible","invisible","collapse"],z:[{z:[re,"auto",u,c]}],basis:[{basis:[ie,"full","auto",l,...g()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[x,ie,"auto","initial","none",c]}],grow:[{grow:["",x,u,c]}],shrink:[{shrink:["",x,u,c]}],order:[{order:[re,"first","last","none",u,c]}],"grid-cols":[{"grid-cols":ue()}],"col-start-end":[{col:de()}],"col-start":[{"col-start":ne()}],"col-end":[{"col-end":ne()}],"grid-rows":[{"grid-rows":ue()}],"row-start-end":[{row:de()}],"row-start":[{"row-start":ne()}],"row-end":[{"row-end":ne()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":me()}],"auto-rows":[{"auto-rows":me()}],gap:[{gap:g()}],"gap-x":[{"gap-x":g()}],"gap-y":[{"gap-y":g()}],"justify-content":[{justify:[...h(),"normal"]}],"justify-items":[{"justify-items":[...y(),"normal"]}],"justify-self":[{"justify-self":["auto",...y()]}],"align-content":[{content:["normal",...h()]}],"align-items":[{items:[...y(),"baseline"]}],"align-self":[{self:["auto",...y(),"baseline"]}],"place-content":[{"place-content":h()}],"place-items":[{"place-items":[...y(),"baseline"]}],"place-self":[{"place-self":["auto",...y()]}],p:[{p:g()}],px:[{px:g()}],py:[{py:g()}],ps:[{ps:g()}],pe:[{pe:g()}],pt:[{pt:g()}],pr:[{pr:g()}],pb:[{pb:g()}],pl:[{pl:g()}],m:[{m:p()}],mx:[{mx:p()}],my:[{my:p()}],ms:[{ms:p()}],me:[{me:p()}],mt:[{mt:p()}],mr:[{mr:p()}],mb:[{mb:p()}],ml:[{ml:p()}],"space-x":[{"space-x":g()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":g()}],"space-y-reverse":["space-y-reverse"],size:[{size:w()}],w:[{w:[l,"screen",...w()]}],"min-w":[{"min-w":[l,"screen","none",...w()]}],"max-w":[{"max-w":[l,"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",t,he,te]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[s,u,Ce]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Ye,c]}],"font-family":[{font:[Et,c,r]}],"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:[n,u,c]}],"line-clamp":[{"line-clamp":[x,"none",u,Ce]}],leading:[{leading:[a,...g()]}],"list-image":[{"list-image":["none",u,c]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",u,c]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:f()}],"text-color":[{text:f()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...O(),"wavy"]}],"text-decoration-thickness":[{decoration:[x,"from-font","auto",u,te]}],"text-decoration-color":[{decoration:f()}],"underline-offset":[{"underline-offset":[x,"auto",u,c]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:g()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",u,c]}],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",u,c]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...T(),Lt,$t]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","space","round"]}]}],"bg-size":[{bg:["auto","cover","contain",Kt,Nt]}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},re,u,c],radial:["",u,c],conic:[re,u,c]},Wt,Tt]}],"bg-color":[{bg:f()}],"gradient-from-pos":[{from:C()}],"gradient-via-pos":[{via:C()}],"gradient-to-pos":[{to:C()}],"gradient-from":[{from:f()}],"gradient-via":[{via:f()}],"gradient-to":[{to:f()}],rounded:[{rounded:m()}],"rounded-s":[{"rounded-s":m()}],"rounded-e":[{"rounded-e":m()}],"rounded-t":[{"rounded-t":m()}],"rounded-r":[{"rounded-r":m()}],"rounded-b":[{"rounded-b":m()}],"rounded-l":[{"rounded-l":m()}],"rounded-ss":[{"rounded-ss":m()}],"rounded-se":[{"rounded-se":m()}],"rounded-ee":[{"rounded-ee":m()}],"rounded-es":[{"rounded-es":m()}],"rounded-tl":[{"rounded-tl":m()}],"rounded-tr":[{"rounded-tr":m()}],"rounded-br":[{"rounded-br":m()}],"rounded-bl":[{"rounded-bl":m()}],"border-w":[{border:S()}],"border-w-x":[{"border-x":S()}],"border-w-y":[{"border-y":S()}],"border-w-s":[{"border-s":S()}],"border-w-e":[{"border-e":S()}],"border-w-t":[{"border-t":S()}],"border-w-r":[{"border-r":S()}],"border-w-b":[{"border-b":S()}],"border-w-l":[{"border-l":S()}],"divide-x":[{"divide-x":S()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":S()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...O(),"hidden","none"]}],"divide-style":[{divide:[...O(),"hidden","none"]}],"border-color":[{border:f()}],"border-color-x":[{"border-x":f()}],"border-color-y":[{"border-y":f()}],"border-color-s":[{"border-s":f()}],"border-color-e":[{"border-e":f()}],"border-color-t":[{"border-t":f()}],"border-color-r":[{"border-r":f()}],"border-color-b":[{"border-b":f()}],"border-color-l":[{"border-l":f()}],"divide-color":[{divide:f()}],"outline-style":[{outline:[...O(),"none","hidden"]}],"outline-offset":[{"outline-offset":[x,u,c]}],"outline-w":[{outline:["",x,he,te]}],"outline-color":[{outline:[e]}],shadow:[{shadow:["","none",b,Dt,Rt]}],"shadow-color":[{shadow:f()}],"inset-shadow":[{"inset-shadow":["none",u,c,z]}],"inset-shadow-color":[{"inset-shadow":f()}],"ring-w":[{ring:S()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:f()}],"ring-offset-w":[{"ring-offset":[x,te]}],"ring-offset-color":[{"ring-offset":f()}],"inset-ring-w":[{"inset-ring":S()}],"inset-ring-color":[{"inset-ring":f()}],opacity:[{opacity:[x,u,c]}],"mix-blend":[{"mix-blend":[...J(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none",u,c]}],blur:[{blur:R()}],brightness:[{brightness:[x,u,c]}],contrast:[{contrast:[x,u,c]}],"drop-shadow":[{"drop-shadow":["","none",I,u,c]}],grayscale:[{grayscale:["",x,u,c]}],"hue-rotate":[{"hue-rotate":[x,u,c]}],invert:[{invert:["",x,u,c]}],saturate:[{saturate:[x,u,c]}],sepia:[{sepia:["",x,u,c]}],"backdrop-filter":[{"backdrop-filter":["","none",u,c]}],"backdrop-blur":[{"backdrop-blur":R()}],"backdrop-brightness":[{"backdrop-brightness":[x,u,c]}],"backdrop-contrast":[{"backdrop-contrast":[x,u,c]}],"backdrop-grayscale":[{"backdrop-grayscale":["",x,u,c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[x,u,c]}],"backdrop-invert":[{"backdrop-invert":["",x,u,c]}],"backdrop-opacity":[{"backdrop-opacity":[x,u,c]}],"backdrop-saturate":[{"backdrop-saturate":[x,u,c]}],"backdrop-sepia":[{"backdrop-sepia":["",x,u,c]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":g()}],"border-spacing-x":[{"border-spacing-x":g()}],"border-spacing-y":[{"border-spacing-y":g()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",u,c]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[x,"initial",u,c]}],ease:[{ease:["linear","initial",A,u,c]}],delay:[{delay:[x,u,c]}],animate:[{animate:["none",$,u,c]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[k,u,c]}],"perspective-origin":[{"perspective-origin":ee()}],rotate:[{rotate:Q()}],"rotate-x":[{"rotate-x":Q()}],"rotate-y":[{"rotate-y":Q()}],"rotate-z":[{"rotate-z":Q()}],scale:[{scale:U()}],"scale-x":[{"scale-x":U()}],"scale-y":[{"scale-y":U()}],"scale-z":[{"scale-z":U()}],"scale-3d":["scale-3d"],skew:[{skew:se()}],"skew-x":[{"skew-x":se()}],"skew-y":[{"skew-y":se()}],transform:[{transform:[u,c,"","none","gpu","cpu"]}],"transform-origin":[{origin:ee()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:ae()}],"translate-x":[{"translate-x":ae()}],"translate-y":[{"translate-y":ae()}],"translate-z":[{"translate-z":ae()}],"translate-none":["translate-none"],accent:[{accent:f()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:f()}],"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",u,c]}],"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":g()}],"scroll-mx":[{"scroll-mx":g()}],"scroll-my":[{"scroll-my":g()}],"scroll-ms":[{"scroll-ms":g()}],"scroll-me":[{"scroll-me":g()}],"scroll-mt":[{"scroll-mt":g()}],"scroll-mr":[{"scroll-mr":g()}],"scroll-mb":[{"scroll-mb":g()}],"scroll-ml":[{"scroll-ml":g()}],"scroll-p":[{"scroll-p":g()}],"scroll-px":[{"scroll-px":g()}],"scroll-py":[{"scroll-py":g()}],"scroll-ps":[{"scroll-ps":g()}],"scroll-pe":[{"scroll-pe":g()}],"scroll-pt":[{"scroll-pt":g()}],"scroll-pr":[{"scroll-pr":g()}],"scroll-pb":[{"scroll-pb":g()}],"scroll-pl":[{"scroll-pl":g()}],"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",u,c]}],fill:[{fill:["none",...f()]}],"stroke-w":[{stroke:[x,he,te,Ce]}],stroke:[{stroke:["none",...f()]}],"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","*","**"]}},Xt=(e,{cacheSize:r,prefix:t,experimentalParseClassName:s,extend:n={},override:a={}})=>(be(e,"cacheSize",r),be(e,"prefix",t),be(e,"experimentalParseClassName",s),xe(e.theme,a.theme),xe(e.classGroups,a.classGroups),xe(e.conflictingClassGroups,a.conflictingClassGroups),xe(e.conflictingClassGroupModifiers,a.conflictingClassGroupModifiers),be(e,"orderSensitiveModifiers",a.orderSensitiveModifiers),we(e.theme,n.theme),we(e.classGroups,n.classGroups),we(e.conflictingClassGroups,n.conflictingClassGroups),we(e.conflictingClassGroupModifiers,n.conflictingClassGroupModifiers),zr(e,n,"orderSensitiveModifiers"),e),be=(e,r,t)=>{t!==void 0&&(e[r]=t)},xe=(e,r)=>{if(r)for(const t in r)be(e,t,r[t])},we=(e,r)=>{if(r)for(const t in r)zr(e,r,t)},zr=(e,r,t)=>{const s=r[t];s!==void 0&&(e[t]=e[t]?e[t].concat(s):s)},Yt=(e,...r)=>typeof e=="function"?Me(Ge,e,...r):Me(()=>Xt(Ge(),e),...r),Zt=Me(Ge);var _t={twMerge:!0,twMergeConfig:{},responsiveVariants:!1},Cr=e=>e||void 0,ve=(...e)=>Cr(gr(e).filter(Boolean).join(" ")),qe=null,F={},Ve=!1,fe=(...e)=>r=>r.twMerge?((!qe||Ve)&&(Ve=!1,qe=E(F)?Zt:Yt({...F,extend:{theme:F.theme,classGroups:F.classGroups,conflictingClassGroupModifiers:F.conflictingClassGroupModifiers,conflictingClassGroups:F.conflictingClassGroups,...F.extend}})),Cr(qe(ve(e)))):ve(e),Ze=(e,r)=>{for(let t in r)e.hasOwnProperty(t)?e[t]=ve(e[t],r[t]):e[t]=r[t];return e},en=(e,r)=>{let{extend:t=null,slots:s={},variants:n={},compoundVariants:a=[],compoundSlots:i=[],defaultVariants:l={}}=e,o={..._t,...r},d=t!=null&&t.base?ve(t.base,e==null?void 0:e.base):e==null?void 0:e.base,b=t!=null&&t.variants&&!E(t.variants)?Ee(n,t.variants):n,z=t!=null&&t.defaultVariants&&!E(t.defaultVariants)?{...t.defaultVariants,...l}:l;!E(o.twMergeConfig)&&!dt(o.twMergeConfig,F)&&(Ve=!0,F=o.twMergeConfig);let I=E(t==null?void 0:t.slots),j=E(s)?{}:{base:ve(e==null?void 0:e.base,I&&(t==null?void 0:t.base)),...s},k=I?j:Ze({...t==null?void 0:t.slots},E(j)?{base:e==null?void 0:e.base}:j),q=E(t==null?void 0:t.compoundVariants)?a:pr(t==null?void 0:t.compoundVariants,a),A=v=>{if(E(b)&&E(s)&&I)return fe(d,v==null?void 0:v.class,v==null?void 0:v.className)(o);if(q&&!Array.isArray(q))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof q}`);if(i&&!Array.isArray(i))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof i}`);let T=(h,y,p=[],w)=>{let f=p;if(typeof y=="string")f=f.concat(Qe(y).split(" ").map(C=>`${h}:${C}`));else if(Array.isArray(y))f=f.concat(y.reduce((C,m)=>C.concat(`${h}:${m}`),[]));else if(typeof y=="object"&&typeof w=="string"){for(let C in y)if(y.hasOwnProperty(C)&&C===w){let m=y[C];if(m&&typeof m=="string"){let S=Qe(m);f[w]?f[w]=f[w].concat(S.split(" ").map(O=>`${h}:${O}`)):f[w]=S.split(" ").map(O=>`${h}:${O}`)}else Array.isArray(m)&&m.length>0&&(f[w]=m.reduce((S,O)=>S.concat(`${h}:${O}`),[]))}}return f},K=(h,y=b,p=null,w=null)=>{var f;let C=y[h];if(!C||E(C))return null;let m=(f=w==null?void 0:w[h])!=null?f:v==null?void 0:v[h];if(m===null)return null;let S=Fe(m),O=Array.isArray(o.responsiveVariants)&&o.responsiveVariants.length>0||o.responsiveVariants===!0,J=z==null?void 0:z[h],R=[];if(typeof S=="object"&&O)for(let[U,se]of Object.entries(S)){let ae=C[se];if(U==="initial"){J=se;continue}Array.isArray(o.responsiveVariants)&&!o.responsiveVariants.includes(U)||(R=T(U,ae,R,p))}let ee=S!=null&&typeof S!="object"?S:Fe(J),Q=C[ee||"false"];return typeof R=="object"&&typeof p=="string"&&R[p]?Ze(R,Q):R.length>0?(R.push(Q),p==="base"?R.join(" "):R):Q},V=()=>b?Object.keys(b).map(h=>K(h,b)):null,g=(h,y)=>{if(!b||typeof b!="object")return null;let p=new Array;for(let w in b){let f=K(w,b,h,y),C=h==="base"&&typeof f=="string"?f:f&&f[h];C&&(p[p.length]=C)}return p},B={};for(let h in v)v[h]!==void 0&&(B[h]=v[h]);let ue=(h,y)=>{var p;let w=typeof(v==null?void 0:v[h])=="object"?{[h]:(p=v[h])==null?void 0:p.initial}:{};return{...z,...B,...w,...y}},de=(h=[],y)=>{let p=[];for(let{class:w,className:f,...C}of h){let m=!0;for(let[S,O]of Object.entries(C)){let J=ue(S,y)[S];if(Array.isArray(O)){if(!O.includes(J)){m=!1;break}}else{let R=ee=>ee==null||ee===!1;if(R(O)&&R(J))continue;if(J!==O){m=!1;break}}}m&&(w&&p.push(w),f&&p.push(f))}return p},ne=h=>{let y=de(q,h);if(!Array.isArray(y))return y;let p={};for(let w of y)if(typeof w=="string"&&(p.base=fe(p.base,w)(o)),typeof w=="object")for(let[f,C]of Object.entries(w))p[f]=fe(p[f],C)(o);return p},me=h=>{if(i.length<1)return null;let y={};for(let{slots:p=[],class:w,className:f,...C}of i){if(!E(C)){let m=!0;for(let S of Object.keys(C)){let O=ue(S,h)[S];if(O===void 0||(Array.isArray(C[S])?!C[S].includes(O):C[S]!==O)){m=!1;break}}if(!m)continue}for(let m of p)y[m]=y[m]||[],y[m].push([w,f])}return y};if(!E(s)||!I){let h={};if(typeof k=="object"&&!E(k))for(let y of Object.keys(k))h[y]=p=>{var w,f;return fe(k[y],g(y,p),((w=ne(p))!=null?w:[])[y],((f=me(p))!=null?f:[])[y],p==null?void 0:p.class,p==null?void 0:p.className)(o)};return h}return fe(d,V(),de(q),v==null?void 0:v.class,v==null?void 0:v.className)(o)},$=()=>{if(!(!b||typeof b!="object"))return Object.keys(b)};return A.variantKeys=$(),A.extend=t,A.base=d,A.slots=k,A.variants=b,A.defaultVariants=z,A.compoundSlots=i,A.compoundVariants=q,A},rn=e=>(r,t)=>en(r,t?Ee(e,t):e);const tn=Tr;var er;const _=rn((er=tn.ui)==null?void 0:er.tv);function nn(e){const r=Object.keys(e),t=r.filter(a=>a.startsWith("aria-")),s=r.filter(a=>a.startsWith("data-")),n=["active","activeClass","ariaCurrentValue","as","disabled","exact","exactActiveClass","exactHash","exactQuery","external","href","download","inactiveClass","noPrefetch","noRel","prefetch","prefetchedClass","rel","replace","target","to","type","title","onClick",...t,...s];return dr(e,...n)}function sn(e,r){const t=ct(e,r).reduce((a,i)=>(i.type==="added"&&a.add(i.key),a),new Set),s=Object.fromEntries(Object.entries(e).filter(([a])=>!t.has(a))),n=Object.fromEntries(Object.entries(r).filter(([a])=>!t.has(a)));return sr(s,n)}const Be={__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 t=Re(dr(e,"name","mode","size","customize"));return(s,n)=>{const a=Hr;return G(),L(a,$e(Rr(N(t))),null,16)}}},an="img",_e=Symbol("nuxt-ui.avatar-group");function on(e){const r=Y(_e,void 0),t=P(()=>e.size??(r==null?void 0:r.value.size));return nr(_e,P(()=>({size:t.value}))),{size:t}}const ln={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"}},cn=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 r=e,t=P(()=>r.text||(r.alt||"").split(" ").map(d=>d.charAt(0)).join("").substring(0,2)),s=ye(),{size:n}=on(r),a=P(()=>{var d;return _({extend:_(ln),...((d=s.ui)==null?void 0:d.avatar)||{}})({size:n.value})}),i=P(()=>({"3xs":16,"2xs":20,xs:24,sm:28,md:32,lg:36,xl:40,"2xl":44,"3xl":48})[r.size||"md"]),l=Ne(!1);Er(()=>r.src,()=>{l.value&&(l.value=!1)});function o(){l.value=!0}return(d,b)=>{var z;return G(),L(N(Te),{as:e.as,class:W(a.value.root({class:[(z=r.ui)==null?void 0:z.root,r.class]})),style:Kr(r.style)},{default:Z(()=>{var I;return[e.src&&!l.value?(G(),L(Lr(N(an)),D({key:0,role:"img",src:e.src,alt:e.alt,width:i.value,height:i.value},d.$attrs,{class:a.value.image({class:(I=r.ui)==null?void 0:I.image}),onError:o}),null,16,["src","alt","width","height","class"])):(G(),L(N(cr),$e(D({key:1},d.$attrs)),{default:Z(()=>[H(d.$slots,"default",{},()=>{var j,k;return[e.icon?(G(),L(Be,{key:0,name:e.icon,class:W(a.value.icon({class:(j=r.ui)==null?void 0:j.icon}))},null,8,["name","class"])):(G(),ge("span",{key:1,class:W(a.value.fallback({class:(k=r.ui)==null?void 0:k.fallback}))},ar(t.value||" "),3))]})]),_:3},16))]}),_:3},8,["as","class","style"])}}}),qr={__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 r=e;function t(s){if(r.disabled){s.stopPropagation(),s.preventDefault();return}if(r.onClick)for(const n of Array.isArray(r.onClick)?r.onClick:[r.onClick])n(s);r.href&&r.navigate&&!r.isExternal&&r.navigate(s)}return(s,n)=>(G(),L(N(Te),D(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:t}),{default:Z(()=>[H(s.$slots,"default")]),_:3},16,["rel","target"]))}},un={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"]}]},dn=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 r=e,t=Wr(),s=ye(),n=Re(_r(r,"as","type","disabled","active","exact","exactQuery","exactHash","activeClass","inactiveClass","to","href","raw","custom","class")),a=P(()=>{var d;return _({extend:_(un),...ir({variants:{active:{true:r.activeClass,false:r.inactiveClass}}},((d=s.ui)==null?void 0:d.link)||{})})}),i=P(()=>r.to??r.href);function l({route:d,isActive:b,isExactActive:z}){if(r.active!==void 0)return r.active;if(r.exactQuery==="partial"){if(!sn(d.query,t.query))return!1}else if(r.exactQuery===!0&&!sr(d.query,t.query))return!1;return r.exactHash&&d.hash!==t.hash?!1:!!(r.exact&&z||!r.exact&&b)}function o({route:d,isActive:b,isExactActive:z}){const I=l({route:d,isActive:b,isExactActive:z});return r.raw?[r.class,I?r.activeClass:r.inactiveClass]:a.value({class:r.class,active:I,disabled:r.disabled})}return(d,b)=>{const z=Jr;return G(),L(z,D(N(n),{to:i.value,custom:""}),{default:Z(({href:I,navigate:j,route:k,rel:q,target:A,isExternal:$,isActive:v,isExactActive:T})=>[e.custom?H(d.$slots,"default",$e(D({key:0},{...d.$attrs,...e.exact&&T?{"aria-current":r.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:I,navigate:j,rel:q,target:A,isExternal:$,active:l({route:k,isActive:v,isExactActive:T})}))):(G(),L(qr,D({key:1},{...d.$attrs,...e.exact&&T?{"aria-current":r.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:I,navigate:j,rel:q,target:A,isExternal:$},{class:o({route:k,isActive:v,isExactActive:T})}),{default:Z(()=>[H(d.$slots,"default",{active:l({route:k,isActive:v,isExactActive:T})})]),_:2},1040,["class"]))]),_:3},16,["to"])}}}),fn={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"}},wn={__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 r=e,t=or(),s=ye(),{orientation:n,size:a}=Xr(r),i=Re(nn(r)),l=Ne(!1),o=Y(lt,void 0);async function d(A){l.value=!0;const $=Array.isArray(r.onClick)?r.onClick:[r.onClick];try{await Promise.all($.map(v=>v==null?void 0:v(A)))}finally{l.value=!1}}const b=P(()=>r.loading||r.loadingAuto&&(l.value||(o==null?void 0:o.value)&&r.type==="submit")),{isLeading:z,isTrailing:I,leadingIconName:j,trailingIconName:k}=Qr(P(()=>({...r,loading:b.value}))),q=P(()=>{var A;return _({extend:_(fn),...ir({variants:{active:{true:{base:r.activeClass},false:{base:r.inactiveClass}}}},((A=s.ui)==null?void 0:A.button)||{})})({color:r.color,variant:r.variant,size:a.value,loading:b.value,block:r.block,square:r.square||!t.default&&!r.label,leading:z.value,trailing:I.value,buttonGroup:n.value})});return(A,$)=>(G(),L(dn,D({type:e.type,disabled:e.disabled||b.value},N(ut)(N(i),["type","disabled","onClick"]),{custom:""}),{default:Z(({active:v,...T})=>{var K;return[Dr(qr,D(T,{class:q.value.base({class:[(K=r.ui)==null?void 0:K.base,r.class],active:v,...v&&e.activeVariant?{variant:e.activeVariant}:{},...v&&e.activeColor?{color:e.activeColor}:{}}),onClick:d}),{default:Z(()=>[H(A.$slots,"leading",{},()=>{var V,g,B;return[N(z)&&N(j)?(G(),L(Be,{key:0,name:N(j),class:W(q.value.leadingIcon({class:(V=r.ui)==null?void 0:V.leadingIcon,active:v}))},null,8,["name","class"])):e.avatar?(G(),L(cn,D({key:1,size:((g=r.ui)==null?void 0:g.leadingAvatarSize)||q.value.leadingAvatarSize()},e.avatar,{class:q.value.leadingAvatar({class:(B=r.ui)==null?void 0:B.leadingAvatar,active:v})}),null,16,["size","class"])):oe("",!0)]}),H(A.$slots,"default",{},()=>{var V;return[e.label!==void 0&&e.label!==null?(G(),ge("span",{key:0,class:W(q.value.label({class:(V=r.ui)==null?void 0:V.label,active:v}))},ar(e.label),3)):oe("",!0)]}),H(A.$slots,"trailing",{},()=>{var V;return[N(I)&&N(k)?(G(),L(Be,{key:0,name:N(k),class:W(q.value.trailingIcon({class:(V=r.ui)==null?void 0:V.trailingIcon,active:v}))},null,8,["name","class"])):oe("",!0)]})]),_:2},1040,["class"])]}),_:3},16,["type","disabled"]))}},bn={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"}},kn={__name:"Card",props:{as:{type:null,required:!1},variant:{type:null,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1}},setup(e){const r=e,t=or(),s=ye(),n=P(()=>{var a;return _({extend:_(bn),...((a=s.ui)==null?void 0:a.card)||{}})({variant:r.variant})});return(a,i)=>{var l;return G(),L(N(Te),{as:e.as,class:W(n.value.root({class:[(l=r.ui)==null?void 0:l.root,r.class]}))},{default:Z(()=>{var o,d,b;return[t.header?(G(),ge("div",{key:0,class:W(n.value.header({class:(o=r.ui)==null?void 0:o.header}))},[H(a.$slots,"header")],2)):oe("",!0),t.default?(G(),ge("div",{key:1,class:W(n.value.body({class:(d=r.ui)==null?void 0:d.body}))},[H(a.$slots,"default")],2)):oe("",!0),t.footer?(G(),ge("div",{key:2,class:W(n.value.footer({class:(b=r.ui)==null?void 0:b.footer}))},[H(a.$slots,"footer")],2)):oe("",!0)]}),_:3},8,["as","class"])}}};export{Te as P,wn as _,kn as a,Qr as b,Be as c,cn as d,mn as e,yn as f,hn as g,xn as l,_ as t,Xr as u}; diff --git a/TerraformRegistry/web/_nuxt/DZhRnb1V.js b/TerraformRegistry/web/_nuxt/DZhRnb1V.js new file mode 100644 index 0000000..4d74462 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DZhRnb1V.js @@ -0,0 +1,6 @@ +import{q as w,s as S,ak as b,al as B,e as x,a5 as C,a0 as T,K as N,am as q,an as P}from"./DfbLerQ4.js";const E=Object.freeze({left:0,top:0,width:16,height:16}),R=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),I=Object.freeze({...E,...R});Object.freeze({...I,body:"",hidden:!1});function L(e,s){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in s)n+=" "+o+'="'+s[o]+'"';return'"+e+""}const M=/(-?[0-9.]*[0-9]+[0-9.]*)/g,V=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function v(e,s,n){if(s===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*s*n)/n;if(typeof e!="string")return e;const o=e.split(M);if(o===null||!o.length)return e;const t=[];let r=o.shift(),i=V.test(r);for(;;){if(i){const c=parseFloat(r);isNaN(c)?t.push(r):t.push(Math.ceil(c*s*n)/n)}else t.push(r);if(r=o.shift(),r===void 0)return t.join("");i=!i}}function W(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function _(e){return"data:image/svg+xml,"+W(e)}function D(e){return'url("'+_(e)+'")'}function G(e){const[s,n,o,t]=e;if(o!==t){const r=Math.max(o,t);return[s-(r-o)/2,n-(r-t)/2,r,r]}return e}const H=Object.freeze({width:null,height:null}),K=Object.freeze({...H,...R});function U(e,s="defs"){let n="";const o=e.indexOf("<"+s);for(;o>=0;){const t=e.indexOf(">",o),r=e.indexOf("",r);if(i===-1)break;n+=e.slice(t+1,r).trim(),e=e.slice(0,o).trim()+e.slice(i+1)}return{defs:n,content:e}}function J(e,s){return e?""+e+""+s:s}function Q(e,s,n){const o=U(e);return J(o.defs,s+o.content+n)}const X=e=>e==="unset"||e==="undefined"||e==="none";function Y(e,s){const n={...I,...e},o={...K,...s},t={left:n.left,top:n.top,width:n.width,height:n.height};let r=n.body;[n,o].forEach(g=>{const f=[],A=g.hFlip,O=g.vFlip;let h=g.rotate;A?O?h+=2:(f.push("translate("+(t.width+t.left).toString()+" "+(0-t.top).toString()+")"),f.push("scale(-1 1)"),t.top=t.left=0):O&&(f.push("translate("+(0-t.left).toString()+" "+(t.height+t.top).toString()+")"),f.push("scale(1 -1)"),t.top=t.left=0);let m;switch(h<0&&(h-=Math.floor(h/4)*4),h=h%4,h){case 1:m=t.height/2+t.top,f.unshift("rotate(90 "+m.toString()+" "+m.toString()+")");break;case 2:f.unshift("rotate(180 "+(t.width/2+t.left).toString()+" "+(t.height/2+t.top).toString()+")");break;case 3:m=t.width/2+t.left,f.unshift("rotate(-90 "+m.toString()+" "+m.toString()+")");break}h%2===1&&(t.left!==t.top&&(m=t.left,t.left=t.top,t.top=m),t.width!==t.height&&(m=t.width,t.width=t.height,t.height=m)),f.length&&(r=Q(r,'',""))});const i=o.width,c=o.height,a=t.width,l=t.height;let u,d;i===null?(d=c===null?"1em":c==="auto"?l:c,u=v(d,a/l)):(u=i==="auto"?a:i,d=c===null?v(u,l/a):c==="auto"?l:c);const y={},z=(g,f)=>{X(f)||(y[g]=f.toString())};z("width",u),z("height",d);const $=[t.left,t.top,a,l];return y.viewBox=$.join(" "),{attributes:y,viewBox:$,body:r}}function Z(e){const s={display:"inline-block",width:"1em",height:"1em"},n=e.varName;switch(e.pseudoSelector&&(s.content="''"),e.mode){case"background":n&&(s["background-image"]="var(--"+n+")"),s["background-repeat"]="no-repeat",s["background-size"]="100% 100%";break;case"mask":s["background-color"]="currentColor",n&&(s["mask-image"]=s["-webkit-mask-image"]="var(--"+n+")"),s["mask-repeat"]=s["-webkit-mask-repeat"]="no-repeat",s["mask-size"]=s["-webkit-mask-size"]="100% 100%";break}return s}function ee(e,s){const n={},o=s.varName,t=Y(e);let r=t.viewBox;r[2]!==r[3]&&(s.forceSquare?r=G(r):n.width=v("1em",r[2]/r[3]));const i=L(t.body.replace(/currentColor/g,s.color||"black"),{viewBox:`${r[0]} ${r[1]} ${r[2]} ${r[3]}`,width:`${r[2]}`,height:`${r[3]}`}),c=D(i);if(o)n["--"+o]=c;else switch(s.mode){case"background":n["background-image"]=c;break;case"mask":n["mask-image"]=n["-webkit-mask-image"]=c;break}return n}const k={selectorStart:{compressed:"{",compact:" {",expanded:" {"},selectorEnd:{compressed:"}",compact:`; } +`,expanded:`; +} +`},rule:{compressed:"{key}:",compact:" {key}: ",expanded:` + {key}: `}};function te(e,s="expanded"){const n=[];for(let o=0;o(console.warn(`[Icon] failed to load icon \`${e}\``),null)),b(e))}function j(e){const s=w().icon,n=(s.collections||[]).sort((o,t)=>t.length-o.length);return S(()=>{var i;const o=e(),t=o.startsWith(s.cssSelectorPrefix)?o.slice(s.cssSelectorPrefix.length):o,r=((i=s.aliases)==null?void 0:i[t])||t;if(!r.includes(":")){const c=n.find(a=>r.startsWith(a+"-"));return c?c+":"+r.slice(c.length+1):r}return r})}function F(e,s){if(e!==!1)return e===!0||e===null?s:e}let p;function oe(e){return e.replace(/([^\w-])/g,"\\$1")}function re(){if(p)return p;p=new Set;const e=n=>{if(n=n.replace(/^:where\((.*)\)$/,"$1").trim(),n.startsWith("."))return n},s=n=>{if(n!=null&&n.length)for(const o of n){o!=null&&o.cssRules&&s(o.cssRules);const t=o==null?void 0:o.selectorText;if(typeof t=="string"){const r=e(t);r&&p.add(r)}}};if(typeof document<"u")for(const n of document.styleSheets)try{const o=n.cssRules||n.rules;s(o)}catch{}return p}const ce=x({name:"NuxtIconCss",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e){const s=C(),n=w().icon,o=S(()=>e.name?n.cssSelectorPrefix+e.name:"");function t(c){var u,d;if(!c)return;const a=b(c);if(a)return a;const l=(d=(u=s.payload)==null?void 0:u.data)==null?void 0:d[c];if(l)return q(c,l),l}const r=S(()=>"."+oe(o.value));function i(c,a=!0){let l=r.value;n.cssWherePseudo&&(l=`:where(${l})`);const u=ne(c,{iconSelector:l,format:"compressed",customise:F(e.customize,n.customize)});return n.cssLayer&&a?`@layer ${n.cssLayer} { ${u} }`:u}{const c=re();async function a(l){if(c.has(r.value)||typeof document>"u")return;const u=document.createElement("style");u.textContent=i(l);const d=document.head.querySelector('style, link[rel="stylesheet"]');d?document.head.insertBefore(u,d):document.head.appendChild(u),c.add(r.value)}T(()=>e.name,()=>{if(c.has(r.value))return;const l=t(e.name);l?a(l):se(e.name).then(u=>{u&&a(u)}).catch(()=>null)},{immediate:!0})}return()=>N("span",{class:["iconify",o.value]})}}),ie=x({name:"NuxtIconSvg",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:s}){const n=C(),o=w().icon,t=j(()=>e.name),r="i-"+t.value;if(t.value){const i=n.payload.data[r];i&&q(t.value,i)}return()=>N(P,{icon:t.value,ssr:!0,customise:F(e.customize,o.customize)},s)}}),ae=x({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:s}){const n=C(),o=w().icon,t=j(()=>e.name),r=S(()=>{var c;return((c=n.vueApp)==null?void 0:c.component(t.value))||((e.mode||o.mode)==="svg"?ie:ce)}),i=S(()=>{const c=e.size||o.size;return c?{fontSize:Number.isNaN(+c)?c:c+"px"}:null});return()=>N(r.value,{...o.attrs,name:t.value,class:o.class,style:i.value,customize:e.customize},s)}});export{ae as default}; diff --git a/TerraformRegistry/web/_nuxt/DfbLerQ4.js b/TerraformRegistry/web/_nuxt/DfbLerQ4.js new file mode 100644 index 0000000..4783e1b --- /dev/null +++ b/TerraformRegistry/web/_nuxt/DfbLerQ4.js @@ -0,0 +1,42 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BvVBPIAF.js","./DZhRnb1V.js","./CyQxyuxc.js","./CDgII3bh.js","./CwuZat6W.js","./BLEGckhC.js","./B9sIrZpC.js","./jISQO879.js","./error-404.4oxyXxx0.css","./HxsO1gv8.js","./error-500.CZqNkBuR.css"])))=>i.map(i=>d[i]); +var Ru=Object.defineProperty;var si=e=>{throw TypeError(e)};var xu=(e,t,n)=>t in e?Ru(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Rt=(e,t,n)=>xu(e,typeof t!="symbol"?t+"":t,n),Au=(e,t,n)=>t.has(e)||si("Cannot "+n);var Cn=(e,t,n)=>(Au(e,t,"read from private field"),n?n.call(e):t.get(e)),ii=(e,t,n)=>t.has(e)?si("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 Ss(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ie={},fn=[],ut=()=>{},Pu=()=>!1,nr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ts=e=>e.startsWith("onUpdate:"),we=Object.assign,Cs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ou=Object.prototype.hasOwnProperty,se=(e,t)=>Ou.call(e,t),G=Array.isArray,dn=e=>rr(e)==="[object Map]",Kl=e=>rr(e)==="[object Set]",Iu=e=>rr(e)==="[object RegExp]",Q=e=>typeof e=="function",ge=e=>typeof e=="string",St=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",Rs=e=>(ue(e)||Q(e))&&Q(e.then)&&Q(e.catch),ql=Object.prototype.toString,rr=e=>ql.call(e),Mu=e=>rr(e).slice(8,-1),zl=e=>rr(e)==="[object Object]",xs=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,hn=Ss(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),eo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Lu=/-(\w)/g,Ve=eo(e=>e.replace(Lu,(t,n)=>n?n.toUpperCase():"")),ju=/\B([A-Z])/g,Dt=eo(e=>e.replace(ju,"-$1").toLowerCase()),to=eo(e=>e.charAt(0).toUpperCase()+e.slice(1)),bo=eo(e=>e?`on${to(e)}`:""),Le=(e,t)=>!Object.is(e,t),jn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},$u=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jl=e=>{const t=ge(e)?Number(e):NaN;return isNaN(t)?e:t};let li;const no=()=>li||(li=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ro(e){if(G(e)){const t={};for(let n=0;n{if(n){const r=n.split(Hu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function oo(e){let t="";if(ge(e))t=e;else if(G(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Wu=e=>ge(e)?e:e==null?"":G(e)||ue(e)&&(e.toString===ql||!Q(e.toString))?Yl(e)?Wu(e.value):JSON.stringify(e,Xl,2):String(e),Xl=(e,t)=>Yl(t)?Xl(e,t.value):dn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],s)=>(n[vo(r,s)+" =>"]=o,n),{})}:Kl(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>vo(n))}:St(t)?vo(t):ue(t)&&!G(t)&&!zl(t)?String(t):t,vo=(e,t="")=>{var n;return St(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 Re;class Zl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Re,!t&&Re&&(this.index=(Re.scopes||(Re.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&&(Re=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(Nn){let t=Nn;for(Nn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;$n;){let t=$n;for($n=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 rc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function oc(e){let t,n=e.depsTail,r=n;for(;r;){const o=r.prevDep;r.version===-1?(r===n&&(n=o),Os(r),qu(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function Ko(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(sc(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function sc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kn)||(e.globalVersion=Kn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ko(e))))return;e.flags|=2;const t=e.dep,n=ae,r=et;ae=e,et=!0;try{rc(e);const o=e.fn(e._value);(t.version===0||Le(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{ae=n,et=r,oc(e),e.flags&=-3}}function Os(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)Os(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function qu(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let et=!0;const ic=[];function wt(){ic.push(et),et=!1}function kt(){const e=ic.pop();et=e===void 0?!0:e}function ci(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ae;ae=void 0;try{t()}finally{ae=n}}}let Kn=0;class zu{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 so{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(!ae||!et||ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ae)n=this.activeLink=new zu(ae,this),ae.deps?(n.prevDep=ae.depsTail,ae.depsTail.nextDep=n,ae.depsTail=n):ae.deps=ae.depsTail=n,lc(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=ae.depsTail,n.nextDep=void 0,ae.depsTail.nextDep=n,ae.depsTail=n,ae.deps===n&&(ae.deps=r)}return n}trigger(t){this.version++,Kn++,this.notify(t)}notify(t){As();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ps()}}}function lc(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)lc(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Lr=new WeakMap,zt=Symbol(""),qo=Symbol(""),qn=Symbol("");function xe(e,t,n){if(et&&ae){let r=Lr.get(e);r||Lr.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new so),o.map=r,o.key=n),o.track()}}function bt(e,t,n,r,o,s){const i=Lr.get(e);if(!i){Kn++;return}const l=c=>{c&&c.trigger()};if(As(),t==="clear")i.forEach(l);else{const c=G(e),u=c&&xs(n);if(c&&n==="length"){const a=Number(r);i.forEach((f,d)=>{(d==="length"||d===qn||!St(d)&&d>=a)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(qn)),t){case"add":c?u&&l(i.get("length")):(l(i.get(zt)),dn(e)&&l(i.get(qo)));break;case"delete":c||(l(i.get(zt)),dn(e)&&l(i.get(qo)));break;case"set":dn(e)&&l(i.get(zt));break}}Ps()}function Gu(e,t){const n=Lr.get(e);return n&&n.get(t)}function sn(e){const t=te(e);return t===e?t:(xe(t,"iterate",qn),Ge(e)?t:t.map(Ee))}function io(e){return xe(e=te(e),"iterate",qn),e}const Ju={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,Ee)},concat(...e){return sn(this).concat(...e.map(t=>G(t)?sn(t):t))},entries(){return ko(this,"entries",e=>(e[1]=Ee(e[1]),e))},every(e,t){return pt(this,"every",e,t,void 0,arguments)},filter(e,t){return pt(this,"filter",e,t,n=>n.map(Ee),arguments)},find(e,t){return pt(this,"find",e,t,Ee,arguments)},findIndex(e,t){return pt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return pt(this,"findLast",e,t,Ee,arguments)},findLastIndex(e,t){return pt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return pt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Eo(this,"includes",e)},indexOf(...e){return Eo(this,"indexOf",e)},join(e){return sn(this).join(e)},lastIndexOf(...e){return Eo(this,"lastIndexOf",e)},map(e,t){return pt(this,"map",e,t,void 0,arguments)},pop(){return Rn(this,"pop")},push(...e){return Rn(this,"push",e)},reduce(e,...t){return ai(this,"reduce",e,t)},reduceRight(e,...t){return ai(this,"reduceRight",e,t)},shift(){return Rn(this,"shift")},some(e,t){return pt(this,"some",e,t,void 0,arguments)},splice(...e){return Rn(this,"splice",e)},toReversed(){return sn(this).toReversed()},toSorted(e){return sn(this).toSorted(e)},toSpliced(...e){return sn(this).toSpliced(...e)},unshift(...e){return Rn(this,"unshift",e)},values(){return ko(this,"values",Ee)}};function ko(e,t,n){const r=io(e),o=r[t]();return r!==e&&!Ge(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.value&&(s.value=n(s.value)),s}),o}const Qu=Array.prototype;function pt(e,t,n,r,o,s){const i=io(e),l=i!==e&&!Ge(e),c=i[t];if(c!==Qu[t]){const f=c.apply(e,s);return l?Ee(f):f}let u=n;i!==e&&(l?u=function(f,d){return n.call(this,Ee(f),d,e)}:n.length>2&&(u=function(f,d){return n.call(this,f,d,e)}));const a=c.call(i,u,r);return l&&o?o(a):a}function ai(e,t,n,r){const o=io(e);let s=n;return o!==e&&(Ge(e)?n.length>3&&(s=function(i,l,c){return n.call(this,i,l,c,e)}):s=function(i,l,c){return n.call(this,i,Ee(l),c,e)}),o[t](s,...r)}function Eo(e,t,n){const r=te(e);xe(r,"iterate",qn);const o=r[t](...n);return(o===-1||o===!1)&&Ls(n[0])?(n[0]=te(n[0]),r[t](...n)):o}function Rn(e,t,n=[]){wt(),As();const r=te(e)[t].apply(e,n);return Ps(),kt(),r}const Yu=Ss("__proto__,__v_isRef,__isVue"),cc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(St));function Xu(e){St(e)||(e=String(e));const t=te(this);return xe(t,"has",e),t.hasOwnProperty(e)}class ac{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?af:hc:s?dc:fc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=G(t);if(!o){let c;if(i&&(c=Ju[n]))return c;if(n==="hasOwnProperty")return Xu}const l=Reflect.get(t,n,be(t)?t:r);return(St(n)?cc.has(n):Yu(n))||(o||xe(t,"get",n),s)?l:be(l)?i&&xs(n)?l:l.value:ue(l)?o?jr(l):dt(l):l}}class uc extends ac{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];if(!this._isShallow){const c=Et(s);if(!Ge(r)&&!Et(r)&&(s=te(s),r=te(r)),!G(t)&&be(s)&&!be(r))return c?!1:(s.value=r,!0)}const i=G(t)&&xs(n)?Number(n)e,dr=e=>Reflect.getPrototypeOf(e);function rf(e,t,n){return function(...r){const o=this.__v_raw,s=te(o),i=dn(s),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=o[e](...r),a=n?zo:t?$r:Ee;return!t&&xe(s,"iterate",c?qo:zt),{next(){const{value:f,done:d}=u.next();return d?{value:f,done:d}:{value:l?[a(f[0]),a(f[1])]:a(f),done:d}},[Symbol.iterator](){return this}}}}function hr(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function of(e,t){const n={get(o){const s=this.__v_raw,i=te(s),l=te(o);e||(Le(o,l)&&xe(i,"get",o),xe(i,"get",l));const{has:c}=dr(i),u=t?zo:e?$r:Ee;if(c.call(i,o))return u(s.get(o));if(c.call(i,l))return u(s.get(l));s!==i&&s.get(o)},get size(){const o=this.__v_raw;return!e&&xe(te(o),"iterate",zt),Reflect.get(o,"size",o)},has(o){const s=this.__v_raw,i=te(s),l=te(o);return e||(Le(o,l)&&xe(i,"has",o),xe(i,"has",l)),o===l?s.has(o):s.has(o)||s.has(l)},forEach(o,s){const i=this,l=i.__v_raw,c=te(l),u=t?zo:e?$r:Ee;return!e&&xe(c,"iterate",zt),l.forEach((a,f)=>o.call(s,u(a),u(f),i))}};return we(n,e?{add:hr("add"),set:hr("set"),delete:hr("delete"),clear:hr("clear")}:{add(o){!t&&!Ge(o)&&!Et(o)&&(o=te(o));const s=te(this);return dr(s).has.call(s,o)||(s.add(o),bt(s,"add",o,o)),this},set(o,s){!t&&!Ge(s)&&!Et(s)&&(s=te(s));const i=te(this),{has:l,get:c}=dr(i);let u=l.call(i,o);u||(o=te(o),u=l.call(i,o));const a=c.call(i,o);return i.set(o,s),u?Le(s,a)&&bt(i,"set",o,s):bt(i,"add",o,s),this},delete(o){const s=te(this),{has:i,get:l}=dr(s);let c=i.call(s,o);c||(o=te(o),c=i.call(s,o)),l&&l.call(s,o);const u=s.delete(o);return c&&bt(s,"delete",o,void 0),u},clear(){const o=te(this),s=o.size!==0,i=o.clear();return s&&bt(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=rf(o,e,t)}),n}function Is(e,t){const n=of(e,t);return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(se(n,o)&&o in r?n:r,o,s)}const sf={get:Is(!1,!1)},lf={get:Is(!1,!0)},cf={get:Is(!0,!1)};const fc=new WeakMap,dc=new WeakMap,hc=new WeakMap,af=new WeakMap;function uf(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ff(e){return e.__v_skip||!Object.isExtensible(e)?0:uf(Mu(e))}function dt(e){return Et(e)?e:Ms(e,!1,ef,sf,fc)}function at(e){return Ms(e,!1,nf,lf,dc)}function jr(e){return Ms(e,!0,tf,cf,hc)}function Ms(e,t,n,r,o){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=ff(e);if(s===0)return e;const i=o.get(e);if(i)return i;const l=new Proxy(e,s===2?r:n);return o.set(e,l),l}function Gt(e){return Et(e)?Gt(e.__v_raw):!!(e&&e.__v_isReactive)}function Et(e){return!!(e&&e.__v_isReadonly)}function Ge(e){return!!(e&&e.__v_isShallow)}function Ls(e){return e?!!e.__v_raw:!1}function te(e){const t=e&&e.__v_raw;return t?te(t):e}function df(e){return!se(e,"__v_skip")&&Object.isExtensible(e)&&Gl(e,"__v_skip",!0),e}const Ee=e=>ue(e)?dt(e):e,$r=e=>ue(e)?jr(e):e;function be(e){return e?e.__v_isRef===!0:!1}function Ne(e){return pc(e,!1)}function ft(e){return pc(e,!0)}function pc(e,t){return be(e)?e:new hf(e,t)}class hf{constructor(t,n){this.dep=new so,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:te(t),this._value=n?t:Ee(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Ge(t)||Et(t);t=r?t:te(t),Le(t,n)&&(this._rawValue=t,this._value=r?t:Ee(t),this.dep.trigger())}}function fe(e){return be(e)?e.value:e}function pf(e){return Q(e)?e():fe(e)}const gf={get:(e,t,n)=>t==="__v_raw"?e:fe(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return be(o)&&!be(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function gc(e){return Gt(e)?e:new Proxy(e,gf)}class mf{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new so,{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 mc(e){return new mf(e)}function l_(e){const t=G(e)?new Array(e.length):{};for(const n in e)t[n]=_c(e,n);return t}class yf{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 Gu(te(this._object),this._key)}}class _f{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 yc(e,t,n){return be(e)?e:Q(e)?new _f(e):ue(e)&&arguments.length>1?_c(e,t,n):Ne(e)}function _c(e,t,n){const r=e[t];return be(r)?r:new yf(e,t,n)}class bf{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new so(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&ae!==this)return nc(this,!0),!0}get value(){const t=this.dep.track();return sc(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vf(e,t,n=!1){let r,o;return Q(e)?r=e:(r=e.get,o=e.set),new bf(r,o,n)}const pr={},Nr=new WeakMap;let Kt;function wf(e,t=!1,n=Kt){if(n){let r=Nr.get(n);r||Nr.set(n,r=[]),r.push(e)}}function kf(e,t,n=ie){const{immediate:r,deep:o,once:s,scheduler:i,augmentJob:l,call:c}=n,u=b=>o?b:Ge(b)||o===!1||o===0?Lt(b,1):Lt(b);let a,f,d,h,_=!1,m=!1;if(be(e)?(f=()=>e.value,_=Ge(e)):Gt(e)?(f=()=>u(e),_=!0):G(e)?(m=!0,_=e.some(b=>Gt(b)||Ge(b)),f=()=>e.map(b=>{if(be(b))return b.value;if(Gt(b))return u(b);if(Q(b))return c?c(b,2):b()})):Q(e)?t?f=c?()=>c(e,2):e:f=()=>{if(d){wt();try{d()}finally{kt()}}const b=Kt;Kt=a;try{return c?c(e,3,[h]):e(h)}finally{Kt=b}}:f=ut,t&&o){const b=f,E=o===!0?1/0:o;f=()=>Lt(b(),E)}const v=or(),k=()=>{a.stop(),v&&v.active&&Cs(v.effects,a)};if(s&&t){const b=t;t=(...E)=>{b(...E),k()}}let w=m?new Array(e.length).fill(pr):pr;const g=b=>{if(!(!(a.flags&1)||!a.dirty&&!b))if(t){const E=a.run();if(o||_||(m?E.some((T,R)=>Le(T,w[R])):Le(E,w))){d&&d();const T=Kt;Kt=a;try{const R=[E,w===pr?void 0:m&&w[0]===pr?[]:w,h];w=E,c?c(t,3,R):t(...R)}finally{Kt=T}}}else a.run()};return l&&l(g),a=new ec(f),a.scheduler=i?()=>i(g,!1):g,h=b=>wf(b,!1,a),d=a.onStop=()=>{const b=Nr.get(a);if(b){if(c)c(b,4);else for(const E of b)E();Nr.delete(a)}},t?r?g(!0):w=a.run():i?i(g.bind(null,!0),!0):a.run(),k.pause=a.pause.bind(a),k.resume=a.resume.bind(a),k.stop=k,k}function Lt(e,t=1/0,n){if(t<=0||!ue(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,be(e))Lt(e.value,t,n);else if(G(e))for(let r=0;r{Lt(r,t,n)});else if(zl(e)){for(const r in e)Lt(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Lt(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function sr(e,t,n,r){try{return r?e(...r):e()}catch(o){En(o,t,n)}}function nt(e,t,n,r){if(Q(e)){const o=sr(e,t,n,r);return o&&Rs(o)&&o.catch(s=>{En(s,t,n)}),o}if(G(e)){const o=[];for(let s=0;s>>1,o=Oe[r],s=zn(o);s=zn(n)?Oe.push(e):Oe.splice(Sf(t),0,e),e.flags|=1,vc()}}function vc(){Hr||(Hr=bc.then(wc))}function Go(e){G(e)?pn.push(...e):At&&e.id===-1?At.splice(cn+1,0,e):e.flags&1||(pn.push(e),e.flags|=1),vc()}function ui(e,t,n=lt+1){for(;nzn(n)-zn(r));if(pn.length=0,At){At.push(...t);return}for(At=t,cn=0;cne.id==null?e.flags&2?-1:1/0:e.id;function wc(e){try{for(lt=0;lt{r._d&&wi(-1);const s=Dr(t);let i;try{i=e(...o)}finally{Dr(s),r._d&&wi(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function ct(e,t,n,r){const o=e.dirs,s=t&&t.dirs;for(let i=0;ie.__isTeleport,Pt=Symbol("_leaveCb"),gr=Symbol("_enterCb");function Cf(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return _n(()=>{e.isMounted=!0}),lr(()=>{e.isUnmounting=!0}),e}const Ke=[Function,Array],Sc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ke,onEnter:Ke,onAfterEnter:Ke,onEnterCancelled:Ke,onBeforeLeave:Ke,onLeave:Ke,onAfterLeave:Ke,onLeaveCancelled:Ke,onBeforeAppear:Ke,onAppear:Ke,onAfterAppear:Ke,onAppearCancelled:Ke},Tc=e=>{const t=e.subTree;return t.component?Tc(t.component):t},Rf={name:"BaseTransition",props:Sc,setup(e,{slots:t}){const n=tn(),r=Cf();return()=>{const o=t.default&&xc(t.default(),!0);if(!o||!o.length)return;const s=Cc(o),i=te(e),{mode:l}=i;if(r.isLeaving)return So(s);const c=fi(s);if(!c)return So(s);let u=Jo(c,i,r,n,f=>u=f);c.type!==_e&&yn(c,u);let a=n.subTree&&fi(n.subTree);if(a&&a.type!==_e&&!Ze(c,a)&&Tc(n).type!==_e){let f=Jo(a,i,r,n);if(yn(a,f),l==="out-in"&&c.type!==_e)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,a=void 0},So(s);l==="in-out"&&c.type!==_e?f.delayLeave=(d,h,_)=>{const m=Rc(r,a);m[String(a.key)]=a,d[Pt]=()=>{h(),d[Pt]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{_(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return s}}};function Cc(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==_e){t=n;break}}return t}const xf=Rf;function Rc(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 Jo(e,t,n,r,o){const{appear:s,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:d,onLeave:h,onAfterLeave:_,onLeaveCancelled:m,onBeforeAppear:v,onAppear:k,onAfterAppear:w,onAppearCancelled:g}=t,b=String(e.key),E=Rc(n,e),T=(L,O)=>{L&&nt(L,r,9,O)},R=(L,O)=>{const q=O[1];T(L,O),G(L)?L.every(M=>M.length<=1)&&q():L.length<=1&&q()},U={mode:i,persisted:l,beforeEnter(L){let O=c;if(!n.isMounted)if(s)O=v||c;else return;L[Pt]&&L[Pt](!0);const q=E[b];q&&Ze(e,q)&&q.el[Pt]&&q.el[Pt](),T(O,[L])},enter(L){let O=u,q=a,M=f;if(!n.isMounted)if(s)O=k||u,q=w||a,M=g||f;else return;let z=!1;const Z=L[gr]=ne=>{z||(z=!0,ne?T(M,[L]):T(q,[L]),U.delayedLeave&&U.delayedLeave(),L[gr]=void 0)};O?R(O,[L,Z]):Z()},leave(L,O){const q=String(e.key);if(L[gr]&&L[gr](!0),n.isUnmounting)return O();T(d,[L]);let M=!1;const z=L[Pt]=Z=>{M||(M=!0,O(),Z?T(m,[L]):T(_,[L]),L[Pt]=void 0,E[q]===e&&delete E[q])};E[q]=e,h?R(h,[L,z]):z()},clone(L){const O=Jo(L,t,n,r,o);return o&&o(O),O}};return U}function So(e){if(ir(e))return e=Je(e),e.children=null,e}function fi(e){if(!ir(e))return Ec(e.type)&&e.children?Cc(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&&Q(n.default))return n.default()}}function yn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,yn(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 xc(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sGn(_,t&&(G(t)?t[m]:t),n,r,o));return}if($t(r)&&!o){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Gn(e,t,n,r.component.subTree);return}const s=r.shapeFlag&4?Vs(r.component):r.el,i=o?null:s,{i:l,r:c}=e,u=t&&t.r,a=l.refs===ie?l.refs={}:l.refs,f=l.setupState,d=te(f),h=f===ie?()=>!1:_=>se(d,_);if(u!=null&&u!==c&&(ge(u)?(a[u]=null,h(u)&&(f[u]=null)):be(u)&&(u.value=null)),Q(c))sr(c,l,12,[i,a]);else{const _=ge(c),m=be(c);if(_||m){const v=()=>{if(e.f){const k=_?h(c)?f[c]:a[c]:c.value;o?G(k)&&Cs(k,s):G(k)?k.includes(s)||k.push(s):_?(a[c]=[s],h(c)&&(f[c]=a[c])):(c.value=[s],e.k&&(a[e.k]=c.value))}else _?(a[c]=i,h(c)&&(f[c]=i)):m&&(c.value=i,e.k&&(a[e.k]=i))};i?(v.id=-1,ke(v,n)):v()}}}let di=!1;const ln=()=>{di||(console.error("Hydration completed but contains mismatches."),di=!0)},Af=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Pf=e=>e.namespaceURI.includes("MathML"),mr=e=>{if(e.nodeType===1){if(Af(e))return"svg";if(Pf(e))return"mathml"}},un=e=>e.nodeType===8;function Of(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:l,insert:c,createComment:u}}=e,a=(g,b)=>{if(!b.hasChildNodes()){n(null,g,b),Fr(),b._vnode=g;return}f(b.firstChild,g,null,null,null),Fr(),b._vnode=g},f=(g,b,E,T,R,U=!1)=>{U=U||!!b.dynamicChildren;const L=un(g)&&g.data==="[",O=()=>m(g,b,E,T,R,L),{type:q,ref:M,shapeFlag:z,patchFlag:Z}=b;let ne=g.nodeType;b.el=g,Z===-2&&(U=!1,b.dynamicChildren=null);let B=null;switch(q){case Qt:ne!==3?b.children===""?(c(b.el=o(""),i(g),g),B=g):B=O():(g.data!==b.children&&(ln(),g.data=b.children),B=s(g));break;case _e:w(g)?(B=s(g),k(b.el=g.content.firstChild,g,E)):ne!==8||L?B=O():B=s(g);break;case Fn:if(L&&(g=s(g),ne=g.nodeType),ne===1||ne===3){B=g;const X=!b.children.length;for(let V=0;V{U=U||!!b.dynamicChildren;const{type:L,props:O,patchFlag:q,shapeFlag:M,dirs:z,transition:Z}=b,ne=L==="input"||L==="option";if(ne||q!==-1){z&&ct(b,null,E,"created");let B=!1;if(w(g)){B=Qc(null,Z)&&E&&E.vnode.props&&E.vnode.props.appear;const V=g.content.firstChild;if(B){const ye=V.getAttribute("class");ye&&(V.$cls=ye),Z.beforeEnter(V)}k(V,g,E),b.el=g=V}if(M&16&&!(O&&(O.innerHTML||O.textContent))){let V=h(g.firstChild,b,g,E,T,R,U);for(;V;){yr(g,1)||ln();const ye=V;V=V.nextSibling,l(ye)}}else if(M&8){let V=b.children;V[0]===` +`&&(g.tagName==="PRE"||g.tagName==="TEXTAREA")&&(V=V.slice(1)),g.textContent!==V&&(yr(g,0)||ln(),g.textContent=b.children)}if(O){if(ne||!U||q&48){const V=g.tagName.includes("-");for(const ye in O)(ne&&(ye.endsWith("value")||ye==="indeterminate")||nr(ye)&&!hn(ye)||ye[0]==="."||V)&&r(g,ye,null,O[ye],void 0,E)}else if(O.onClick)r(g,"onClick",null,O.onClick,void 0,E);else if(q&4&&Gt(O.style))for(const V in O.style)O.style[V]}let X;(X=O&&O.onVnodeBeforeMount)&&Me(X,E,b),z&&ct(b,null,E,"beforeMount"),((X=O&&O.onVnodeMounted)||z||B)&&ra(()=>{X&&Me(X,E,b),B&&Z.enter(g),z&&ct(b,null,E,"mounted")},T)}return g.nextSibling},h=(g,b,E,T,R,U,L)=>{L=L||!!b.dynamicChildren;const O=b.children,q=O.length;for(let M=0;M{const{slotScopeIds:L}=b;L&&(R=R?R.concat(L):L);const O=i(g),q=h(s(g),b,O,E,T,R,U);return q&&un(q)&&q.data==="]"?s(b.anchor=q):(ln(),c(b.anchor=u("]"),O,q),q)},m=(g,b,E,T,R,U)=>{if(yr(g.parentElement,1)||ln(),b.el=null,U){const q=v(g);for(;;){const M=s(g);if(M&&M!==q)l(M);else break}}const L=s(g),O=i(g);return l(g),n(null,b,O,L,E,T,mr(O),R),E&&(E.vnode.el=b.el,fo(E,b.el)),L},v=(g,b="[",E="]")=>{let T=0;for(;g;)if(g=s(g),g&&un(g)&&(g.data===b&&T++,g.data===E)){if(T===0)return s(g);T--}return g},k=(g,b,E)=>{const T=b.parentNode;T&&T.replaceChild(g,b);let R=E;for(;R;)R.vnode.el===b&&(R.vnode.el=R.subTree.el=g),R=R.parent},w=g=>g.nodeType===1&&g.tagName==="TEMPLATE";return[a,f]}const hi="data-allow-mismatch",If={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yr(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(hi);)e=e.parentElement;const n=e&&e.getAttribute(hi);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(If[t])}}no().requestIdleCallback;no().cancelIdleCallback;function Mf(e,t){if(un(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(un(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const $t=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Ur(e){Q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,hydrate:s,timeout:i,suspensible:l=!0,onError:c}=e;let u=null,a,f=0;const d=()=>(f++,u=null,h()),h=()=>{let _;return u||(_=u=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),c)return new Promise((v,k)=>{c(m,()=>v(d()),()=>k(m),f+1)});throw m}).then(m=>_!==u&&u?u:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),a=m,m)))};return ht({name:"AsyncComponentWrapper",__asyncLoader:h,__asyncHydrate(_,m,v){const k=s?()=>{const g=s(()=>{v()},b=>Mf(_,b));g&&(m.bum||(m.bum=[])).push(g),(m.u||(m.u=[])).push(()=>!0)}:v;a?k():h().then(()=>!m.isUnmounted&&k())},get __asyncResolved(){return a},setup(){const _=ve;if(Ns(_),a)return()=>To(a,_);const m=g=>{u=null,En(g,_,13,!r)};if(l&&_.suspense||vn)return h().then(g=>()=>To(g,_)).catch(g=>(m(g),()=>r?de(r,{error:g}):null));const v=Ne(!1),k=Ne(),w=Ne(!!o);return o&&setTimeout(()=>{w.value=!1},o),i!=null&&setTimeout(()=>{if(!v.value&&!k.value){const g=new Error(`Async component timed out after ${i}ms.`);m(g),k.value=g}},i),h().then(()=>{v.value=!0,_.parent&&ir(_.parent.vnode)&&_.parent.update()}).catch(g=>{m(g),k.value=g}),()=>{if(v.value&&a)return To(a,_);if(k.value&&r)return de(r,{error:k.value});if(n&&!w.value)return de(n)}}})}function To(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=de(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const ir=e=>e.type.__isKeepAlive,Lf={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=tn(),r=n.ctx;if(!r.renderer)return()=>{const w=t.default&&t.default();return w&&w.length===1?w[0]:w};const o=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:u,um:a,o:{createElement:f}}}=r,d=f("div");r.activate=(w,g,b,E,T)=>{const R=w.component;u(w,g,b,0,l),c(R.vnode,w,g,b,R,l,E,w.slotScopeIds,T),ke(()=>{R.isDeactivated=!1,R.a&&jn(R.a);const U=w.props&&w.props.onVnodeMounted;U&&Me(U,R.parent,w)},l)},r.deactivate=w=>{const g=w.component;Wr(g.m),Wr(g.a),u(w,d,null,1,l),ke(()=>{g.da&&jn(g.da);const b=w.props&&w.props.onVnodeUnmounted;b&&Me(b,g.parent,w),g.isDeactivated=!0},l)};function h(w){Co(w),a(w,n,l,!0)}function _(w){o.forEach((g,b)=>{const E=rs(g.type);E&&!w(E)&&m(b)})}function m(w){const g=o.get(w);g&&(!i||!Ze(g,i))?h(g):i&&Co(i),o.delete(w),s.delete(w)}tt(()=>[e.include,e.exclude],([w,g])=>{w&&_(b=>Mn(w,b)),g&&_(b=>!Mn(g,b))},{flush:"post",deep:!0});let v=null;const k=()=>{v!=null&&(Kr(n.subTree.type)?ke(()=>{o.set(v,_r(n.subTree))},n.subTree.suspense):o.set(v,_r(n.subTree)))};return _n(k),Ic(k),lr(()=>{o.forEach(w=>{const{subTree:g,suspense:b}=n,E=_r(g);if(w.type===E.type&&w.key===E.key){Co(E);const T=E.component.da;T&&ke(T,b);return}h(w)})}),()=>{if(v=null,!t.default)return i=null;const w=t.default(),g=w[0];if(w.length>1)return i=null,w;if(!Xt(g)||!(g.shapeFlag&4)&&!(g.shapeFlag&128))return i=null,g;let b=_r(g);if(b.type===_e)return i=null,b;const E=b.type,T=rs($t(b)?b.type.__asyncResolved||{}:E),{include:R,exclude:U,max:L}=e;if(R&&(!T||!Mn(R,T))||U&&T&&Mn(U,T))return b.shapeFlag&=-257,i=b,g;const O=b.key==null?E:b.key,q=o.get(O);return b.el&&(b=Je(b),g.shapeFlag&128&&(g.ssContent=b)),v=O,q?(b.el=q.el,b.component=q.component,b.transition&&yn(b,b.transition),b.shapeFlag|=512,s.delete(O),s.add(O)):(s.add(O),L&&s.size>parseInt(L,10)&&m(s.values().next().value)),b.shapeFlag|=256,i=b,Kr(g.type)?g:b}}},jf=Lf;function Mn(e,t){return G(e)?e.some(n=>Mn(n,t)):ge(e)?e.split(",").includes(t):Iu(e)?(e.lastIndex=0,e.test(t)):!1}function Ac(e,t){Oc(e,"a",t)}function Pc(e,t){Oc(e,"da",t)}function Oc(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(lo(t,r,n),n){let o=n.parent;for(;o&&o.parent;)ir(o.parent.vnode)&&$f(r,t,n,o),o=o.parent}}function $f(e,t,n,r){const o=lo(t,e,r,!0);Hs(()=>{Cs(r[t],o)},n)}function Co(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function _r(e){return e.shapeFlag&128?e.ssContent:e}function lo(e,t,n=ve,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{wt();const l=cr(n),c=nt(t,n,e,i);return l(),kt(),c});return r?o.unshift(s):o.push(s),s}}const Tt=e=>(t,n=ve)=>{(!vn||e==="sp")&&lo(e,(...r)=>t(...r),n)},Nf=Tt("bm"),_n=Tt("m"),Hf=Tt("bu"),Ic=Tt("u"),lr=Tt("bum"),Hs=Tt("um"),Ff=Tt("sp"),Df=Tt("rtg"),Uf=Tt("rtc");function Mc(e,t=ve){lo("ec",e,t)}const Lc="components";function c_(e,t){return $c(Lc,e,!0,t)||e}const jc=Symbol.for("v-ndc");function Bf(e){return ge(e)?$c(Lc,e,!1)||e:e||jc}function $c(e,t,n=!0,r=!1){const o=Se||ve;if(o){const s=o.type;{const l=rs(s,!1);if(l&&(l===t||l===Ve(t)||l===to(Ve(t))))return s}const i=pi(o[e]||s[e],t)||pi(o.appContext[e],t);return!i&&r?s:i}}function pi(e,t){return e&&(e[t]||e[Ve(t)]||e[to(Ve(t))])}function a_(e,t,n,r){let o;const s=n,i=G(e);if(i||ge(e)){const l=i&&Gt(e);let c=!1,u=!1;l&&(c=!Ge(e),u=Et(e),e=io(e)),o=new Array(e.length);for(let a=0,f=e.length;at(l,c,void 0,s));else{const l=Object.keys(e);o=new Array(l.length);for(let c=0,u=l.length;c{const s=r.fn(...o);return s&&(s.key=r.key),s}:r.fn)}return e}function f_(e,t,n={},r,o){if(Se.ce||Se.parent&&$t(Se.parent)&&Se.parent.ce)return t!=="default"&&(n.name=t),ze(),vt(Ae,null,[de("slot",n,r&&r())],64);let s=e[t];s&&s._c&&(s._d=!1),ze();const i=s&&Nc(s(n)),l=n.key||i&&i.key,c=vt(Ae,{key:(l&&!St(l)?l:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&e._===1?64:-2);return c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),s&&s._c&&(s._d=!0),c}function Nc(e){return e.some(t=>Xt(t)?!(t.type===_e||t.type===Ae&&!Nc(t.children)):!0)?e:null}const Qo=e=>e?da(e)?Vs(e):Qo(e.parent):null,Hn=we(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=>Qo(e.parent),$root:e=>Qo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Fc(e),$forceUpdate:e=>e.f||(e.f=()=>{js(e.update)}),$nextTick:e=>e.n||(e.n=Ft.bind(e.proxy)),$watch:e=>fd.bind(e)}),Ro=(e,t)=>e!==ie&&!e.__isScriptSetup&&se(e,t),Vf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Ro(r,t))return i[t]=1,r[t];if(o!==ie&&se(o,t))return i[t]=2,o[t];if((u=e.propsOptions[0])&&se(u,t))return i[t]=3,s[t];if(n!==ie&&se(n,t))return i[t]=4,n[t];Yo&&(i[t]=0)}}const a=Hn[t];let f,d;if(a)return t==="$attrs"&&xe(e.attrs,"get",""),a(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ie&&se(n,t))return i[t]=4,n[t];if(d=c.config.globalProperties,se(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return Ro(o,t)?(o[t]=n,!0):r!==ie&&se(r,t)?(r[t]=n,!0):se(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 l;return!!n[i]||e!==ie&&se(e,i)||Ro(t,i)||(l=s[0])&&se(l,i)||se(r,i)||se(Hn,i)||se(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:se(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function d_(){return Wf().slots}function Wf(){const e=tn();return e.setupContext||(e.setupContext=pa(e))}function Br(e){return G(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function h_(e,t){return!e||!t?e||t:G(e)&&G(t)?e.concat(t):we({},Br(e),Br(t))}let Yo=!0;function Kf(e){const t=Fc(e),n=e.proxy,r=e.ctx;Yo=!1,t.beforeCreate&&gi(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:c,inject:u,created:a,beforeMount:f,mounted:d,beforeUpdate:h,updated:_,activated:m,deactivated:v,beforeDestroy:k,beforeUnmount:w,destroyed:g,unmounted:b,render:E,renderTracked:T,renderTriggered:R,errorCaptured:U,serverPrefetch:L,expose:O,inheritAttrs:q,components:M,directives:z,filters:Z}=t;if(u&&qf(u,r,null),i)for(const X in i){const V=i[X];Q(V)&&(r[X]=V.bind(n))}if(o){const X=o.call(n,n);ue(X)&&(e.data=dt(X))}if(Yo=!0,s)for(const X in s){const V=s[X],ye=Q(V)?V.bind(n,n):Q(V.get)?V.get.bind(n,n):ut,Ct=!Q(V)&&Q(V.set)?V.set.bind(n):ut,ot=je({get:ye,set:Ct});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>ot.value,set:Ie=>ot.value=Ie})}if(l)for(const X in l)Hc(l[X],r,n,X);if(c){const X=Q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Nt(V,X[V])})}a&&gi(a,e,"c");function B(X,V){G(V)?V.forEach(ye=>X(ye.bind(n))):V&&X(V.bind(n))}if(B(Nf,f),B(_n,d),B(Hf,h),B(Ic,_),B(Ac,m),B(Pc,v),B(Mc,U),B(Uf,T),B(Df,R),B(lr,w),B(Hs,b),B(Ff,L),G(O))if(O.length){const X=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:ye=>n[V]=ye})})}else e.exposed||(e.exposed={});E&&e.render===ut&&(e.render=E),q!=null&&(e.inheritAttrs=q),M&&(e.components=M),z&&(e.directives=z),L&&Ns(e)}function qf(e,t,n=ut){G(e)&&(e=Xo(e));for(const r in e){const o=e[r];let s;ue(o)?"default"in o?s=Te(o.from||r,o.default,!0):s=Te(o.from||r):s=Te(o),be(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function gi(e,t,n){nt(G(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Hc(e,t,n,r){let o=r.includes(".")?Zc(n,r):()=>n[r];if(ge(e)){const s=t[e];Q(s)&&tt(o,s)}else if(Q(e))tt(o,e.bind(n));else if(ue(e))if(G(e))e.forEach(s=>Hc(s,t,n,r));else{const s=Q(e.handler)?e.handler.bind(n):t[e.handler];Q(s)&&tt(o,s,e)}}function Fc(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:!o.length&&!n&&!r?c=t:(c={},o.length&&o.forEach(u=>Vr(c,u,i,!0)),Vr(c,t,i)),ue(t)&&s.set(t,c),c}function Vr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Vr(e,s,n,!0),o&&o.forEach(i=>Vr(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=zf[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const zf={data:mi,props:yi,emits:yi,methods:Ln,computed:Ln,beforeCreate:Pe,created:Pe,beforeMount:Pe,mounted:Pe,beforeUpdate:Pe,updated:Pe,beforeDestroy:Pe,beforeUnmount:Pe,destroyed:Pe,unmounted:Pe,activated:Pe,deactivated:Pe,errorCaptured:Pe,serverPrefetch:Pe,components:Ln,directives:Ln,watch:Jf,provide:mi,inject:Gf};function mi(e,t){return t?e?function(){return we(Q(e)?e.call(this,this):e,Q(t)?t.call(this,this):t)}:t:e}function Gf(e,t){return Ln(Xo(e),Xo(t))}function Xo(e){if(G(e)){const t={};for(let n=0;n1)return n&&Q(t)?t.call(r&&r.proxy):t}}function co(){return!!(ve||Se||Jt)}const Uc={},Bc=()=>Object.create(Uc),Vc=e=>Object.getPrototypeOf(e)===Uc;function Xf(e,t,n,r=!1){const o={},s=Bc();e.propsDefaults=Object.create(null),Wc(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:at(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function Zf(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=te(o),[c]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const a=e.vnode.dynamicProps;for(let f=0;f{c=!0;const[d,h]=Kc(f,t,!0);we(i,d),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!s&&!c)return ue(e)&&r.set(e,fn),fn;if(G(s))for(let a=0;ae[0]==="_"||e==="$stable",Ds=e=>G(e)?e.map(Be):[Be(e)],td=(e,t,n)=>{if(t._n)return t;const r=$s((...o)=>Ds(t(...o)),n);return r._c=!1,r},qc=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Fs(o))continue;const s=e[o];if(Q(s))t[o]=td(o,s,r);else if(s!=null){const i=Ds(s);t[o]=()=>i}}},zc=(e,t)=>{const n=Ds(t);e.slots.default=()=>n},Gc=(e,t,n)=>{for(const r in t)(n||!Fs(r))&&(e[r]=t[r])},nd=(e,t,n)=>{const r=e.slots=Bc();if(e.vnode.shapeFlag&32){const o=t._;o?(Gc(r,t,n),n&&Gl(r,"_",o,!0)):qc(t,r)}else t&&zc(e,t)},rd=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=ie;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:Gc(o,t,n):(s=!t.$stable,qc(t,o)),i=t}else t&&(zc(e,t),i={default:1});if(s)for(const l in o)!Fs(l)&&i[l]==null&&delete o[l]},ke=ra;function od(e){return Jc(e)}function sd(e){return Jc(e,Of)}function Jc(e,t){const n=no();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:c,setText:u,setElementText:a,parentNode:f,nextSibling:d,setScopeId:h=ut,insertStaticContent:_}=e,m=(p,y,S,A=null,C=null,P=null,N=void 0,$=null,j=!!y.dynamicChildren)=>{if(p===y)return;p&&!Ze(p,y)&&(A=x(p),Ie(p,C,P,!0),p=null),y.patchFlag===-2&&(j=!1,y.dynamicChildren=null);const{type:I,ref:J,shapeFlag:F}=y;switch(I){case Qt:v(p,y,S,A);break;case _e:k(p,y,S,A);break;case Fn:p==null&&w(y,S,A,N);break;case Ae:M(p,y,S,A,C,P,N,$,j);break;default:F&1?E(p,y,S,A,C,P,N,$,j):F&6?z(p,y,S,A,C,P,N,$,j):(F&64||F&128)&&I.process(p,y,S,A,C,P,N,$,j,W)}J!=null&&C&&Gn(J,p&&p.ref,P,y||p,!y)},v=(p,y,S,A)=>{if(p==null)r(y.el=l(y.children),S,A);else{const C=y.el=p.el;y.children!==p.children&&u(C,y.children)}},k=(p,y,S,A)=>{p==null?r(y.el=c(y.children||""),S,A):y.el=p.el},w=(p,y,S,A)=>{[p.el,p.anchor]=_(p.children,y,S,A,p.el,p.anchor)},g=({el:p,anchor:y},S,A)=>{let C;for(;p&&p!==y;)C=d(p),r(p,S,A),p=C;r(y,S,A)},b=({el:p,anchor:y})=>{let S;for(;p&&p!==y;)S=d(p),o(p),p=S;o(y)},E=(p,y,S,A,C,P,N,$,j)=>{y.type==="svg"?N="svg":y.type==="math"&&(N="mathml"),p==null?T(y,S,A,C,P,N,$,j):L(p,y,C,P,N,$,j)},T=(p,y,S,A,C,P,N,$)=>{let j,I;const{props:J,shapeFlag:F,transition:K,dirs:Y}=p;if(j=p.el=i(p.type,P,J&&J.is,J),F&8?a(j,p.children):F&16&&U(p.children,j,null,A,C,xo(p,P),N,$),Y&&ct(p,null,A,"created"),R(j,p,p.scopeId,N,A),J){for(const ce in J)ce!=="value"&&!hn(ce)&&s(j,ce,null,J[ce],P,A);"value"in J&&s(j,"value",null,J.value,P),(I=J.onVnodeBeforeMount)&&Me(I,A,p)}Y&&ct(p,null,A,"beforeMount");const ee=Qc(C,K);ee&&K.beforeEnter(j),r(j,y,S),((I=J&&J.onVnodeMounted)||ee||Y)&&ke(()=>{I&&Me(I,A,p),ee&&K.enter(j),Y&&ct(p,null,A,"mounted")},C)},R=(p,y,S,A,C)=>{if(S&&h(p,S),A)for(let P=0;P{for(let I=j;I{const $=y.el=p.el;let{patchFlag:j,dynamicChildren:I,dirs:J}=y;j|=p.patchFlag&16;const F=p.props||ie,K=y.props||ie;let Y;if(S&&Ut(S,!1),(Y=K.onVnodeBeforeUpdate)&&Me(Y,S,y,p),J&&ct(y,p,S,"beforeUpdate"),S&&Ut(S,!0),(F.innerHTML&&K.innerHTML==null||F.textContent&&K.textContent==null)&&a($,""),I?O(p.dynamicChildren,I,$,S,A,xo(y,C),P):N||V(p,y,$,null,S,A,xo(y,C),P,!1),j>0){if(j&16)q($,F,K,S,C);else if(j&2&&F.class!==K.class&&s($,"class",null,K.class,C),j&4&&s($,"style",F.style,K.style,C),j&8){const ee=y.dynamicProps;for(let ce=0;ce{Y&&Me(Y,S,y,p),J&&ct(y,p,S,"updated")},A)},O=(p,y,S,A,C,P,N)=>{for(let $=0;${if(y!==S){if(y!==ie)for(const P in y)!hn(P)&&!(P in S)&&s(p,P,y[P],null,C,A);for(const P in S){if(hn(P))continue;const N=S[P],$=y[P];N!==$&&P!=="value"&&s(p,P,$,N,C,A)}"value"in S&&s(p,"value",y.value,S.value,C)}},M=(p,y,S,A,C,P,N,$,j)=>{const I=y.el=p?p.el:l(""),J=y.anchor=p?p.anchor:l("");let{patchFlag:F,dynamicChildren:K,slotScopeIds:Y}=y;Y&&($=$?$.concat(Y):Y),p==null?(r(I,S,A),r(J,S,A),U(y.children||[],S,J,C,P,N,$,j)):F>0&&F&64&&K&&p.dynamicChildren?(O(p.dynamicChildren,K,S,C,P,N,$),(y.key!=null||C&&y===C.subTree)&&Yc(p,y,!0)):V(p,y,S,J,C,P,N,$,j)},z=(p,y,S,A,C,P,N,$,j)=>{y.slotScopeIds=$,p==null?y.shapeFlag&512?C.ctx.activate(y,S,A,N,j):Z(y,S,A,C,P,N,j):ne(p,y,j)},Z=(p,y,S,A,C,P,N)=>{const $=p.component=Rd(p,A,C);if(ir(p)&&($.ctx.renderer=W),xd($,!1,N),$.asyncDep){if(C&&C.registerDep($,B,N),!p.el){const j=$.subTree=de(_e);k(null,j,y,S)}}else B($,p,y,S,C,P,N)},ne=(p,y,S)=>{const A=y.component=p.component;if(md(p,y,S))if(A.asyncDep&&!A.asyncResolved){X(A,y,S);return}else A.next=y,A.update();else y.el=p.el,A.vnode=y},B=(p,y,S,A,C,P,N)=>{const $=()=>{if(p.isMounted){let{next:F,bu:K,u:Y,parent:ee,vnode:ce}=p;{const De=Xc(p);if(De){F&&(F.el=ce.el,X(p,F,N)),De.asyncDep.then(()=>{p.isUnmounted||$()});return}}let le=F,Fe;Ut(p,!1),F?(F.el=ce.el,X(p,F,N)):F=ce,K&&jn(K),(Fe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(Fe,ee,F,ce),Ut(p,!0);const Ce=Ao(p),Ye=p.subTree;p.subTree=Ce,m(Ye,Ce,f(Ye.el),x(Ye),p,C,P),F.el=Ce.el,le===null&&fo(p,Ce.el),Y&&ke(Y,C),(Fe=F.props&&F.props.onVnodeUpdated)&&ke(()=>Me(Fe,ee,F,ce),C)}else{let F;const{el:K,props:Y}=y,{bm:ee,m:ce,parent:le,root:Fe,type:Ce}=p,Ye=$t(y);if(Ut(p,!1),ee&&jn(ee),!Ye&&(F=Y&&Y.onVnodeBeforeMount)&&Me(F,le,y),Ut(p,!0),K&&he){const De=()=>{p.subTree=Ao(p),he(K,p.subTree,p,C,null)};Ye&&Ce.__asyncHydrate?Ce.__asyncHydrate(K,p,De):De()}else{Fe.ce&&Fe.ce._injectChildStyle(Ce);const De=p.subTree=Ao(p);m(null,De,S,A,p,C,P),y.el=De.el}if(ce&&ke(ce,C),!Ye&&(F=Y&&Y.onVnodeMounted)){const De=y;ke(()=>Me(F,le,De),C)}(y.shapeFlag&256||le&&$t(le.vnode)&&le.vnode.shapeFlag&256)&&p.a&&ke(p.a,C),p.isMounted=!0,y=S=A=null}};p.scope.on();const j=p.effect=new ec($);p.scope.off();const I=p.update=j.run.bind(j),J=p.job=j.runIfDirty.bind(j);J.i=p,J.id=p.uid,j.scheduler=()=>js(J),Ut(p,!0),I()},X=(p,y,S)=>{y.component=p;const A=p.vnode.props;p.vnode=y,p.next=null,Zf(p,y.props,A,S),rd(p,y.children,S),wt(),ui(p),kt()},V=(p,y,S,A,C,P,N,$,j=!1)=>{const I=p&&p.children,J=p?p.shapeFlag:0,F=y.children,{patchFlag:K,shapeFlag:Y}=y;if(K>0){if(K&128){Ct(I,F,S,A,C,P,N,$,j);return}else if(K&256){ye(I,F,S,A,C,P,N,$,j);return}}Y&8?(J&16&&We(I,C,P),F!==I&&a(S,F)):J&16?Y&16?Ct(I,F,S,A,C,P,N,$,j):We(I,C,P,!0):(J&8&&a(S,""),Y&16&&U(F,S,A,C,P,N,$,j))},ye=(p,y,S,A,C,P,N,$,j)=>{p=p||fn,y=y||fn;const I=p.length,J=y.length,F=Math.min(I,J);let K;for(K=0;KJ?We(p,C,P,!0,!1,F):U(y,S,A,C,P,N,$,j,F)},Ct=(p,y,S,A,C,P,N,$,j)=>{let I=0;const J=y.length;let F=p.length-1,K=J-1;for(;I<=F&&I<=K;){const Y=p[I],ee=y[I]=j?Ot(y[I]):Be(y[I]);if(Ze(Y,ee))m(Y,ee,S,null,C,P,N,$,j);else break;I++}for(;I<=F&&I<=K;){const Y=p[F],ee=y[K]=j?Ot(y[K]):Be(y[K]);if(Ze(Y,ee))m(Y,ee,S,null,C,P,N,$,j);else break;F--,K--}if(I>F){if(I<=K){const Y=K+1,ee=YK)for(;I<=F;)Ie(p[I],C,P,!0),I++;else{const Y=I,ee=I,ce=new Map;for(I=ee;I<=K;I++){const Ue=y[I]=j?Ot(y[I]):Be(y[I]);Ue.key!=null&&ce.set(Ue.key,I)}let le,Fe=0;const Ce=K-ee+1;let Ye=!1,De=0;const Tn=new Array(Ce);for(I=0;I=Ce){Ie(Ue,C,P,!0);continue}let st;if(Ue.key!=null)st=ce.get(Ue.key);else for(le=ee;le<=K;le++)if(Tn[le-ee]===0&&Ze(Ue,y[le])){st=le;break}st===void 0?Ie(Ue,C,P,!0):(Tn[st-ee]=I+1,st>=De?De=st:Ye=!0,m(Ue,y[st],S,null,C,P,N,$,j),Fe++)}const ri=Ye?id(Tn):fn;for(le=ri.length-1,I=Ce-1;I>=0;I--){const Ue=ee+I,st=y[Ue],oi=Ue+1{const{el:P,type:N,transition:$,children:j,shapeFlag:I}=p;if(I&6){ot(p.component.subTree,y,S,A);return}if(I&128){p.suspense.move(y,S,A);return}if(I&64){N.move(p,y,S,W);return}if(N===Ae){r(P,y,S);for(let F=0;F$.enter(P),C);else{const{leave:F,delayLeave:K,afterLeave:Y}=$,ee=()=>{p.ctx.isUnmounted?o(P):r(P,y,S)},ce=()=>{F(P,()=>{ee(),Y&&Y()})};K?K(P,ee,ce):ce()}else r(P,y,S)},Ie=(p,y,S,A=!1,C=!1)=>{const{type:P,props:N,ref:$,children:j,dynamicChildren:I,shapeFlag:J,patchFlag:F,dirs:K,cacheIndex:Y}=p;if(F===-2&&(C=!1),$!=null&&(wt(),Gn($,null,S,p,!0),kt()),Y!=null&&(y.renderCache[Y]=void 0),J&256){y.ctx.deactivate(p);return}const ee=J&1&&K,ce=!$t(p);let le;if(ce&&(le=N&&N.onVnodeBeforeUnmount)&&Me(le,y,p),J&6)fr(p.component,S,A);else{if(J&128){p.suspense.unmount(S,A);return}ee&&ct(p,null,y,"beforeUnmount"),J&64?p.type.remove(p,y,S,W,A):I&&!I.hasOnce&&(P!==Ae||F>0&&F&64)?We(I,y,S,!1,!0):(P===Ae&&F&384||!C&&J&16)&&We(j,y,S),A&&rn(p)}(ce&&(le=N&&N.onVnodeUnmounted)||ee)&&ke(()=>{le&&Me(le,y,p),ee&&ct(p,null,y,"unmounted")},S)},rn=p=>{const{type:y,el:S,anchor:A,transition:C}=p;if(y===Ae){on(S,A);return}if(y===Fn){b(p);return}const P=()=>{o(S),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(p.shapeFlag&1&&C&&!C.persisted){const{leave:N,delayLeave:$}=C,j=()=>N(S,P);$?$(p.el,P,j):j()}else P()},on=(p,y)=>{let S;for(;p!==y;)S=d(p),o(p),p=S;o(y)},fr=(p,y,S)=>{const{bum:A,scope:C,job:P,subTree:N,um:$,m:j,a:I,parent:J,slots:{__:F}}=p;Wr(j),Wr(I),A&&jn(A),J&&G(F)&&F.forEach(K=>{J.renderCache[K]=void 0}),C.stop(),P&&(P.flags|=8,Ie(N,p,y,S)),$&&ke($,y),ke(()=>{p.isUnmounted=!0},y),y&&y.pendingBranch&&!y.isUnmounted&&p.asyncDep&&!p.asyncResolved&&p.suspenseId===y.pendingId&&(y.deps--,y.deps===0&&y.resolve())},We=(p,y,S,A=!1,C=!1,P=0)=>{for(let N=P;N{if(p.shapeFlag&6)return x(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const y=d(p.anchor||p.el),S=y&&y[Tf];return S?d(S):y};let D=!1;const H=(p,y,S)=>{p==null?y._vnode&&Ie(y._vnode,null,null,!0):m(y._vnode||null,p,y,null,null,null,S),y._vnode=p,D||(D=!0,ui(),Fr(),D=!1)},W={p:m,um:Ie,m:ot,r:rn,mt:Z,mc:U,pc:V,pbc:O,n:x,o:e};let re,he;return t&&([re,he]=t(W)),{render:H,hydrate:re,createApp:Yf(H,re)}}function xo({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 Ut({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Qc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Yc(e,t,n=!1){const r=e.children,o=t.children;if(G(r)&&G(o))for(let s=0;s>1,e[n[l]]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 Xc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Xc(t)}function Wr(e){if(e)for(let t=0;tTe(ld);function ad(e,t){return ao(e,null,t)}function ud(e,t){return ao(e,null,{flush:"sync"})}function tt(e,t,n){return ao(e,t,n)}function ao(e,t,n=ie){const{immediate:r,deep:o,flush:s,once:i}=n,l=we({},n),c=t&&r||!t&&s!=="post";let u;if(vn){if(s==="sync"){const h=cd();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!c){const h=()=>{};return h.stop=ut,h.resume=ut,h.pause=ut,h}}const a=ve;l.call=(h,_,m)=>nt(h,a,_,m);let f=!1;s==="post"?l.scheduler=h=>{ke(h,a&&a.suspense)}:s!=="sync"&&(f=!0,l.scheduler=(h,_)=>{_?h():js(h)}),l.augmentJob=h=>{t&&(h.flags|=4),f&&(h.flags|=2,a&&(h.id=a.uid,h.i=a))};const d=kf(e,t,l);return vn&&(u?u.push(d):c&&d()),d}function fd(e,t,n){const r=this.proxy,o=ge(e)?e.includes(".")?Zc(r,e):()=>r[e]:e.bind(r,r);let s;Q(t)?s=t:(s=t.handler,n=t);const i=cr(this),l=ao(o,s.bind(r),n);return i(),l}function Zc(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{let a,f=ie,d;return ud(()=>{const h=e[o];Le(a,h)&&(a=h,u())}),{get(){return c(),n.get?n.get(a):a},set(h){const _=n.set?n.set(h):h;if(!Le(_,a)&&!(f!==ie&&Le(h,f)))return;const m=r.vnode.props;m&&(t in m||o in m||s in m)&&(`onUpdate:${t}`in m||`onUpdate:${o}`in m||`onUpdate:${s}`in m)||(a=h,u()),r.emit(`update:${t}`,_),Le(h,_)&&Le(h,f)&&!Le(_,d)&&u(),f=h,d=_}}});return l[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?i||ie:l,done:!1}:{done:!0}}}},l}const ea=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ve(t)}Modifiers`]||e[`${Dt(t)}Modifiers`];function dd(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ie;let o=n;const s=t.startsWith("update:"),i=s&&ea(r,t.slice(7));i&&(i.trim&&(o=n.map(a=>ge(a)?a.trim():a)),i.number&&(o=n.map($u)));let l,c=r[l=bo(t)]||r[l=bo(Ve(t))];!c&&s&&(c=r[l=bo(Dt(t))]),c&&nt(c,e,6,o);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nt(u,e,6,o)}}function ta(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!Q(e)){const c=u=>{const a=ta(u,t,!0);a&&(l=!0,we(i,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!s&&!l?(ue(e)&&r.set(e,null),null):(G(s)?s.forEach(c=>i[c]=null):we(i,s),ue(e)&&r.set(e,i),i)}function uo(e,t){return!e||!nr(t)?!1:(t=t.slice(2).replace(/Once$/,""),se(e,t[0].toLowerCase()+t.slice(1))||se(e,Dt(t))||se(e,t))}function Ao(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[s],slots:i,attrs:l,emit:c,render:u,renderCache:a,props:f,data:d,setupState:h,ctx:_,inheritAttrs:m}=e,v=Dr(e);let k,w;try{if(n.shapeFlag&4){const b=o||r,E=b;k=Be(u.call(E,b,a,f,h,d,_)),w=l}else{const b=t;k=Be(b.length>1?b(f,{attrs:l,slots:i,emit:c}):b(f,null)),w=t.props?l:pd(l)}}catch(b){Dn.length=0,En(b,e,1),k=de(_e)}let g=k;if(w&&m!==!1){const b=Object.keys(w),{shapeFlag:E}=g;b.length&&E&7&&(s&&b.some(Ts)&&(w=gd(w,s)),g=Je(g,w,!1,!0))}return n.dirs&&(g=Je(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&yn(g,n.transition),k=g,Dr(v),k}function hd(e,t=!0){let n;for(let r=0;r{let t;for(const n in e)(n==="class"||n==="style"||nr(n))&&((t||(t={}))[n]=e[n]);return t},gd=(e,t)=>{const n={};for(const r in e)(!Ts(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function md(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:c}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?bi(r,i,u):!!i;if(c&8){const a=t.dynamicProps;for(let f=0;fe.__isSuspense;let es=0;const yd={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,s,i,l,c,u){if(e==null)_d(t,n,r,o,s,i,l,c,u);else{if(s&&s.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}bd(e,t,n,r,o,i,l,c,u)}},hydrate:vd,normalize:wd},Us=yd;function Jn(e,t){const n=e.props&&e.props[t];Q(n)&&n()}function _d(e,t,n,r,o,s,i,l,c){const{p:u,o:{createElement:a}}=c,f=a("div"),d=e.suspense=na(e,o,r,t,f,n,s,i,l,c);u(null,d.pendingBranch=e.ssContent,f,null,r,d,s,i),d.deps>0?(Jn(e,"onPending"),Jn(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,s,i),gn(d,e.ssFallback)):d.resolve(!1,!0)}function bd(e,t,n,r,o,s,i,l,{p:c,um:u,o:{createElement:a}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,h=t.ssFallback,{activeBranch:_,pendingBranch:m,isInFallback:v,isHydrating:k}=f;if(m)f.pendingBranch=d,Ze(d,m)?(c(m,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0?f.resolve():v&&(k||(c(_,h,n,r,o,null,s,i,l),gn(f,h)))):(f.pendingId=es++,k?(f.isHydrating=!1,f.activeBranch=m):u(m,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=a("div"),v?(c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0?f.resolve():(c(_,h,n,r,o,null,s,i,l),gn(f,h))):_&&Ze(d,_)?(c(_,d,n,r,o,f,s,i,l),f.resolve(!0)):(c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0&&f.resolve()));else if(_&&Ze(d,_))c(_,d,n,r,o,f,s,i,l),gn(f,d);else if(Jn(t,"onPending"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=es++,c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0)f.resolve();else{const{timeout:w,pendingId:g}=f;w>0?setTimeout(()=>{f.pendingId===g&&f.fallback(h)},w):w===0&&f.fallback(h)}}function na(e,t,n,r,o,s,i,l,c,u,a=!1){const{p:f,m:d,um:h,n:_,o:{parentNode:m,remove:v}}=u;let k;const w=kd(e);w&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);const g=e.props?Jl(e.props.timeout):void 0,b=s,E={vnode:e,parent:t,parentComponent:n,namespace:i,container:r,hiddenContainer:o,deps:0,pendingId:es++,timeout:typeof g=="number"?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!a,isHydrating:a,isUnmounted:!1,effects:[],resolve(T=!1,R=!1){const{vnode:U,activeBranch:L,pendingBranch:O,pendingId:q,effects:M,parentComponent:z,container:Z}=E;let ne=!1;E.isHydrating?E.isHydrating=!1:T||(ne=L&&O.transition&&O.transition.mode==="out-in",ne&&(L.transition.afterLeave=()=>{q===E.pendingId&&(d(O,Z,s===b?_(L):s,0),Go(M))}),L&&(m(L.el)===Z&&(s=_(L)),h(L,z,E,!0)),ne||d(O,Z,s,0)),gn(E,O),E.pendingBranch=null,E.isInFallback=!1;let B=E.parent,X=!1;for(;B;){if(B.pendingBranch){B.effects.push(...M),X=!0;break}B=B.parent}!X&&!ne&&Go(M),E.effects=[],w&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!R&&t.resolve()),Jn(U,"onResolve")},fallback(T){if(!E.pendingBranch)return;const{vnode:R,activeBranch:U,parentComponent:L,container:O,namespace:q}=E;Jn(R,"onFallback");const M=_(U),z=()=>{E.isInFallback&&(f(null,T,O,M,L,null,q,l,c),gn(E,T))},Z=T.transition&&T.transition.mode==="out-in";Z&&(U.transition.afterLeave=z),E.isInFallback=!0,h(U,L,null,!0),Z||z()},move(T,R,U){E.activeBranch&&d(E.activeBranch,T,R,U),E.container=T},next(){return E.activeBranch&&_(E.activeBranch)},registerDep(T,R,U){const L=!!E.pendingBranch;L&&E.deps++;const O=T.vnode.el;T.asyncDep.catch(q=>{En(q,T,0)}).then(q=>{if(T.isUnmounted||E.isUnmounted||E.pendingId!==T.suspenseId)return;T.asyncResolved=!0;const{vnode:M}=T;ns(T,q),O&&(M.el=O);const z=!O&&T.subTree.el;R(T,M,m(O||T.subTree.el),O?null:_(T.subTree),E,i,U),z&&v(z),fo(T,M.el),L&&--E.deps===0&&E.resolve()})},unmount(T,R){E.isUnmounted=!0,E.activeBranch&&h(E.activeBranch,n,T,R),E.pendingBranch&&h(E.pendingBranch,n,T,R)}};return E}function vd(e,t,n,r,o,s,i,l,c){const u=t.suspense=na(t,r,n,e.parentNode,document.createElement("div"),null,o,s,i,l,!0),a=c(e,u.pendingBranch=t.ssContent,n,u,s,i);return u.deps===0&&u.resolve(!1,!0),a}function wd(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=vi(r?n.default:n),e.ssFallback=r?vi(n.fallback):de(_e)}function vi(e){let t;if(Q(e)){const n=bn&&e._c;n&&(e._d=!1,ze()),e=e(),n&&(e._d=!0,t=$e,oa())}return G(e)&&(e=hd(e)),e=Be(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function ra(e,t){t&&t.pendingBranch?G(e)?t.effects.push(...e):t.effects.push(e):Go(e)}function gn(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,fo(r,o))}function kd(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ae=Symbol.for("v-fgt"),Qt=Symbol.for("v-txt"),_e=Symbol.for("v-cmt"),Fn=Symbol.for("v-stc"),Dn=[];let $e=null;function ze(e=!1){Dn.push($e=e?null:[])}function oa(){Dn.pop(),$e=Dn[Dn.length-1]||null}let bn=1;function wi(e,t=!1){bn+=e,e<0&&$e&&t&&($e.hasOnce=!0)}function sa(e){return e.dynamicChildren=bn>0?$e||fn:null,oa(),bn>0&&$e&&$e.push(e),e}function ia(e,t,n,r,o,s){return sa(ca(e,t,n,r,o,s,!0))}function vt(e,t,n,r,o){return sa(de(e,t,n,r,o,!0))}function Xt(e){return e?e.__v_isVNode===!0:!1}function Ze(e,t){return e.type===t.type&&e.key===t.key}const la=({key:e})=>e??null,Cr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||be(e)||Q(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function ca(e,t=null,n=null,r=0,o=null,s=e===Ae?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&la(t),ref:t&&Cr(t),scopeId:kc,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:Se};return l?(Bs(c,n),s&128&&e.normalize(c)):n&&(c.shapeFlag|=ge(n)?8:16),bn>0&&!i&&$e&&(c.patchFlag>0||s&6)&&c.patchFlag!==32&&$e.push(c),c}const de=Ed;function Ed(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===jc)&&(e=_e),Xt(e)){const l=Je(e,t,!0);return n&&Bs(l,n),bn>0&&!s&&$e&&(l.shapeFlag&6?$e[$e.indexOf(e)]=l:$e.push(l)),l.patchFlag=-2,l}if(Od(e)&&(e=e.__vccOpts),t){t=aa(t);let{class:l,style:c}=t;l&&!ge(l)&&(t.class=oo(l)),ue(c)&&(Ls(c)&&!G(c)&&(c=we({},c)),t.style=ro(c))}const i=ge(e)?1:Kr(e)?128:Ec(e)?64:ue(e)?4:Q(e)?2:0;return ca(e,t,n,r,o,i,s,!0)}function aa(e){return e?Ls(e)||Vc(e)?we({},e):e:null}function Je(e,t,n=!1,r=!1){const{props:o,ref:s,patchFlag:i,children:l,transition:c}=e,u=t?fa(o||{},t):o,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&la(u),ref:t&&t.ref?n&&s?G(s)?s.concat(Cr(t)):[s,Cr(t)]:Cr(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Je(e.ssContent),ssFallback:e.ssFallback&&Je(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&yn(a,c.clone(a)),a}function ua(e=" ",t=0){return de(Qt,null,e,t)}function Sd(e,t){const n=de(Fn,null,e);return n.staticCount=t,n}function g_(e="",t=!1){return t?(ze(),vt(_e,null,e)):de(_e,null,e)}function Be(e){return e==null||typeof e=="boolean"?de(_e):G(e)?de(Ae,null,e.slice()):Xt(e)?Ot(e):de(Qt,null,String(e))}function Ot(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Je(e)}function Bs(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(G(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Bs(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Vc(t)?t._ctx=Se:o===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Q(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),r&64?(n=16,t=[ua(t)]):n=8);e.children=t,e.shapeFlag|=n}function fa(...e){const t={};for(let n=0;nve||Se;let qr,ts;{const e=no(),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)}};qr=t("__VUE_INSTANCE_SETTERS__",n=>ve=n),ts=t("__VUE_SSR_SETTERS__",n=>vn=n)}const cr=e=>{const t=ve;return qr(e),e.scope.on(),()=>{e.scope.off(),qr(t)}},ki=()=>{ve&&ve.scope.off(),qr(null)};function da(e){return e.vnode.shapeFlag&4}let vn=!1;function xd(e,t=!1,n=!1){t&&ts(t);const{props:r,children:o}=e.vnode,s=da(e);Xf(e,r,s,t),nd(e,o,n||t);const i=s?Ad(e,t):void 0;return t&&ts(!1),i}function Ad(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vf);const{setup:r}=n;if(r){wt();const o=e.setupContext=r.length>1?pa(e):null,s=cr(e),i=sr(r,e,0,[e.props,o]),l=Rs(i);if(kt(),s(),(l||e.sp)&&!$t(e)&&Ns(e),l){if(i.then(ki,ki),t)return i.then(c=>{ns(e,c)}).catch(c=>{En(c,e,0)});e.asyncDep=i}else ns(e,i)}else ha(e)}function ns(e,t,n){Q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=gc(t)),ha(e)}function ha(e,t,n){const r=e.type;e.render||(e.render=r.render||ut);{const o=cr(e);wt();try{Kf(e)}finally{kt(),o()}}}const Pd={get(e,t){return xe(e,"get",""),e[t]}};function pa(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Pd),slots:e.slots,emit:e.emit,expose:t}}function Vs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(gc(df(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Hn)return Hn[n](e)},has(t,n){return n in t||n in Hn}})):e.proxy}function rs(e,t=!0){return Q(e)?e.displayName||e.name:e.name||t&&e.__name}function Od(e){return Q(e)&&"__vccOpts"in e}const je=(e,t)=>vf(e,t,vn);function pe(e,t,n){const r=arguments.length;return r===2?ue(t)&&!G(t)?Xt(t)?de(e,null,[t]):de(e,t):de(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Xt(n)&&(n=[n]),de(e,t,n))}const Id="3.5.16";/** +* @vue/runtime-dom v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let os;const Ei=typeof window<"u"&&window.trustedTypes;if(Ei)try{os=Ei.createPolicy("vue",{createHTML:e=>e})}catch{}const ga=os?e=>os.createHTML(e):e=>e,Md="http://www.w3.org/2000/svg",Ld="http://www.w3.org/1998/Math/MathML",_t=typeof document<"u"?document:null,Si=_t&&_t.createElement("template"),jd={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"?_t.createElementNS(Md,e):t==="mathml"?_t.createElementNS(Ld,e):n?_t.createElement(e,{is:n}):_t.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>_t.createTextNode(e),createComment:e=>_t.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>_t.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{Si.innerHTML=ga(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const l=Si.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},xt="transition",xn="animation",Qn=Symbol("_vtc"),ma={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},$d=we({},Sc,ma),Nd=e=>(e.displayName="Transition",e.props=$d,e),Hd=Nd((e,{slots:t})=>pe(xf,Fd(e),t)),Bt=(e,t=[])=>{G(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ti=e=>e?G(e)?e.some(t=>t.length>1):e.length>1:!1;function Fd(e){const t={};for(const M in e)M in ma||(t[M]=e[M]);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:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:u=i,appearToClass:a=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,_=Dd(o),m=_&&_[0],v=_&&_[1],{onBeforeEnter:k,onEnter:w,onEnterCancelled:g,onLeave:b,onLeaveCancelled:E,onBeforeAppear:T=k,onAppear:R=w,onAppearCancelled:U=g}=t,L=(M,z,Z,ne)=>{M._enterCancelled=ne,Vt(M,z?a:l),Vt(M,z?u:i),Z&&Z()},O=(M,z)=>{M._isLeaving=!1,Vt(M,f),Vt(M,h),Vt(M,d),z&&z()},q=M=>(z,Z)=>{const ne=M?R:w,B=()=>L(z,M,Z);Bt(ne,[z,B]),Ci(()=>{Vt(z,M?c:s),gt(z,M?a:l),Ti(ne)||Ri(z,r,m,B)})};return we(t,{onBeforeEnter(M){Bt(k,[M]),gt(M,s),gt(M,i)},onBeforeAppear(M){Bt(T,[M]),gt(M,c),gt(M,u)},onEnter:q(!1),onAppear:q(!0),onLeave(M,z){M._isLeaving=!0;const Z=()=>O(M,z);gt(M,f),M._enterCancelled?(gt(M,d),Pi()):(Pi(),gt(M,d)),Ci(()=>{M._isLeaving&&(Vt(M,f),gt(M,h),Ti(b)||Ri(M,r,v,Z))}),Bt(b,[M,Z])},onEnterCancelled(M){L(M,!1,void 0,!0),Bt(g,[M])},onAppearCancelled(M){L(M,!0,void 0,!0),Bt(U,[M])},onLeaveCancelled(M){O(M),Bt(E,[M])}})}function Dd(e){if(e==null)return null;if(ue(e))return[Po(e.enter),Po(e.leave)];{const t=Po(e);return[t,t]}}function Po(e){return Jl(e)}function gt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Qn]||(e[Qn]=new Set)).add(t)}function Vt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Qn];n&&(n.delete(t),n.size||(e[Qn]=void 0))}function Ci(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Ud=0;function Ri(e,t,n,r){const o=e._endId=++Ud,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=Bd(e,t);if(!i)return r();const u=i+"end";let a=0;const f=()=>{e.removeEventListener(u,d),s()},d=h=>{h.target===e&&++a>=c&&f()};setTimeout(()=>{a(n[_]||"").split(", "),o=r(`${xt}Delay`),s=r(`${xt}Duration`),i=xi(o,s),l=r(`${xn}Delay`),c=r(`${xn}Duration`),u=xi(l,c);let a=null,f=0,d=0;t===xt?i>0&&(a=xt,f=i,d=s.length):t===xn?u>0&&(a=xn,f=u,d=c.length):(f=Math.max(i,u),a=f>0?i>u?xt:xn:null,d=a?a===xt?s.length:c.length:0);const h=a===xt&&/\b(transform|all)(,|$)/.test(r(`${xt}Property`).toString());return{type:a,timeout:f,propCount:d,hasTransform:h}}function xi(e,t){for(;e.lengthAi(n)+Ai(e[r])))}function Ai(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Pi(){return document.body.offsetHeight}function Vd(e,t,n){const r=e[Qn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Oi=Symbol("_vod"),Wd=Symbol("_vsh"),Kd=Symbol(""),qd=/(^|;)\s*display\s*:/;function zd(e,t,n){const r=e.style,o=ge(n);let s=!1;if(n&&!o){if(t)if(ge(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Rr(r,l,"")}else for(const i in t)n[i]==null&&Rr(r,i,"");for(const i in n)i==="display"&&(s=!0),Rr(r,i,n[i])}else if(o){if(t!==n){const i=r[Kd];i&&(n+=";"+i),r.cssText=n,s=qd.test(n)}}else t&&e.removeAttribute("style");Oi in e&&(e[Oi]=s?r.display:"",e[Wd]&&(r.display="none"))}const Ii=/\s*!important$/;function Rr(e,t,n){if(G(n))n.forEach(r=>Rr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Gd(e,t);Ii.test(n)?e.setProperty(Dt(r),n.replace(Ii,""),"important"):e[r]=n}}const Mi=["Webkit","Moz","ms"],Oo={};function Gd(e,t){const n=Oo[t];if(n)return n;let r=Ve(t);if(r!=="filter"&&r in e)return Oo[t]=r;r=to(r);for(let o=0;oIo||(Zd.then(()=>Io=0),Io=Date.now());function th(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;nt(nh(r,n.value),t,5,[r])};return n.value=e,n.attached=eh(),n}function nh(e,t){if(G(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 Fi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rh=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Vd(e,r,i):t==="style"?zd(e,n,r):nr(t)?Ts(t)||Yd(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oh(e,t,r,i))?($i(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ji(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(r))?$i(e,Ve(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),ji(e,t,r,i))};function oh(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fi(t)&&Q(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 Fi(t)&&ge(n)?!1:t in e}const sh=["ctrl","shift","alt","meta"],ih={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)=>sh.some(n=>e[`${n}Key`]&&!t.includes(n))},m_=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(o,...s)=>{for(let i=0;i{const t=lh().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ba(r);if(!o)return;const s=t._component;!Q(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,_a(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t},uh=(...e)=>{const t=ch().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ba(r);if(o)return n(o,!0,_a(o))},t};function _a(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ba(e){return ge(e)?document.querySelector(e):e}const fh=/"(?:_|\\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*:/,dh=/"(?: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*:/,hh=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function ph(e,t){if(e==="__proto__"||e==="constructor"&&t&&typeof t=="object"&&"prototype"in t){gh(e);return}return t}function gh(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function Yn(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(!hh.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(fh.test(e)||dh.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,ph)}return JSON.parse(e)}catch(r){if(t.strict)throw r;return e}}const mh=/#/g,yh=/&/g,_h=/\//g,bh=/=/g,Ws=/\+/g,vh=/%5e/gi,wh=/%60/gi,kh=/%7c/gi,Eh=/%20/gi;function Sh(e){return encodeURI(""+e).replace(kh,"|")}function ss(e){return Sh(typeof e=="string"?e:JSON.stringify(e)).replace(Ws,"%2B").replace(Eh,"+").replace(mh,"%23").replace(yh,"%26").replace(wh,"`").replace(vh,"^").replace(_h,"%2F")}function Mo(e){return ss(e).replace(bh,"%3D")}function zr(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function Th(e){return zr(e.replace(Ws," "))}function Ch(e){return zr(e.replace(Ws," "))}function va(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=Th(r[1]);if(o==="__proto__"||o==="constructor")continue;const s=Ch(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 Rh(e,t){return(typeof t=="number"||typeof t=="boolean")&&(t=String(t)),t?Array.isArray(t)?t.map(n=>`${Mo(e)}=${ss(n)}`).join("&"):`${Mo(e)}=${ss(t)}`:Mo(e)}function xh(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>Rh(t,e[t])).filter(Boolean).join("&")}const Ah=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,Ph=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,Oh=/^([/\\]\s*){2,}[^/\\]/,Ih=/^[\s\0]*(blob|data|javascript|vbscript):$/i,Mh=/\/$|\/\?|\/#/,Lh=/^\.?\//;function nn(e,t={}){return typeof t=="boolean"&&(t={acceptRelative:t}),t.strict?Ah.test(e):Ph.test(e)||(t.acceptRelative?Oh.test(e):!1)}function jh(e){return!!e&&Ih.test(e)}function is(e="",t){return t?Mh.test(e):e.endsWith("/")}function Xn(e="",t){if(!t)return(is(e)?e.slice(0,-1):e)||"/";if(!is(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 $h(e="",t){if(!t)return e.endsWith("/")?e:e+"/";if(is(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 Nh(e,t){if(ka(t)||nn(e))return e;const n=Xn(t);return e.startsWith(n)?e:Ks(n,e)}function Ui(e,t){if(ka(t))return e;const n=Xn(t);if(!e.startsWith(n))return e;const r=e.slice(n.length);return r[0]==="/"?r:"/"+r}function wa(e,t){const n=Ta(e),r={...va(n.search),...t};return n.search=xh(r),Dh(n)}function ka(e){return!e||e==="/"}function Hh(e){return e&&e!=="/"}function Ks(e,...t){let n=e||"";for(const r of t.filter(o=>Hh(o)))if(n){const o=r.replace(Lh,"");n=$h(n)+o}else n=r;return n}function Ea(...e){var i,l,c,u;const t=/\/(?!\/)/,n=e.filter(Boolean),r=[];let o=0;for(const a of n)if(!(!a||a==="/")){for(const[f,d]of a.split(t).entries())if(!(!d||d===".")){if(d===".."){if(r.length===1&&nn(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?(l=n[0])!=null&&l.startsWith("/")&&!s.startsWith("/")?s="/"+s:(c=n[0])!=null&&c.startsWith("./")&&!s.startsWith("./")&&(s="./"+s):s="../".repeat(-1*o)+s,(u=n[n.length-1])!=null&&u.endsWith("/")&&!s.endsWith("/")&&(s+="/"),s}function Fh(e,t){return zr(Xn(e))===zr(Xn(t))}const Sa=Symbol.for("ufo:protocolRelative");function Ta(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(!nn(e,{acceptRelative:!0}))return Bi(e);const[,r="",o,s=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,i="",l=""]=s.match(/([^#/?]*)(.*)?/)||[];r==="file:"&&(l=l.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:c,search:u,hash:a}=Bi(l);return{protocol:r.toLowerCase(),auth:o?o.slice(0,Math.max(0,o.length-1)):"",host:i,pathname:c,search:u,hash:a,[Sa]:!r}}function Bi(e=""){const[t="",n="",r=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:r}}function Dh(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[Sa]?(e.protocol||"")+"//":"")+o+s+t+n+r}class Uh extends Error{constructor(t,n){super(t,n),this.name="FetchError",n!=null&&n.cause&&!this.cause&&(this.cause=n.cause)}}function Bh(e){var c,u,a,f,d;const t=((c=e.error)==null?void 0:c.message)||((u=e.error)==null?void 0:u.toString())||"",n=((a=e.request)==null?void 0:a.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}`:""}`,l=new Uh(i,e.error?{cause:e.error}:void 0);for(const h of["request","options","response"])Object.defineProperty(l,h,{get(){return e[h]}});for(const[h,_]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(l,h,{get(){return e.response&&e.response[_]}});return l}const Vh=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function Vi(e="GET"){return Vh.has(e.toUpperCase())}function Wh(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 Kh=new Set(["image/svg","application/xml","application/xhtml","application/html"]),qh=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function zh(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return qh.test(t)?"json":Kh.has(t)||t.startsWith("text/")?"text":"blob"}function Gh(e,t,n,r){const o=Jh((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 Jh(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 br(e,t){if(t)if(Array.isArray(t))for(const n of t)await n(e);else await t(e)}const Qh=new Set([408,409,425,429,500,502,503,504]),Yh=new Set([101,204,205,304]);function Ca(e={}){const{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function o(l){const c=l.error&&l.error.name==="AbortError"&&!l.options.timeout||!1;if(l.options.retry!==!1&&!c){let a;typeof l.options.retry=="number"?a=l.options.retry:a=Vi(l.options.method)?0:1;const f=l.response&&l.response.status||500;if(a>0&&(Array.isArray(l.options.retryStatusCodes)?l.options.retryStatusCodes.includes(f):Qh.has(f))){const d=typeof l.options.retryDelay=="function"?l.options.retryDelay(l):l.options.retryDelay||0;return d>0&&await new Promise(h=>setTimeout(h,d)),s(l.request,{...l.options,retry:a-1})}}const u=Bh(l);throw Error.captureStackTrace&&Error.captureStackTrace(u,s),u}const s=async function(c,u={}){const a={request:c,options:Gh(c,u,e.defaults,n),response:void 0,error:void 0};a.options.method&&(a.options.method=a.options.method.toUpperCase()),a.options.onRequest&&await br(a,a.options.onRequest),typeof a.request=="string"&&(a.options.baseURL&&(a.request=Nh(a.request,a.options.baseURL)),a.options.query&&(a.request=wa(a.request,a.options.query),delete a.options.query),"query"in a.options&&delete a.options.query,"params"in a.options&&delete a.options.params),a.options.body&&Vi(a.options.method)&&(Wh(a.options.body)?(a.options.body=typeof a.options.body=="string"?a.options.body:JSON.stringify(a.options.body),a.options.headers=new n(a.options.headers||{}),a.options.headers.has("content-type")||a.options.headers.set("content-type","application/json"),a.options.headers.has("accept")||a.options.headers.set("accept","application/json")):("pipeTo"in a.options.body&&typeof a.options.body.pipeTo=="function"||typeof a.options.body.pipe=="function")&&("duplex"in a.options||(a.options.duplex="half")));let f;if(!a.options.signal&&a.options.timeout){const h=new r;f=setTimeout(()=>{const _=new Error("[TimeoutError]: The operation was aborted due to timeout");_.name="TimeoutError",_.code=23,h.abort(_)},a.options.timeout),a.options.signal=h.signal}try{a.response=await t(a.request,a.options)}catch(h){return a.error=h,a.options.onRequestError&&await br(a,a.options.onRequestError),await o(a)}finally{f&&clearTimeout(f)}if((a.response.body||a.response._bodyInit)&&!Yh.has(a.response.status)&&a.options.method!=="HEAD"){const h=(a.options.parseResponse?"json":a.options.responseType)||zh(a.response.headers.get("content-type")||"");switch(h){case"json":{const _=await a.response.text(),m=a.options.parseResponse||Yn;a.response._data=m(_);break}case"stream":{a.response._data=a.response.body||a.response._bodyInit;break}default:a.response._data=await a.response[h]()}}return a.options.onResponse&&await br(a,a.options.onResponse),!a.options.ignoreResponseError&&a.response.status>=400&&a.response.status<600?(a.options.onResponseError&&await br(a,a.options.onResponseError),await o(a)):a.response},i=async function(c,u){return(await s(c,u))._data};return i.raw=s,i.native=(...l)=>t(...l),i.create=(l={},c={})=>Ca({...e,...c,defaults:{...e.defaults,...c.defaults,...l}}),i}const Gr=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")}(),Xh=Gr.fetch?(...e)=>Gr.fetch(...e):()=>Promise.reject(new Error("[ofetch] global.fetch is not supported!")),Zh=Gr.Headers,ep=Gr.AbortController,tp=Ca({fetch:Xh,Headers:Zh,AbortController:ep}),np=tp,rp=()=>{var e;return((e=window==null?void 0:window.__NUXT__)==null?void 0:e.config)||{}},Jr=rp().app,op=()=>Jr.baseURL,sp=()=>Jr.buildAssetsDir,qs=(...e)=>Ea(Ra(),sp(),...e),Ra=(...e)=>{const t=Jr.cdnURL||Jr.baseURL;return e.length?Ea(t,...e):t};globalThis.__buildAssetsURL=qs,globalThis.__publicAssetsURL=Ra;globalThis.$fetch||(globalThis.$fetch=np.create({baseURL:op()}));"global"in globalThis||(globalThis.global=globalThis);function ls(e,t={},n){for(const r in e){const o=e[r],s=n?`${n}:${r}`:r;typeof o=="object"&&o!==null?ls(o,t,s):typeof o=="function"&&(t[s]=o)}return t}const ip={run:e=>e()},lp=()=>ip,xa=typeof console.createTask<"u"?console.createTask:lp;function cp(e,t){const n=t.shift(),r=xa(n);return e.reduce((o,s)=>o.then(()=>r.run(()=>s(...t))),Promise.resolve())}function ap(e,t){const n=t.shift(),r=xa(n);return Promise.all(e.map(o=>r.run(()=>o(...t))))}function Lo(e,t){for(const n of[...e])n(t)}class up{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=ls(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=ls(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(cp,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(ap,t,...n)}callHookWith(t,n,...r){const o=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&Lo(this._before,o);const s=t(n in this._hooks?[...this._hooks[n]]:[],r);return s instanceof Promise?s.finally(()=>{this._after&&o&&Lo(this._after,o)}):(this._after&&o&&Lo(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 Aa(){return new up}function fp(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,l)=>{l||r(i),t=i,n=!0},unset:()=>{t=void 0,n=!1},call:(i,l)=>{r(i),t=i;try{return o?o.run(i,l):l()}finally{n||(t=void 0)}},async callAsync(i,l){t=i;const c=()=>{t=i},u=()=>t===i?c:void 0;cs.add(u);try{const a=o?o.run(i,l):l();return n||(t=void 0),await a}finally{cs.delete(u)}}}}function dp(e={}){const t={};return{get(n,r={}){return t[n]||(t[n]=fp({...e,...r})),t[n]}}}const Qr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof global<"u"?global:typeof window<"u"?window:{},Wi="__unctx__",hp=Qr[Wi]||(Qr[Wi]=dp()),pp=(e,t={})=>hp.get(e,t),Ki="__unctx_async_handlers__",cs=Qr[Ki]||(Qr[Ki]=new Set);function mn(e){const t=[];for(const o of cs){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 gp=!1,qi=!1,mp=!1,y_={componentName:"NuxtLink",prefetch:!0,prefetchOn:{visibility:!0}},yp=null,_p="#__nuxt",Pa="nuxt-app",zi=36e5,bp="vite:preloadError";function Oa(e=Pa){return pp(e,{asyncContext:!1})}const vp="__nuxt_plugin";function wp(e){var o;let t=0;const n={_id:e.id||Pa||"nuxt-app",_scope:Ku(),provide:void 0,globalName:"nuxt",versions:{get nuxt(){return"3.17.4"},get vue(){return n.vueApp.version}},payload:at({...((o=e.ssrContext)==null?void 0:o.payload)||{},data:at({}),state:dt({}),once:new Set,_errors:at({})}),static:{data:{}},runWithContext(s){return n._scope.active&&!or()?n._scope.run(()=>Gi(n,s)):Gi(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:at({}),_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=Aa(),n.hook=n.hooks.hook,n.callHook=n.hooks.callHook,n.provide=(s,i)=>{const l="$"+s;vr(n,l,i),vr(n.vueApp.config.globalProperties,l,i)},vr(n.vueApp,"$nuxt",n),vr(n.vueApp.config.globalProperties,"$nuxt",n);{window.addEventListener(bp,i=>{n.callHook("app:chunkError",{error:i.payload}),i.payload.message.includes("Unable to preload CSS")&&i.preventDefault()}),window.useNuxtApp||(window.useNuxtApp=me);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 kp(e,t){t.hooks&&e.hooks.addHooks(t.hooks)}async function Ep(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 Sp(e,t){const n=new Set,r=[],o=[],s=[];let i=0;async function l(c){var a;const u=((a=c.dependsOn)==null?void 0:a.filter(f=>t.some(d=>d._name===f)&&!n.has(f)))??[];if(u.length>0)r.push([new Set(u),c]);else{const f=Ep(e,c).then(async()=>{c._name&&(n.add(c._name),await Promise.all(r.map(async([d,h])=>{d.has(c._name)&&(d.delete(c._name),d.size===0&&(i++,await l(h)))})))});c.parallel?o.push(f.catch(d=>s.push(d))):await f}}for(const c of t)kp(e,c);for(const c of t)await l(c);if(await Promise.all(o),i)for(let c=0;c{}),e,{[vp]:!0,_name:t})}function Gi(e,t,n){const r=()=>t();return Oa(e._id).set(e),e.vueApp.runWithContext(r)}function Ia(e){var n;let t;return co()&&(t=(n=tn())==null?void 0:n.appContext.app.$nuxt),t||(t=Oa(e).tryUse()),t||null}function me(e){const t=Ia(e);if(!t)throw new Error("[nuxt] instance unavailable");return t}function ar(e){return me().$config}function vr(e,t,n){Object.defineProperty(e,t,{get:()=>n})}function Tp(e,t){return{ctx:{table:e},matchAll:n=>La(n,e)}}function Ma(e){const t={};for(const n in e)t[n]=n==="dynamic"?new Map(Object.entries(e[n]).map(([r,o])=>[r,Ma(o)])):new Map(Object.entries(e[n]));return t}function Cp(e){return Tp(Ma(e))}function La(e,t,n){e.endsWith("/")&&(e=e.slice(0,-1)||"/");const r=[];for(const[s,i]of Ji(t.wildcard))(e===s||e.startsWith(s+"/"))&&r.push(i);for(const[s,i]of Ji(t.dynamic))if(e.startsWith(s+"/")){const l="/"+e.slice(s.length).split("/").splice(2).join("/");r.push(...La(l,i))}const o=t.static.get(e);return o&&r.push(o),r.filter(Boolean)}function Ji(e){return[...e.entries()].sort((t,n)=>t[0].length-n[0].length)}function jo(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 as(e,t,n=".",r){if(!jo(t))return as(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]]:jo(i)&&jo(o[s])?o[s]=as(i,o[s],(n?`${n}.`:"")+s.toString(),r):o[s]=i))}return o}function ja(e){return(...t)=>t.reduce((n,r)=>as(n,r,"",e),{})}const $a=ja(),Rp=ja((e,t,n)=>{if(e[t]!==void 0&&typeof n=="function")return e[t]=n(e[t]),!0});function xp(e,t){try{return t in e}catch{return!1}}class us extends Error{constructor(n,r={}){super(n,r);Rt(this,"statusCode",500);Rt(this,"fatal",!1);Rt(this,"unhandled",!1);Rt(this,"statusMessage");Rt(this,"data");Rt(this,"cause");r.cause&&!this.cause&&(this.cause=r.cause)}toJSON(){const n={message:this.message,statusCode:fs(this.statusCode,500)};return this.statusMessage&&(n.statusMessage=Na(this.statusMessage)),this.data!==void 0&&(n.data=this.data),n}}Rt(us,"__h3_error__",!0);function Ap(e){if(typeof e=="string")return new us(e);if(Pp(e))return e;const t=new us(e.message??e.statusMessage??"",{cause:e.cause||e});if(xp(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=fs(e.statusCode,t.statusCode):e.status&&(t.statusCode=fs(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const n=t.statusMessage;Na(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 Pp(e){var t;return((t=e==null?void 0:e.constructor)==null?void 0:t.__h3_error__)===!0}const Op=/[^\u0009\u0020-\u007E]/g;function Na(e=""){return e.replace(Op,"")}function fs(e,t=200){return!e||(typeof e=="string"&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}const Ha=Symbol("layout-meta"),Zt=Symbol("route"),He=()=>{var e;return(e=me())==null?void 0:e.$router},ho=()=>co()?Te(Zt,me()._route):me()._route;function __(e){return e}const Ip=()=>{try{if(me()._processingMiddleware)return!0}catch{return!1}return!1},ds=(e,t)=>{e||(e="/");const n=typeof e=="string"?e:"path"in e?Mp(e):He().resolve(e).href;if(t!=null&&t.open){const{target:c="_blank",windowFeatures:u={}}=t.open,a=Object.entries(u).filter(([f,d])=>d!==void 0).map(([f,d])=>`${f.toLowerCase()}=${d}`).join(", ");return open(n,c,a),Promise.resolve()}const r=nn(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:c}=new URL(n,window.location.href);if(c&&jh(c))throw new Error(`Cannot navigate to a URL with '${c}' protocol.`)}const s=Ip();if(!o&&s){if(t!=null&&t.replace){if(typeof e=="string"){const{pathname:c,search:u,hash:a}=Ta(e);return{path:c,...u&&{query:va(u)},...a&&{hash:a},replace:!0}}return{...e,replace:!0}}return e}const i=He(),l=me();return o?(l._scope.stop(),t!=null&&t.replace?location.replace(n):location.href=n,s?l.isHydrating?new Promise(()=>{}):!1:Promise.resolve()):t!=null&&t.replace?i.replace(e):i.push(e)};function Mp(e){return wa(e.path||"",e.query||{})+(e.hash||"")}const Fa="__nuxt_error",po=()=>yc(me().payload,"error"),qt=e=>{const t=Yt(e);try{const n=me(),r=po();n.hooks.callHook("app:error",t),r.value||(r.value=t)}catch{throw t}return t},Lp=async(e={})=>{const t=me(),n=po();t.callHook("app:error:cleared",e),e.redirect&&await He().replace(e.redirect),n.value=yp},Da=e=>!!e&&typeof e=="object"&&Fa in e,Yt=e=>{const t=Ap(e);return Object.defineProperty(t,Fa,{value:!0,configurable:!1,writable:!1}),t};function Qi(e){const t=$p(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 Np=-1,Hp=-2,Fp=-3,Dp=-4,Up=-5,Bp=-6;function Vp(e,t){return Wp(JSON.parse(e),t)}function Wp(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===Np)return;if(s===Fp)return NaN;if(s===Dp)return 1/0;if(s===Up)return-1/0;if(s===Bp)return-0;if(i)throw new Error("Invalid input");if(s in r)return r[s];const l=n[s];if(!l||typeof l!="object")r[s]=l;else if(Array.isArray(l))if(typeof l[0]=="string"){const c=l[0],u=t==null?void 0:t[c];if(u)return r[s]=u(o(l[1]));switch(c){case"Date":r[s]=new Date(l[1]);break;case"Set":const a=new Set;r[s]=a;for(let h=1;h`${r}:${String(o)}`).join(",")}`}function Yr(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=>Yr(s,t));if((o==null?void 0:o.constructor)===Object){const s={};for(const i of Object.keys(o))s[i]=Yr(o[i],t,i);return s}return o}function Zp(e,t){const n=e==="style"?new Map:new Set;function r(o){const s=o.trim();if(s)if(e==="style"){const[i,...l]=s.split(":").map(c=>c.trim());i&&l.length&&n.set(i,l.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 Ba(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]=Zp(n,r);return}if(Jp.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 e0(e,t){const n=typeof t=="object"&&typeof t!="function"?t:{[e==="script"||e==="noscript"||e==="style"?"innerHTML":"textContent"]:t},r=Ba({tag:e,props:{}},n);return r.key&&Kp.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 t0(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(e0(o,i))}),r.flat()}const ps=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Zi={base:-10,title:10},n0={critical:-8,high:-1,low:2},el={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}},r0=/@import/,An=e=>e===""||e===!0;function o0(e,t){var s;if(typeof t.tagPriority=="number")return t.tagPriority;let n=100;const r=n0[t.tagPriority]||0,o=e.resolvedOptions.disableCapoSorting?{link:{},script:{},style:{}}:el;if(t.tag in Zi)n=Zi[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=el.meta[i])}else t.tag==="link"&&t.props.rel?n=o.link[t.props.rel]:t.tag==="script"?An(t.props.async)?n=o.script.async:t.props.src&&!An(t.props.defer)&&!An(t.props.async)&&t.props.type!=="module"&&!((s=t.props.type)!=null&&s.endsWith("json"))?n=o.script.sync:An(t.props.defer)&&t.props.src&&!An(t.props.async)&&(n=o.script.defer):t.tag==="style"&&(n=t.innerHTML&&r0.test(t.innerHTML)?o.style.imported:o.style.sync);return(n||100)+r}function tl(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 s0(e={}){var l;const t=Aa();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:c=>tl(i,c),push(c,u){const a={...u||{}};delete a.head;const f=a._index??i._entryCount++,d={_i:f,input:c,options:a},h={_poll(_=!1){i.dirty=!0,!_&&s.push(f),t.callHook("entries:updated",i)},dispose(){r.delete(f)&&h._poll(!0)},patch(_){(!a.mode||a.mode==="server"&&n||a.mode==="client"&&!n)&&(d.input=_,r.set(f,d),h._poll())}};return h.patch(c),h},async resolveTags(){var h;const c={tagMap:new Map,tags:[],entries:[...i.entries.values()]};for(await t.callHook("entries:resolve",c);s.length;){const _=s.shift(),m=r.get(_);if(m){const v={tags:t0(m.input,e.propResolvers||[]).map(k=>Object.assign(k,m.options)),entry:m};await t.callHook("entries:normalize",v),m._tags=v.tags.map((k,w)=>(k._w=o0(i,k),k._p=(m._i<<10)+w,k._d=hs(k),k))}}let u=!1;c.entries.flatMap(_=>(_._tags||[]).map(m=>({...m,props:{...m.props}}))).sort(ps).reduce((_,m)=>{const v=String(m._d||m._p);if(!_.has(v))return _.set(v,m);const k=_.get(v);if(((m==null?void 0:m.tagDuplicateStrategy)||(Qp.has(m.tag)?"merge":null)||(m.key&&m.key===k.key?"merge":null))==="merge"){const g={...k.props};Object.entries(m.props).forEach(([b,E])=>g[b]=b==="style"?new Map([...k.props.style||new Map,...E]):b==="class"?new Set([...k.props.class||new Set,...E]):E),_.set(v,{...m,props:g})}else m._p>>10===k._p>>10&&m.tag==="meta"&&Ua(v)?(_.set(v,Object.assign([...Array.isArray(k)?k:[k],m],m)),u=!0):(m._w===k._w?m._p>k._p:(m==null?void 0:m._w)<(k==null?void 0:k._w))&&_.set(v,m);return _},c.tagMap);const a=c.tagMap.get("title"),f=c.tagMap.get("titleTemplate");if(i._title=a==null?void 0:a.textContent,f){const _=f==null?void 0:f.textContent;if(i._titleTemplate=_,_){let m=typeof _=="function"?_(a==null?void 0:a.textContent):_;typeof m=="string"&&!i.plugins.has("template-params")&&(m=m.replace("%s",(a==null?void 0:a.textContent)||"")),a?m===null?c.tagMap.delete("title"):c.tagMap.set("title",{...a,textContent:m}):(f.tag="title",f.textContent=m)}}c.tags=Array.from(c.tagMap.values()),u&&(c.tags=c.tags.flat().sort(ps)),await t.callHook("tags:beforeResolve",c),await t.callHook("tags:resolve",c),await t.callHook("tags:afterResolve",c);const d=[];for(const _ of c.tags){const{innerHTML:m,tag:v,props:k}=_;if(zp.has(v)&&!(Object.keys(k).length===0&&!_.innerHTML&&!_.textContent)&&!(v==="meta"&&!k.content&&!k["http-equiv"]&&!k.charset)){if(v==="script"&&m){if((h=k.type)!=null&&h.endsWith("json")){const w=typeof m=="string"?m:JSON.stringify(m);_.innerHTML=w.replace(/tl(i,c)),i.hooks.callHook("init",i),(l=e.init)==null||l.forEach(c=>c&&i.push(c)),i}const It="%separator",i0=new RegExp(`${It}(?:\\s*${It})*`,"g");function l0(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(l===It||!s.includes(l))return l;const c=l0(t,l.slice(1),r);return c!==void 0?c:l}).trim(),i&&(e.endsWith(It)&&(e=e.slice(0,-It.length)),e.startsWith(It)&&(e=e.slice(It.length)),e=e.replace(i0,n||"").trim()),e}const nl=e=>e.includes(":key")?e:e.split(":").join(":key:"),c0={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=nl(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=nl(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(ps))}}},a0={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 gs(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=>gs(n)));if((e==null?void 0:e.constructor)===Object){const n={};for(const r of Object.keys(e))n[r]=await gs(e[r]);return n}return e}const u0={key:"promises",hooks:{"entries:resolve":async e=>{const t=[];for(const n in e.entries)e.entries[n]._promisesProcessed||t.push(gs(e.entries[n].input).then(r=>{e.entries[n].input=r,e.entries[n]._promisesProcessed=!0}));await Promise.all(t)}}},f0={meta:"content",link:"href",htmlAttrs:"lang"},d0=["innerHTML","textContent"],h0=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=wr(r.pageTitle||e._title||"",r,o);for(const i of n){if(i.processTemplateParams===!1)continue;const l=f0[i.tag];if(l&&typeof i.props[l]=="string")i.props[l]=wr(i.props[l],r,o);else if(i.processTemplateParams||i.tag==="titleTemplate"||i.tag==="title")for(const c of d0)typeof i[c]=="string"&&(i[c]=wr(i[c],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=wr(n.textContent,e._templateParams,e._separator))}}}),p0=(e,t)=>be(t)?pf(t):t,zs="usehead";function g0(e){return{install(n){n.config.globalProperties.$unhead=e,n.config.globalProperties.$head=e,n.provide(zs,e)}}.install}function m0(){if(co()){const e=Te(zs);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 y0(e,t={}){const n=t.head||m0();return n.ssr?n.push(e||{},t):_0(n,e,t)}function _0(e,t,n={}){const r=Ne(!1);let o;return ad(()=>{const i=r.value?{}:Yr(t,p0);o?o.patch(i):o=e.push(i,n)}),tn()&&(lr(()=>{o.dispose()}),Pc(()=>{r.value=!0}),Ac(()=>{r.value=!1})),o}function Va(e){var n;const t=e||Ia();return((n=t==null?void 0:t.ssrContext)==null?void 0:n.head)||(t==null?void 0:t.runWithContext(()=>{if(co())return Te(zs)}))}function b0(e,t={}){const n=Va(t.nuxt);if(n)return y0(e,{head:n,...t})}const v0="modulepreload",w0=function(e,t){return new URL(e,t).href},rl={},Ht=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let i=function(a){return Promise.all(a.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const l=document.getElementsByTagName("link"),c=document.querySelector("meta[property=csp-nonce]"),u=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));o=i(n.map(a=>{if(a=w0(a,r),a in rl)return;rl[a]=!0;const f=a.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(!!r)for(let m=l.length-1;m>=0;m--){const v=l[m];if(v.href===a&&(!f||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${a}"]${d}`))return;const _=document.createElement("link");if(_.rel=f?"stylesheet":v0,f||(_.as="script"),_.crossOrigin="",_.href=a,u&&_.setAttribute("nonce",u),document.head.appendChild(_),f)return new Promise((m,v)=>{_.addEventListener("load",m),_.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${a}`)))})}))}function s(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return o.then(i=>{for(const l of i||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};let xr,Ar;function k0(){return xr=$fetch(qs(`builds/meta/${ar().app.buildId}.json`),{responseType:"json"}),xr.then(e=>{Ar=Cp(e.matcher)}).catch(e=>{console.error("[nuxt] Error fetching app manifest.",e)}),xr}function go(){return xr||k0()}async function Gs(e){const t=typeof e=="string"?e:e.path;if(await go(),!Ar)return console.error("[nuxt] Error creating app manifest matcher.",Ar),{};try{return $a({},...Ar.matchAll(t).reverse())}catch(n){return console.error("[nuxt] Error matching route rules.",n),{}}}async function ol(e,t={}){if(!await Ka(e))return null;const r=await S0(e,t);return await Wa(r)||null}const E0="_payload.json";async function S0(e,t={}){const n=new URL(e,"http://localhost");if(n.host!=="localhost"||nn(n.pathname,{acceptRelative:!0}))throw new Error("Payload URL must not include hostname: "+e);const r=ar(),o=t.hash||(t.fresh?Date.now():r.app.buildId),s=r.app.cdnURL,i=s&&await Ka(e)?s:r.app.baseURL;return Ks(i,n.pathname,E0+(o?`?${o}`:""))}async function Wa(e){const t=fetch(e,{cache:"force-cache"}).then(n=>n.text().then(qa));try{return await t}catch(n){console.warn("[nuxt] Cannot load payload ",e,n)}return null}async function Ka(e=ho().path){const t=me();return e=Xn(e),(await go()).prerendered.includes(e)?!0:t.runWithContext(async()=>{const r=await Gs({path:e});return!!r.prerender&&!r.redirect})}let Wt=null;async function T0(){var r;if(Wt)return Wt;const e=document.getElementById("__NUXT_DATA__");if(!e)return{};const t=await qa(e.textContent||""),n=e.dataset.src?await Wa(e.dataset.src):void 0;return Wt={...t,...n,...window.__NUXT__},(r=Wt.config)!=null&&r.public&&(Wt.config.public=dt(Wt.config.public)),Wt}async function qa(e){return await Vp(e,me()._payloadRevivers)}function C0(e,t){me()._payloadRevivers[e]=t}const R0=[["NuxtError",e=>Yt(e)],["EmptyShallowRef",e=>ft(e==="_"?void 0:e==="0n"?BigInt(0):Yn(e))],["EmptyRef",e=>Ne(e==="_"?void 0:e==="0n"?BigInt(0):Yn(e))],["ShallowRef",e=>ft(e)],["ShallowReactive",e=>at(e)],["Ref",e=>Ne(e)],["Reactive",e=>dt(e)]],x0=Qe({name:"nuxt:revive-payload:client",order:-30,async setup(e){let t,n;for(const[r,o]of R0)C0(r,o);Object.assign(e.payload,([t,n]=mn(()=>e.runWithContext(T0)),t=await t,n(),t)),window.__NUXT__=e.payload}});async function Js(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 h;const s=new Map,i=new Promise(_=>{e.resolveTags().then(m=>{_(m.map(v=>{const k=s.get(v._d)||0,w={tag:v,id:(k?`${v._d}:${k}`:v._d)||Xi(v),shouldRender:!0};return v._d&&Ua(v._d)&&s.set(v._d,k+1),w}))})});let l=e._dom;if(!l){l={title:n.title,elMap:new Map().set("htmlAttrs",n.documentElement).set("bodyAttrs",n.body)};for(const _ of["body","head"]){const m=(h=n[_])==null?void 0:h.children;for(const v of m){const k=v.tagName.toLowerCase();if(!Yi.has(k))continue;const w=Ba({tag:k,props:{}},{innerHTML:v.innerHTML,...v.getAttributeNames().reduce((g,b)=>(g[b]=v.getAttribute(b),g),{})||{}});if(w.key=v.getAttribute("data-hid")||void 0,w._d=hs(w)||Xi(w),l.elMap.has(w._d)){let g=1,b=w._d;for(;l.elMap.has(b);)b=`${w._d}:${g++}`;l.elMap.set(b,v)}else l.elMap.set(w._d,v)}}}l.pendingSideEffects={...l.sideEffects},l.sideEffects={};function c(_,m,v){const k=`${_}:${m}`;l.sideEffects[k]=v,delete l.pendingSideEffects[k]}function u({id:_,$el:m,tag:v}){const k=v.tag.endsWith("Attrs");l.elMap.set(_,m),k||(v.textContent&&v.textContent!==m.textContent&&(m.textContent=v.textContent),v.innerHTML&&v.innerHTML!==m.innerHTML&&(m.innerHTML=v.innerHTML),c(_,"el",()=>{m==null||m.remove(),l.elMap.delete(_)}));for(const w in v.props){if(!Object.prototype.hasOwnProperty.call(v.props,w))continue;const g=v.props[w];if(w.startsWith("on")&&typeof g=="function"){const E=m==null?void 0:m.dataset;if(E&&E[`${w}fired`]){const T=w.slice(0,-5);g.call(m,new Event(T.substring(2)))}m.getAttribute(`data-${w}`)!==""&&((v.tag==="bodyAttrs"?n.defaultView:m).addEventListener(w.substring(2),g.bind(m)),m.setAttribute(`data-${w}`,""));continue}const b=`attr:${w}`;if(w==="class"){if(!g)continue;for(const E of g)k&&c(_,`${b}:${E}`,()=>m.classList.remove(E)),!m.classList.contains(E)&&m.classList.add(E)}else if(w==="style"){if(!g)continue;for(const[E,T]of g)c(_,`${b}:${E}`,()=>{m.style.removeProperty(E)}),m.style.setProperty(E,T)}else g!==!1&&g!==null&&(m.getAttribute(w)!==g&&m.setAttribute(w,g===!0?"":String(g)),k&&c(_,b,()=>m.removeAttribute(w)))}}const a=[],f={bodyClose:void 0,bodyOpen:void 0,head:void 0},d=await i;for(const _ of d){const{tag:m,shouldRender:v,id:k}=_;if(v){if(m.tag==="title"){n.title=m.textContent,c("title","",()=>n.title=l.title);continue}_.$el=_.$el||l.elMap.get(k),_.$el?u(_):Yi.has(m.tag)&&a.push(_)}}for(const _ of a){const m=_.tag.tagPosition||"head";_.$el=n.createElement(_.tag.tag),u(_),f[m]=f[m]||n.createDocumentFragment(),f[m].appendChild(_.$el)}for(const _ of d)await e.hooks.callHook("dom:renderTag",_,n,c);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 _ in l.pendingSideEffects)l.pendingSideEffects[_]();e._dom=l,await e.hooks.callHook("dom:rendered",{renders:d}),o()}).finally(()=>{e._domUpdatePromise=void 0,e.dirty=!1})),e._domUpdatePromise}function A0(e={}){var r,o,s;const t=((r=e.domOptions)==null?void 0:r.render)||Js;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 s0({...e,plugins:[...e.plugins||[],{key:"client",hooks:{"entries:updated":t}}],init:[n?JSON.parse(n):!1,...e.init||[]]})}function P0(e,t){let n=0;return()=>{const r=++n;t(()=>{n===r&&e()})}}function O0(e={}){const t=A0({domOptions:{render:P0(()=>Js(t),n=>setTimeout(n,0))},...e});return t.install=g0(t),t}const I0={disableDefaults:!0,disableCapoSorting:!1,plugins:[a0,u0,h0,c0]},M0=Qe({name:"nuxt:head",enforce:"pre",setup(e){const t=O0(I0);e.vueApp.use(t);{let n=!0;const r=async()=>{n=!1,await Js(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 an=typeof document<"u";function za(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function L0(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&za(e.default)}const oe=Object.assign;function $o(e,t){const n={};for(const r in t){const o=t[r];n[r]=rt(o)?o.map(e):e(o)}return n}const Bn=()=>{},rt=Array.isArray,Ga=/#/g,j0=/&/g,$0=/\//g,N0=/=/g,H0=/\?/g,Ja=/\+/g,F0=/%5B/g,D0=/%5D/g,Qa=/%5E/g,U0=/%60/g,Ya=/%7B/g,B0=/%7C/g,Xa=/%7D/g,V0=/%20/g;function Qs(e){return encodeURI(""+e).replace(B0,"|").replace(F0,"[").replace(D0,"]")}function W0(e){return Qs(e).replace(Ya,"{").replace(Xa,"}").replace(Qa,"^")}function ms(e){return Qs(e).replace(Ja,"%2B").replace(V0,"+").replace(Ga,"%23").replace(j0,"%26").replace(U0,"`").replace(Ya,"{").replace(Xa,"}").replace(Qa,"^")}function K0(e){return ms(e).replace(N0,"%3D")}function q0(e){return Qs(e).replace(Ga,"%23").replace(H0,"%3F")}function z0(e){return e==null?"":q0(e).replace($0,"%2F")}function Zn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const G0=/\/$/,J0=e=>e.replace(G0,"");function No(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(r=t.slice(0,c),s=t.slice(c+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Z0(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:Zn(i)}}function Q0(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function sl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Y0(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&wn(t.matched[r],n.matched[o])&&Za(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function wn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Za(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!X0(e[n],t[n]))return!1;return!0}function X0(e,t){return rt(e)?il(e,t):rt(t)?il(t,e):e===t}function il(e,t){return rt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Z0(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,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}const qe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var er;(function(e){e.pop="pop",e.push="push"})(er||(er={}));var Vn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Vn||(Vn={}));function eg(e){if(!e)if(an){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),J0(e)}const tg=/^[^#]+#/;function ng(e,t){return e.replace(tg,"#")+t}function rg(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 mo=()=>({left:window.scrollX,top:window.scrollY});function og(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=rg(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 ll(e,t){return(history.state?history.state.position-t:-1)+e}const ys=new Map;function sg(e,t){ys.set(e,t)}function ig(e){const t=ys.get(e);return ys.delete(e),t}let lg=()=>location.protocol+"//"+location.host;function eu(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,c=o.slice(l);return c[0]!=="/"&&(c="/"+c),sl(c,"")}return sl(n,e)+r+o}function cg(e,t,n,r){let o=[],s=[],i=null;const l=({state:d})=>{const h=eu(e,location),_=n.value,m=t.value;let v=0;if(d){if(n.value=h,t.value=d,i&&i===_){i=null;return}v=m?d.position-m.position:0}else r(h);o.forEach(k=>{k(n.value,_,{delta:v,type:er.pop,direction:v?v>0?Vn.forward:Vn.back:Vn.unknown})})};function c(){i=n.value}function u(d){o.push(d);const h=()=>{const _=o.indexOf(d);_>-1&&o.splice(_,1)};return s.push(h),h}function a(){const{history:d}=window;d.state&&d.replaceState(oe({},d.state,{scroll:mo()}),"")}function f(){for(const d of s)d();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:c,listen:u,destroy:f}}function cl(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mo():null}}function ag(e){const{history:t,location:n}=window,r={value:eu(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(c,u,a){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:lg()+e+c;try{t[a?"replaceState":"pushState"](u,"",d),o.value=u}catch(h){console.error(h),n[a?"replace":"assign"](d)}}function i(c,u){const a=oe({},t.state,cl(o.value.back,c,o.value.forward,!0),u,{position:o.value.position});s(c,a,!0),r.value=c}function l(c,u){const a=oe({},o.value,t.state,{forward:c,scroll:mo()});s(a.current,a,!0);const f=oe({},cl(r.value,c,null),{position:a.position+1},u);s(c,f,!1),r.value=c}return{location:r,state:o,push:l,replace:i}}function ug(e){e=eg(e);const t=ag(e),n=cg(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=oe({location:"",base:e,go:r,createHref:ng.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 fg(e){return typeof e=="string"||e&&typeof e=="object"}function tu(e){return typeof e=="string"||typeof e=="symbol"}const nu=Symbol("");var al;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(al||(al={}));function kn(e,t){return oe(new Error,{type:e,[nu]:!0},t)}function mt(e,t){return e instanceof Error&&nu in e&&(t==null||!!(e.type&t))}const ul="[^/]+?",dg={sensitive:!1,strict:!1,start:!0,end:!0},hg=/[.+*?^${}()[\]/\\]/g;function pg(e,t){const n=oe({},dg,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const a=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function ru(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const mg={type:0,value:""},yg=/[a-zA-Z0-9_]/;function _g(e){if(!e)return[[]];if(e==="/")return[[mg]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,c,u="",a="";function f(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:a,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),u="")}function d(){u+=c}for(;l{i(g)}:Bn}function i(f){if(tu(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 l(){return n}function c(f){const d=Eg(f,n);n.splice(d,0,f),f.record.name&&!pl(f)&&r.set(f.record.name,f)}function u(f,d){let h,_={},m,v;if("name"in f&&f.name){if(h=r.get(f.name),!h)throw kn(1,{location:f});v=h.record.name,_=oe(dl(d.params,h.keys.filter(g=>!g.optional).concat(h.parent?h.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),f.params&&dl(f.params,h.keys.map(g=>g.name))),m=h.stringify(_)}else if(f.path!=null)m=f.path,h=n.find(g=>g.re.test(m)),h&&(_=h.parse(m),v=h.record.name);else{if(h=d.name?r.get(d.name):n.find(g=>g.re.test(d.path)),!h)throw kn(1,{location:f,currentLocation:d});v=h.record.name,_=oe({},d.params,f.params),m=h.stringify(_)}const k=[];let w=h;for(;w;)k.unshift(w.record),w=w.parent;return{name:v,path:m,params:_,matched:k,meta:kg(k)}}e.forEach(f=>s(f));function a(){n.length=0,r.clear()}return{addRoute:s,resolve:u,removeRoute:i,clearRoutes:a,getRoutes:l,getRecordMatcher:o}}function dl(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function hl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:wg(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 wg(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 pl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function kg(e){return e.reduce((t,n)=>oe(t,n.meta),{})}function gl(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Eg(e,t){let n=0,r=t.length;for(;n!==r;){const s=n+r>>1;ru(e,t[s])<0?r=s:n=s+1}const o=Sg(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function Sg(e){let t=e;for(;t=t.parent;)if(ou(t)&&ru(e,t)===0)return t}function ou({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Tg(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&ms(s)):[r&&ms(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Cg(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=rt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const Rg=Symbol(""),yl=Symbol(""),Ys=Symbol(""),Xs=Symbol(""),_s=Symbol("");function Pn(){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 Mt(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,c)=>{const u=d=>{d===!1?c(kn(4,{from:n,to:t})):d instanceof Error?c(d):fg(d)?c(kn(2,{from:t,to:d})):(i&&r.enterCallbacks[o]===i&&typeof d=="function"&&i.push(d),l())},a=s(()=>e.call(r&&r.instances[o],t,n,u));let f=Promise.resolve(a);e.length<3&&(f=f.then(u)),f.catch(d=>c(d))})}function Ho(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(za(c)){const a=(c.__vccOpts||c)[t];a&&s.push(Mt(a,n,r,i,l,o))}else{let u=c();s.push(()=>u.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=L0(a)?a.default:a;i.mods[l]=a,i.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&Mt(h,n,r,i,l,o)()}))}}return s}function _l(e){const t=Te(Ys),n=Te(Xs),r=je(()=>{const c=fe(e.to);return t.resolve(c)}),o=je(()=>{const{matched:c}=r.value,{length:u}=c,a=c[u-1],f=n.matched;if(!a||!f.length)return-1;const d=f.findIndex(wn.bind(null,a));if(d>-1)return d;const h=bl(c[u-2]);return u>1&&bl(a)===h&&f[f.length-1].path!==h?f.findIndex(wn.bind(null,c[u-2])):d}),s=je(()=>o.value>-1&&Ig(n.params,r.value.params)),i=je(()=>o.value>-1&&o.value===n.matched.length-1&&Za(n.params,r.value.params));function l(c={}){if(Og(c)){const u=t[fe(e.replace)?"replace":"push"](fe(e.to)).catch(Bn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:je(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}function xg(e){return e.length===1?e[0]:e}const Ag=ht({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:_l,setup(e,{slots:t}){const n=dt(_l(e)),{options:r}=Te(Ys),o=je(()=>({[vl(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[vl(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&xg(t.default(n));return e.custom?s:pe("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Pg=Ag;function Og(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 Ig(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(!rt(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function bl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const vl=(e,t,n)=>e??t??n,Mg=ht({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Te(_s),o=je(()=>e.route||r.value),s=Te(yl,0),i=je(()=>{let u=fe(s);const{matched:a}=o.value;let f;for(;(f=a[u])&&!f.components;)u++;return u}),l=je(()=>o.value.matched[i.value]);Nt(yl,je(()=>i.value+1)),Nt(Rg,l),Nt(_s,o);const c=Ne();return tt(()=>[c.value,l.value,e.name],([u,a,f],[d,h,_])=>{a&&(a.instances[f]=u,h&&h!==a&&u&&u===d&&(a.leaveGuards.size||(a.leaveGuards=h.leaveGuards),a.updateGuards.size||(a.updateGuards=h.updateGuards))),u&&a&&(!h||!wn(a,h)||!d)&&(a.enterCallbacks[f]||[]).forEach(m=>m(u))},{flush:"post"}),()=>{const u=o.value,a=e.name,f=l.value,d=f&&f.components[a];if(!d)return wl(n.default,{Component:d,route:u});const h=f.props[a],_=h?h===!0?u.params:typeof h=="function"?h(u):h:null,v=pe(d,oe({},_,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(f.instances[a]=null)},ref:c}));return wl(n.default,{Component:v,route:u})||v}}});function wl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const su=Mg;function Lg(e){const t=vg(e.routes,e),n=e.parseQuery||Tg,r=e.stringifyQuery||ml,o=e.history,s=Pn(),i=Pn(),l=Pn(),c=ft(qe);let u=qe;an&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=$o.bind(null,x=>""+x),f=$o.bind(null,z0),d=$o.bind(null,Zn);function h(x,D){let H,W;return tu(x)?(H=t.getRecordMatcher(x),W=D):W=x,t.addRoute(W,H)}function _(x){const D=t.getRecordMatcher(x);D&&t.removeRoute(D)}function m(){return t.getRoutes().map(x=>x.record)}function v(x){return!!t.getRecordMatcher(x)}function k(x,D){if(D=oe({},D||c.value),typeof x=="string"){const y=No(n,x,D.path),S=t.resolve({path:y.path},D),A=o.createHref(y.fullPath);return oe(y,S,{params:d(S.params),hash:Zn(y.hash),redirectedFrom:void 0,href:A})}let H;if(x.path!=null)H=oe({},x,{path:No(n,x.path,D.path).path});else{const y=oe({},x.params);for(const S in y)y[S]==null&&delete y[S];H=oe({},x,{params:f(y)}),D.params=f(D.params)}const W=t.resolve(H,D),re=x.hash||"";W.params=a(d(W.params));const he=Q0(r,oe({},x,{hash:W0(re),path:W.path})),p=o.createHref(he);return oe({fullPath:he,hash:re,query:r===ml?Cg(x.query):x.query||{}},W,{redirectedFrom:void 0,href:p})}function w(x){return typeof x=="string"?No(n,x,c.value.path):oe({},x)}function g(x,D){if(u!==x)return kn(8,{from:D,to:x})}function b(x){return R(x)}function E(x){return b(oe(w(x),{replace:!0}))}function T(x){const D=x.matched[x.matched.length-1];if(D&&D.redirect){const{redirect:H}=D;let W=typeof H=="function"?H(x):H;return typeof W=="string"&&(W=W.includes("?")||W.includes("#")?W=w(W):{path:W},W.params={}),oe({query:x.query,hash:x.hash,params:W.path!=null?{}:x.params},W)}}function R(x,D){const H=u=k(x),W=c.value,re=x.state,he=x.force,p=x.replace===!0,y=T(H);if(y)return R(oe(w(y),{state:typeof y=="object"?oe({},re,y.state):re,force:he,replace:p}),D||H);const S=H;S.redirectedFrom=D;let A;return!he&&Y0(r,W,H)&&(A=kn(16,{to:S,from:W}),ot(W,W,!0,!1)),(A?Promise.resolve(A):O(S,W)).catch(C=>mt(C)?mt(C,2)?C:Ct(C):V(C,S,W)).then(C=>{if(C){if(mt(C,2))return R(oe({replace:p},w(C.to),{state:typeof C.to=="object"?oe({},re,C.to.state):re,force:he}),D||S)}else C=M(S,W,!0,p,re);return q(S,W,C),C})}function U(x,D){const H=g(x,D);return H?Promise.reject(H):Promise.resolve()}function L(x){const D=on.values().next().value;return D&&typeof D.runWithContext=="function"?D.runWithContext(x):x()}function O(x,D){let H;const[W,re,he]=jg(x,D);H=Ho(W.reverse(),"beforeRouteLeave",x,D);for(const y of W)y.leaveGuards.forEach(S=>{H.push(Mt(S,x,D))});const p=U.bind(null,x,D);return H.push(p),We(H).then(()=>{H=[];for(const y of s.list())H.push(Mt(y,x,D));return H.push(p),We(H)}).then(()=>{H=Ho(re,"beforeRouteUpdate",x,D);for(const y of re)y.updateGuards.forEach(S=>{H.push(Mt(S,x,D))});return H.push(p),We(H)}).then(()=>{H=[];for(const y of he)if(y.beforeEnter)if(rt(y.beforeEnter))for(const S of y.beforeEnter)H.push(Mt(S,x,D));else H.push(Mt(y.beforeEnter,x,D));return H.push(p),We(H)}).then(()=>(x.matched.forEach(y=>y.enterCallbacks={}),H=Ho(he,"beforeRouteEnter",x,D,L),H.push(p),We(H))).then(()=>{H=[];for(const y of i.list())H.push(Mt(y,x,D));return H.push(p),We(H)}).catch(y=>mt(y,8)?y:Promise.reject(y))}function q(x,D,H){l.list().forEach(W=>L(()=>W(x,D,H)))}function M(x,D,H,W,re){const he=g(x,D);if(he)return he;const p=D===qe,y=an?history.state:{};H&&(W||p?o.replace(x.fullPath,oe({scroll:p&&y&&y.scroll},re)):o.push(x.fullPath,re)),c.value=x,ot(x,D,H,p),Ct()}let z;function Z(){z||(z=o.listen((x,D,H)=>{if(!fr.listening)return;const W=k(x),re=T(W);if(re){R(oe(re,{replace:!0,force:!0}),W).catch(Bn);return}u=W;const he=c.value;an&&sg(ll(he.fullPath,H.delta),mo()),O(W,he).catch(p=>mt(p,12)?p:mt(p,2)?(R(oe(w(p.to),{force:!0}),W).then(y=>{mt(y,20)&&!H.delta&&H.type===er.pop&&o.go(-1,!1)}).catch(Bn),Promise.reject()):(H.delta&&o.go(-H.delta,!1),V(p,W,he))).then(p=>{p=p||M(W,he,!1),p&&(H.delta&&!mt(p,8)?o.go(-H.delta,!1):H.type===er.pop&&mt(p,20)&&o.go(-1,!1)),q(W,he,p)}).catch(Bn)}))}let ne=Pn(),B=Pn(),X;function V(x,D,H){Ct(x);const W=B.list();return W.length?W.forEach(re=>re(x,D,H)):console.error(x),Promise.reject(x)}function ye(){return X&&c.value!==qe?Promise.resolve():new Promise((x,D)=>{ne.add([x,D])})}function Ct(x){return X||(X=!x,Z(),ne.list().forEach(([D,H])=>x?H(x):D()),ne.reset()),x}function ot(x,D,H,W){const{scrollBehavior:re}=e;if(!an||!re)return Promise.resolve();const he=!H&&ig(ll(x.fullPath,0))||(W||!H)&&history.state&&history.state.scroll||null;return Ft().then(()=>re(x,D,he)).then(p=>p&&og(p)).catch(p=>V(p,x,D))}const Ie=x=>o.go(x);let rn;const on=new Set,fr={currentRoute:c,listening:!0,addRoute:h,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:v,getRoutes:m,resolve:k,options:e,push:b,replace:E,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:B.add,isReady:ye,install(x){const D=this;x.component("RouterLink",Pg),x.component("RouterView",su),x.config.globalProperties.$router=D,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>fe(c)}),an&&!rn&&c.value===qe&&(rn=!0,b(o.location).catch(re=>{}));const H={};for(const re in qe)Object.defineProperty(H,re,{get:()=>c.value[re],enumerable:!0});x.provide(Ys,D),x.provide(Xs,at(H)),x.provide(_s,c);const W=x.unmount;on.add(x),x.unmount=function(){on.delete(x),on.size<1&&(u=qe,z&&z(),z=null,c.value=qe,rn=!1,X=!1),W()}}};function We(x){return x.reduce((D,H)=>D.then(()=>L(H)),Promise.resolve())}return fr}function jg(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;iwn(u,l))?r.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(u=>wn(u,c))||o.push(c))}return[n,r,o]}function iu(e){return Te(Xs)}const $g=/(:\w+)\([^)]+\)/g,Ng=/(:\w+)[?+*]/g,Hg=/:\w+/g,Fg=(e,t)=>t.path.replace($g,"$1").replace(Ng,"$1").replace(Hg,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""}),bs=(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&&Fg(e.route,n));return typeof r=="function"?r(e.route):r},Dg=(e,t)=>({default:()=>e?pe(jf,e===!0?{}:e,t):t});function Zs(e){return Array.isArray(e)?e:[e]}const Ug={layout:!1},Bg={layout:!1},Fo=[{name:"index",path:"/",meta:Ug||{},component:()=>Ht(()=>import("./BvVBPIAF.js"),__vite__mapDeps([0,1,2,3]),import.meta.url)},{name:"login",path:"/login",meta:Bg||{},component:()=>Ht(()=>import("./CwuZat6W.js"),__vite__mapDeps([4,1,5,2,3]),import.meta.url)},{name:"modules",path:"/modules",meta:{middleware:"auth"},component:()=>Ht(()=>import("./B9sIrZpC.js"),__vite__mapDeps([6,1,2,3,5]),import.meta.url)}],lu=(e,t)=>({default:()=>{var n;return e?pe(Hd,e===!0?{}:e,t):(n=t.default)==null?void 0:n.call(t)}}),Vg=/(:\w+)\([^)]+\)/g,Wg=/(:\w+)[?+*]/g,Kg=/:\w+/g;function kl(e){const t=(e==null?void 0:e.meta.key)??e.path.replace(Vg,"$1").replace(Wg,"$1").replace(Kg,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""});return typeof t=="function"?t(e):t}function qg(e,t){return e===t||t===qe?!1:kl(e)!==kl(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)})}function zg(e,t=!1){if(e){if(e.nodeName==="#comment"&&e.nodeValue==="[")return cu(e,[],t);if(t){const n=e.cloneNode(!0);return n.querySelectorAll("[data-island-slot]").forEach(r=>{r.innerHTML=""}),[n.outerHTML]}return[e.outerHTML]}}function cu(e,t=[],n=!1){var r;if(e&&e.nodeName){if(Jg(e))return t;if(!Gg(e)){const o=e.cloneNode(!0);n&&((r=o.querySelectorAll)==null||r.call(o,"[data-island-slot]").forEach(s=>{s.innerHTML=""})),t.push(o.outerHTML)}cu(e.nextSibling,t,n)}return t}function Do(e,t){const n=e?zg(e):[t];return n?Sd(n.join(""),n.length):pe("div")}function Gg(e){return e.nodeName==="#comment"&&e.nodeValue==="["}function Jg(e){return e.nodeName==="#comment"&&e.nodeValue==="]"}const Qg={scrollBehavior(e,t,n){var c;const r=me(),o=((c=He().options)==null?void 0:c.scrollBehaviorType)??"auto";if(e.path===t.path)return t.hash&&!e.hash?{left:0,top:0}:e.hash?{el:e.hash,top:au(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&&qg(e,t)&&(i={left:0,top:0});const l=r._runningTransition?"page:transition:finish":"page:loading:end";return new Promise(u=>{if(t===qe){u(El(e,"instant",i));return}r.hooks.hookOnce(l,()=>{requestAnimationFrame(()=>u(El(e,"instant",i)))})})}};function au(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 El(e,t,n){return n||(e.hash?{el:e.hash,top:au(e.hash),behavior:t}:{left:0,top:0,behavior:t})}const Yg={hashMode:!1,scrollBehaviorType:"auto"},it={...Yg,...Qg},Xg=async(e,t)=>{var i;let n,r;if(!((i=e.meta)!=null&&i.validate))return;const o=([n,r]=mn(()=>Promise.resolve(e.meta.validate(e))),n=await n,r(),n);if(o===!0)return;const s=Yt({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};function Zg(e,t){if(typeof e!="string")throw new TypeError("argument str must be a string");const n={},r=t||{},o=r.decode||em;let s=0;for(;sthis.compare(l[0],c[0]));let i=`${r}{`;for(let l=0;lthis.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 om(e,t){return e===t||Tl(e)===Tl(t)}function Xe(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]=Xe(e[t]))}else{n={};for(t in e)t==="__proto__"?Object.defineProperty(n,t,{value:Xe(e[t]),configurable:!0,enumerable:!0,writable:!0}):n[t]=Xe(e[t])}return n}if(r==="[object Array]"){for(t=e.length,n=Array(t);t--;)n[t]=Xe(e[t]);return n}return r==="[object Set]"?(n=new Set,e.forEach(function(o){n.add(Xe(o))}),n):r==="[object Map]"?(n=new Map,e.forEach(function(o,s){n.set(Xe(s),Xe(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(Xe(e.buffer)):r==="[object ArrayBuffer]"?e.slice(0):r.slice(-6)==="Array]"?new e.constructor(e):e}const sm={path:"/",watch:!0,decode:e=>Yn(decodeURIComponent(e)),encode:e=>encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))},Er=window.cookieStore;function im(e,t){var u;const n={...sm,...t};n.filter??(n.filter=a=>a===e);const r=Cl(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,l=Xe(s?void 0:r[e]??((u=n.default)==null?void 0:u.call(n))),c=o&&!s?am(l,o,n.watch&&n.watch!=="shallow"):Ne(l);{let a=null;try{!Er&&typeof BroadcastChannel<"u"&&(a=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(m=!1)=>{!m&&(n.readonly||om(c.value,r[e]))||(cm(e,c.value,n),r[e]=Xe(c.value),a==null||a.postMessage({value:n.encode(c.value)}))},d=m=>{var k;const v=m.refresh?(k=Cl(n))==null?void 0:k[e]:n.decode(m.value);h=!0,c.value=v,r[e]=Xe(v),Ft(()=>{h=!1})};let h=!1;const _=!!or();if(_&&Mr(()=>{h=!0,f(),a==null||a.close()}),Er){const m=v=>{const k=v.changed.find(g=>g.name===e),w=v.deleted.find(g=>g.name===e);k&&d({value:k.value}),w&&d({value:null})};Er.addEventListener("change",m),_&&Mr(()=>Er.removeEventListener("change",m))}else a&&(a.onmessage=({data:m})=>d(m));n.watch&&tt(c,()=>{h||f()},{deep:n.watch!=="shallow"}),i&&f(i)}return c}function Cl(e={}){return Zg(document.cookie,e)}function lm(e,t,n={}){return t==null?Sl(e,t,{...n,maxAge:-1}):Sl(e,t,n)}function cm(e,t,n={}){document.cookie=lm(e,t,n)}const Rl=2147483647;function am(e,t,n){let r,o,s=0;const i=n?Ne(e):{value:e};return or()&&Mr(()=>{o==null||o(),clearTimeout(r)}),mc((l,c)=>{n&&(o=tt(i,c));function u(){s=0,clearTimeout(r);const a=t-s,f=a{if(s+=f,s{const e=im("auth-token",{default:()=>null,secure:!0,sameSite:"strict"}),t=je(()=>!!e.value),n=s=>{e.value=s},r=()=>{e.value=null,ds("/login")},o=()=>({Authorization:`Bearer ${e.value}`});return{token:jr(e),isAuthenticated:jr(t),login:n,logout:r,getAuthHeaders:o}},fm=e=>{if(e.path==="/login")return;const{isAuthenticated:t}=um();if(!t.value&&e.path!=="/")return ds("/login");if(t.value&&e.path==="/")return ds("/modules")},dm=async e=>{let t,n;const r=([t,n]=mn(()=>Gs({path:e.path})),t=await t,n(),t);if(r.redirect)return nn(r.redirect,{acceptRelative:!0})?(window.location.href=r.redirect,!1):r.redirect},hm=[Xg,fm,dm],Wn={auth:()=>Ht(()=>import("./4J-u_g9l.js"),[],import.meta.url)};function pm(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 a=s.slice(u);return a[0]!=="/"&&(a="/"+a),Ui(a,"")}const l=Ui(r,e),c=!n||Fh(l,n)?l:n;return c+(c.includes("?")?"":o)+s}const gm=Qe({name:"nuxt:router",enforce:"pre",async setup(e){var v;let t,n,r=ar().app.baseURL;const o=((v=it.history)==null?void 0:v.call(it,r))??ug(r),s=it.routes?([t,n]=mn(()=>it.routes(Fo)),t=await t,n(),t??Fo):Fo;let i;const l=Lg({...it,scrollBehavior:(k,w,g)=>{if(w===qe){i=g;return}if(it.scrollBehavior){if(l.options.scrollBehavior=it.scrollBehavior,"scrollRestoration"in window.history){const b=l.beforeEach(()=>{b(),window.history.scrollRestoration="manual"})}return it.scrollBehavior(k,qe,i||g)}},history:o,routes:s});"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto"),e.vueApp.use(l);const c=ft(l.currentRoute.value);l.afterEach((k,w)=>{c.value=w}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>c.value});const u=pm(r,window.location,e.payload.path),a=ft(l.currentRoute.value),f=()=>{a.value=l.currentRoute.value};e.hook("page:finish",f),l.afterEach((k,w)=>{var g,b,E,T;((b=(g=k.matched[0])==null?void 0:g.components)==null?void 0:b.default)===((T=(E=w.matched[0])==null?void 0:E.components)==null?void 0:T.default)&&f()});const d={};for(const k in a.value)Object.defineProperty(d,k,{get:()=>a.value[k],enumerable:!0});e._route=at(d),e._middleware||(e._middleware={global:[],named:{}});const h=po();l.afterEach(async(k,w,g)=>{delete e._processingMiddleware,!e.isHydrating&&h.value&&await e.runWithContext(Lp),g&&await e.callHook("page:loading:end")});try{[t,n]=mn(()=>l.isReady()),await t,n()}catch(k){[t,n]=mn(()=>e.runWithContext(()=>qt(k))),await t,n()}const _=u!==l.currentRoute.value.fullPath?l.resolve(u):l.currentRoute.value;f();const m=e.payload.state._layout;return l.beforeEach(async(k,w)=>{var g;await e.callHook("page:loading:start"),k.meta=dt(k.meta),e.isHydrating&&m&&!Et(k.meta.layout)&&(k.meta.layout=m),e._processingMiddleware=!0;{const b=new Set([...hm,...e._middleware.global]);for(const E of k.matched){const T=E.meta.middleware;if(T)for(const R of Zs(T))b.add(R)}{const E=await e.runWithContext(()=>Gs({path:k.path}));if(E.appMiddleware)for(const T in E.appMiddleware)E.appMiddleware[T]?b.add(T):b.delete(T)}for(const E of b){const T=typeof E=="string"?e._middleware.named[E]||await((g=Wn[E])==null?void 0:g.call(Wn).then(R=>R.default||R)):E;if(!T)throw new Error(`Unknown route middleware: '${E}'.`);try{const R=await e.runWithContext(()=>T(k,w));if(!e.payload.serverRendered&&e.isHydrating&&(R===!1||R instanceof Error)){const U=R||Yt({statusCode:404,statusMessage:`Page Not Found: ${u}`});return await e.runWithContext(()=>qt(U)),!1}if(R===!0)continue;if(R===!1)return R;if(R)return Da(R)&&R.fatal&&await e.runWithContext(()=>qt(R)),R}catch(R){const U=Yt(R);return U.fatal&&await e.runWithContext(()=>qt(U)),U}}}}),l.onError(async()=>{delete e._processingMiddleware,await e.callHook("page:loading:end")}),l.afterEach(async(k,w)=>{k.matched.length===0&&await e.runWithContext(()=>qt(Yt({statusCode:404,fatal:!1,statusMessage:`Page not found: ${k.fullPath}`,data:{path:k.fullPath}})))}),e.hooks.hookOnce("app:created",async()=>{try{"name"in _&&(_.name=void 0),await l.replace({..._,force:!0}),l.options.scrollBehavior=it.scrollBehavior}catch(k){await e.runWithContext(()=>qt(k))}}),{provide:{router:l}}}}),xl=globalThis.requestIdleCallback||(e=>{const t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),b_=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),ei=e=>{const t=me();t.isHydrating?t.hooks.hookOnce("app:suspense:resolve",()=>{xl(()=>e())}):xl(()=>e())},mm=Qe({name:"nuxt:payload",setup(e){const t=new Set;He().beforeResolve(async(n,r)=>{if(n.path===r.path)return;const o=await ol(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]}}),ei(()=>{var n;e.hooks.hook("link:prefetch",async r=>{const{hostname:o}=new URL(r,window.location.href);o===window.location.hostname&&await ol(r).catch(()=>{console.warn("[nuxt] Error preloading payload for",r)})}),((n=navigator.connection)==null?void 0:n.effectiveType)!=="slow-2g"&&setTimeout(go,1e3)})}}),ym=Qe(()=>{const e=He();ei(()=>{e.beforeResolve(async()=>{await new Promise(t=>{setTimeout(t,100),requestAnimationFrame(()=>{setTimeout(t,0)})})})})}),_m=Qe(e=>{let t;async function n(){const r=await go();t&&clearTimeout(t),t=setTimeout(n,zi);try{const o=await $fetch(qs("builds/latest.json")+`?${Date.now()}`);o.id!==r.id&&e.hooks.callHook("app:manifest:update",o)}catch{}}ei(()=>{t=setTimeout(n,zi)})});function bm(e={}){const t=e.path||window.location.pathname;let n={};try{n=Yn(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 l="href"in s&&s.href[0]==="#"?n.app.baseURL+s.href:Ks(n.app.baseURL,s.fullPath);bm({path:l,persistState:!0})}e.hook("app:manifest:update",()=>{t.beforeResolve(o)}),t.onError((s,i)=>{r.has(s)&&o(i)})}}),wm=Ur(()=>Ht(()=>import("./DZhRnb1V.js"),[],import.meta.url).then(e=>e.default||e.default||e)),km=[["Icon",wm]],Em=Qe({name:"nuxt:global-components",setup(e){for(const[t,n]of km)e.vueApp.component(t,n),e.vueApp.component("Lazy"+t,n)}}),jt={default:Ur(()=>Ht(()=>import("./CjNMrKxF.js"),[],import.meta.url).then(e=>e.default||e))};function Sm(e){if(e!=null&&e.__asyncLoader&&!e.__asyncResolved)return e.__asyncLoader()}async function Tm(e,t=He()){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(()=>Tm(e,t));t._routePreloaded.add(n);const s=r.map(i=>{var l;return(l=i.components)==null?void 0:l.default}).filter(i=>typeof i=="function");for(const i of s){const l=Promise.resolve(i()).catch(()=>{}).finally(()=>o.splice(o.indexOf(l)));o.push(l)}await Promise.all(o)}const Cm=Qe({name:"nuxt:prefetch",setup(e){const t=He();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 jt[r]=="function"&&await jt[r]()})}),e.hooks.hook("link:prefetch",n=>{if(nn(n))return;const r=t.resolve(n);if(!r)return;const o=r.meta.layout;let s=Zs(r.meta.middleware);s=s.filter(i=>typeof i=="string");for(const i of s)typeof Wn[i]=="function"&&Wn[i]();typeof o=="string"&&o in jt&&Sm(jt[o])})}});var Sr={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 Rm={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"}}},xm=Rp(Rm);function uu(){const e=me();return e._appConfig||(e._appConfig=dt(xm)),e._appConfig}const Am=[50,100,200,300,400,500,600,700,800,900,950];function Pm(e,t){return e in Sr&&typeof Sr[e]=="object"&&t in Sr[e]?Sr[e][t]:""}function Om(e,t){return`${Am.map(n=>`--ui-color-${e}-${n}: var(--color-${t==="neutral"?"old-neutral":t}-${n}, ${Pm(t,n)});`).join(` + `)}`}function Al(e,t){return`--ui-${e}: var(--ui-color-${e}-${t});`}const Im=Qe(()=>{const e=uu(),t=me(),n=je(()=>{const{neutral:o,...s}=e.ui.colors;return`@layer base { + :root { + ${Object.entries(e.ui.colors).map(([i,l])=>Om(i,l)).join(` + `)} + } + :root, .light { + ${Object.keys(s).map(i=>Al(i,500)).join(` + `)} + } + .dark { + ${Object.keys(s).map(i=>Al(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]'))"}]}b0(r)}),Mm="__NUXT_COLOR_MODE__",Uo="nuxt-color-mode",Lm="localStorage",jm="$s";function $m(...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=jm+n,s=me(),i=yc(s.payload.state,o);if(i.value===void 0&&r){const l=r();if(be(l))return s.payload.state[o]=l,l;i.value=l}return i}const yt=window[Mm]||{},Nm=Qe(e=>{const t=$m("color-mode",()=>dt({preference:yt.preference,value:yt.value,unknown:!1,forced:!1})).value;He().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 l,c;switch(s){case"cookie":window.document.cookie=Uo+"="+i;break;case"sessionStorage":(l=window.sessionStorage)==null||l.setItem(Uo,i);break;case"localStorage":default:(c=window.localStorage)==null||c.setItem(Uo,i)}}tt(()=>t.preference,s=>{t.forced||(s==="system"?(t.value=yt.getColorScheme(),r()):t.value=s,o(Lm,s))},{immediate:!0}),tt(()=>t.value,(s,i)=>{let l;l=window.document.createElement("style"),l.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(l),yt.removeColorScheme(i),yt.addColorScheme(s),window.getComputedStyle(l).opacity,document.head.removeChild(l)}),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)}),fu=/^[a-z0-9]+(-[a-z0-9]+)*$/,ur=(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 l=o.pop(),c=o.pop(),u={provider:o.length>0?o[0]:r,prefix:c,name:l};return t&&!Pr(u)?null:u}const s=o[0],i=s.split("-");if(i.length>1){const l={provider:r,prefix:i.shift(),name:i.join("-")};return t&&!Pr(l)?null:l}if(n&&r===""){const l={provider:r,prefix:"",name:s};return t&&!Pr(l,n)?null:l}return null},Pr=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,du=Object.freeze({left:0,top:0,width:16,height:16}),Xr=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Sn=Object.freeze({...du,...Xr}),vs=Object.freeze({...Sn,body:"",hidden:!1});function Hm(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 Pl(e,t){const n=Hm(e,t);for(const r in vs)r in Xr?r in e&&!(r in n)&&(n[r]=Xr[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function Fm(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 l=r[i]&&r[i].parent,c=l&&s(l);c&&(o[i]=[l].concat(c))}return o[i]}return Object.keys(n).concat(Object.keys(r)).forEach(s),o}function Dm(e,t,n){const r=e.icons,o=e.aliases||Object.create(null);let s={};function i(l){s=Pl(r[l]||o[l],s)}return i(t),n.forEach(i),Pl(e,s)}function hu(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=Fm(e);for(const o in r){const s=r[o];s&&(t(o,Dm(e,o,s)),n.push(o))}return n}const Um={provider:"",aliases:{},not_found:{},...du};function Bo(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function pu(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!Bo(e,Um))return null;const n=t.icons;for(const o in n){const s=n[o];if(!o||typeof s.body!="string"||!Bo(s,vs))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]||!Bo(s,vs))return null}return t}const Ol=Object.create(null);function Bm(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function en(e,t){const n=Ol[e]||(Ol[e]=Object.create(null));return n[t]||(n[t]=Bm(e,t))}function gu(e,t){return pu(t)?hu(t,(n,r)=>{r?e.icons[n]=r:e.missing.add(n)}):[]}function Vm(e,t,n){try{if(typeof n.body=="string")return e.icons[t]={...n},!0}catch{}return!1}let tr=!1;function mu(e){return typeof e=="boolean"&&(tr=e),tr}function ti(e){const t=typeof e=="string"?ur(e,!0,tr):e;if(t){const n=en(t.provider,t.prefix),r=t.name;return n.icons[r]||(n.missing.has(r)?null:void 0)}}function Wm(e,t){const n=ur(e,!0,tr);if(!n)return!1;const r=en(n.provider,n.prefix);return t?Vm(r,n.name,t):(r.missing.add(n.name),!0)}function Km(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),tr&&!t&&!e.prefix){let o=!1;return pu(e)&&(e.prefix="",hu(e,(s,i)=>{Wm(s,i)&&(o=!0)})),o}const n=e.prefix;if(!Pr({prefix:n,name:"a"}))return!1;const r=en(t,n);return!!gu(r,e)}function v_(e){const t=ti(e);return t&&{...Sn,...t}}const yu=Object.freeze({width:null,height:null}),_u=Object.freeze({...yu,...Xr}),qm=/(-?[0-9.]*[0-9]+[0-9.]*)/g,zm=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function Il(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(qm);if(r===null||!r.length)return e;const o=[];let s=r.shift(),i=zm.test(s);for(;;){if(i){const l=parseFloat(s);isNaN(l)?o.push(s):o.push(Math.ceil(l*t*n)/n)}else o.push(s);if(s=r.shift(),s===void 0)return o.join("");i=!i}}function Gm(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 Jm(e,t){return e?""+e+""+t:t}function Qm(e,t,n){const r=Gm(e);return Jm(r.defs,t+r.content+n)}const Ym=e=>e==="unset"||e==="undefined"||e==="none";function Xm(e,t){const n={...Sn,...e},r={..._u,...t},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,r].forEach(m=>{const v=[],k=m.hFlip,w=m.vFlip;let g=m.rotate;k?w?g+=2:(v.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),v.push("scale(-1 1)"),o.top=o.left=0):w&&(v.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),v.push("scale(1 -1)"),o.top=o.left=0);let b;switch(g<0&&(g-=Math.floor(g/4)*4),g=g%4,g){case 1:b=o.height/2+o.top,v.unshift("rotate(90 "+b.toString()+" "+b.toString()+")");break;case 2:v.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:b=o.width/2+o.left,v.unshift("rotate(-90 "+b.toString()+" "+b.toString()+")");break}g%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)),v.length&&(s=Qm(s,'',""))});const i=r.width,l=r.height,c=o.width,u=o.height;let a,f;i===null?(f=l===null?"1em":l==="auto"?u:l,a=Il(f,c/u)):(a=i==="auto"?c:i,f=l===null?Il(a,u/c):l==="auto"?u:l);const d={},h=(m,v)=>{Ym(v)||(d[m]=v.toString())};h("width",a),h("height",f);const _=[o.left,o.top,c,u];return d.viewBox=_.join(" "),{attributes:d,viewBox:_,body:s}}const Zm=/\sid="(\S+)"/g,ey="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let ty=0;function ny(e,t=ey){const n=[];let r;for(;r=Zm.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+(ty++).toString(),l=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+i+o+"$3")}),e=e.replace(new RegExp(o,"g"),""),e}const ws=Object.create(null);function bu(e,t){ws[e]=t}function ks(e){return ws[e]||ws[""]}function ni(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 yo=Object.create(null),On=["https://api.simplesvg.com","https://api.unisvg.com"],Or=[];for(;On.length>0;)On.length===1||Math.random()>.5?Or.push(On.shift()):Or.push(On.pop());yo[""]=ni({resources:["https://api.iconify.design"].concat(Or)});function vu(e,t){const n=ni(t);return n===null?!1:(yo[e]=n,!0)}function _o(e){return yo[e]}function ry(){return Object.keys(yo)}const oy=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let Zr=oy();function sy(e){Zr=e}function iy(){return Zr}function ly(e,t){const n=_o(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 cy(e){return e===404}const ay=(e,t,n)=>{const r=[],o=ly(e,t),s="icons";let i={type:s,provider:e,prefix:t,icons:[]},l=0;return n.forEach((c,u)=>{l+=c.length+1,l>=o&&u>0&&(r.push(i),i={type:s,provider:e,prefix:t,icons:[]},l=c.length),i.icons.push(c)}),r.push(i),r};function uy(e){if(typeof e=="string"){const t=_o(e);if(t)return t.path}return"/"}const fy=(e,t,n)=>{if(!Zr){n("abort",424);return}let r=uy(t.provider);switch(t.type){case"icons":{const s=t.prefix,l=t.icons.join(","),c=new URLSearchParams({icons:l});r+=s+".json?"+c.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;Zr(e+r).then(s=>{const i=s.status;if(i!==200){setTimeout(()=>{n(cy(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)})},dy={prepare:ay,send:fy};function hy(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,l=o.name,c=n[s]||(n[s]=Object.create(null)),u=c[i]||(c[i]=en(s,i));let a;l in u.icons?a=t.loaded:i===""||u.missing.has(l)?a=t.missing:a=t.pending;const f={provider:s,prefix:i,name:l};a.push(f)}),t}function wu(e,t){e.forEach(n=>{const r=n.loaderCallbacks;r&&(n.loaderCallbacks=r.filter(o=>o.id!==t))})}function py(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,l=i.pending.length;i.pending=i.pending.filter(c=>{if(c.prefix!==o)return!0;const u=c.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!==l&&(n||wu([e],s.id),s.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),s.abort))})}))}let gy=0;function my(e,t,n){const r=gy++,o=wu.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 yy(e,t=!0,n=!1){const r=[];return e.forEach(o=>{const s=typeof o=="string"?ur(o,t,n):o;s&&r.push(s)}),r}var _y={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function by(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 T=e.resources.slice(0);for(i=[];T.length>1;){const R=Math.floor(Math.random()*T.length);i.push(T[R]),T=T.slice(0,R).concat(T.slice(R+1))}i=i.concat(T)}else i=e.resources.slice(s).concat(e.resources.slice(0,s));const l=Date.now();let c="pending",u=0,a,f=null,d=[],h=[];typeof r=="function"&&h.push(r);function _(){f&&(clearTimeout(f),f=null)}function m(){c==="pending"&&(c="aborted"),_(),d.forEach(T=>{T.status==="pending"&&(T.status="aborted")}),d=[]}function v(T,R){R&&(h=[]),typeof T=="function"&&h.push(T)}function k(){return{startTime:l,payload:t,status:c,queriesSent:u,queriesPending:d.length,subscribe:v,abort:m}}function w(){c="failed",h.forEach(T=>{T(void 0,a)})}function g(){d.forEach(T=>{T.status==="pending"&&(T.status="aborted")}),d=[]}function b(T,R,U){const L=R!=="success";switch(d=d.filter(O=>O!==T),c){case"pending":break;case"failed":if(L||!e.dataAfterTimeout)return;break;default:return}if(R==="abort"){a=U,w();return}if(L){a=U,d.length||(i.length?E():w());return}if(_(),g(),!e.random){const O=e.resources.indexOf(T.resource);O!==-1&&O!==e.index&&(e.index=O)}c="completed",h.forEach(O=>{O(U)})}function E(){if(c!=="pending")return;_();const T=i.shift();if(T===void 0){if(d.length){f=setTimeout(()=>{_(),c==="pending"&&(g(),w())},e.timeout);return}w();return}const R={status:"pending",resource:T,callback:(U,L)=>{b(R,U,L)}};d.push(R),u++,f=setTimeout(E,e.rotate),n(T,t,R.callback)}return setTimeout(E),k}function ku(e){const t={..._y,...e};let n=[];function r(){n=n.filter(l=>l().status==="pending")}function o(l,c,u){const a=by(t,l,c,(f,d)=>{r(),u&&u(f,d)});return n.push(a),a}function s(l){return n.find(c=>l(c))||null}return{query:o,find:s,setIndex:l=>{t.index=l},getIndex:()=>t.index,cleanup:r}}function Ml(){}const Vo=Object.create(null);function vy(e){if(!Vo[e]){const t=_o(e);if(!t)return;const n=ku(t),r={config:t,redundancy:n};Vo[e]=r}return Vo[e]}function Eu(e,t,n){let r,o;if(typeof e=="string"){const s=ks(e);if(!s)return n(void 0,424),Ml;o=s.send;const i=vy(e);i&&(r=i.redundancy)}else{const s=ni(e);if(s){r=ku(s);const i=e.resources?e.resources[0]:"",l=ks(i);l&&(o=l.send)}}return!r||!o?(n(void 0,424),Ml):r.query(t,o,n)().abort}function Ll(){}function wy(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,py(e)}))}function ky(e){const t=[],n=[];return e.forEach(r=>{(r.match(fu)?t:n).push(r)}),{valid:t,invalid:n}}function In(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(!gu(e,n).length){r();return}}catch(o){console.error(o)}r(),wy(e)}function jl(e,t){e instanceof Promise?e.then(n=>{t(n)}).catch(()=>{t(null)}):t(e)}function Ey(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)){jl(e.loadIcons(o,r,n),a=>{In(e,o,a)});return}if(s){o.forEach(a=>{const f=s(a,r,n);jl(f,d=>{const h=d?{prefix:r,icons:{[a]:d}}:null;In(e,[a],h)})});return}const{valid:i,invalid:l}=ky(o);if(l.length&&In(e,l,null),!i.length)return;const c=r.match(fu)?ks(n):null;if(!c){In(e,i,null);return}c.prepare(n,r,i).forEach(a=>{Eu(n,a,f=>{In(e,a.icons,f)})})}))}const Su=(e,t)=>{const n=yy(e,!0,mu()),r=hy(n);if(!r.pending.length){let c=!0;return t&&setTimeout(()=>{c&&t(r.loaded,r.missing,r.pending,Ll)}),()=>{c=!1}}const o=Object.create(null),s=[];let i,l;return r.pending.forEach(c=>{const{provider:u,prefix:a}=c;if(a===l&&u===i)return;i=u,l=a,s.push(en(u,a));const f=o[u]||(o[u]=Object.create(null));f[a]||(f[a]=[])}),r.pending.forEach(c=>{const{provider:u,prefix:a,name:f}=c,d=en(u,a),h=d.pendingIcons||(d.pendingIcons=new Set);h.has(f)||(h.add(f),o[u][a].push(f))}),s.forEach(c=>{const u=o[c.provider][c.prefix];u.length&&Ey(c,u)}),t?my(t,r,s):Ll},w_=e=>new Promise((t,n)=>{const r=typeof e=="string"?ur(e,!0):e;if(!r){n(e);return}Su([r||e],o=>{if(o.length&&r){const s=ti(r);if(s){t({...Sn,...s});return}}n(e)})});function Sy(e,t,n){en("",t).loadIcons=e}function Ty(e,t){const n={...e};for(const r in t){const o=t[r],s=typeof o;r in yu?(o===null||o&&(s==="string"||s==="number"))&&(n[r]=o):s===typeof n[r]&&(n[r]=r==="rotate"?o%4:o)}return n}const Cy=/[\s,]+/;function Ry(e,t){t.split(Cy).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function xy(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 Ay(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 Py(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function Oy(e){return"data:image/svg+xml,"+Py(e)}function Iy(e){return'url("'+Oy(e)+'")'}const $l={..._u,inline:!1},My={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ly={display:"inline-block"},Es={backgroundColor:"currentColor"},Tu={backgroundColor:"transparent"},Nl={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},Hl={webkitMask:Es,mask:Es,background:Tu};for(const e in Hl){const t=Hl[e];for(const n in Nl)t[e+n]=Nl[n]}const Ir={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ir[e+"-flip"]=t,Ir[e.slice(0,1)+"-flip"]=t,Ir[e+"Flip"]=t});function Fl(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const Dl=(e,t)=>{const n=Ty($l,t),r={...My},o=t.mode||"svg",s={},i=t.style,l=typeof i=="object"&&!(i instanceof Array)?i:{};for(let m in t){const v=t[m];if(v!==void 0)switch(m){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":n[m]=v===!0||v==="true"||v===1;break;case"flip":typeof v=="string"&&Ry(n,v);break;case"color":s.color=v;break;case"rotate":typeof v=="string"?n[m]=xy(v):typeof v=="number"&&(n[m]=v);break;case"ariaHidden":case"aria-hidden":v!==!0&&v!=="true"&&delete r["aria-hidden"];break;default:{const k=Ir[m];k?(v===!0||v==="true"||v===1)&&(n[k]=!0):$l[m]===void 0&&(r[m]=v)}}}const c=Xm(e,n),u=c.attributes;if(n.inline&&(s.verticalAlign="-0.125em"),o==="svg"){r.style={...s,...l},Object.assign(r,u);let m=0,v=t.id;return typeof v=="string"&&(v=v.replace(/-/g,"_")),r.innerHTML=ny(c.body,v?()=>v+"ID"+m++:"iconifyVue"),pe("svg",r)}const{body:a,width:f,height:d}=e,h=o==="mask"||(o==="bg"?!1:a.indexOf("currentColor")!==-1),_=Ay(a,{...u,width:f+"",height:d+""});return r.style={...s,"--svg":Iy(_),width:Fl(u.width),height:Fl(u.height),...Ly,...h?Es:Tu,...l},pe("span",r)};mu(!0);bu("",dy);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"||!Km(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;vu(n,o)||console.error(r)}catch{console.error(r)}}}}const jy={...Sn,body:""},k_=ht((e,{emit:t})=>{const n=Ne(null);function r(){var u,a;n.value&&((a=(u=n.value).abort)==null||a.call(u),n.value=null)}const o=Ne(!!e.ssr),s=Ne(""),i=ft(null);function l(){const u=e.icon;if(typeof u=="object"&&u!==null&&typeof u.body=="string")return s.value="",{data:u};let a;if(typeof u!="string"||(a=ur(u,!1,!0))===null)return null;let f=ti(a);if(!f){const _=n.value;return(!_||_.name!==u)&&(f===null?n.value={name:u}:n.value={name:u,abort:Su([a],c)}),null}r(),s.value!==u&&(s.value=u,Ft(()=>{t("load",u)}));const d=e.customise;if(d){f=Object.assign({},f);const _=d(f.body,a.name,a.prefix,a.provider);typeof _=="string"&&(f.body=_)}const h=["iconify"];return a.prefix!==""&&h.push("iconify--"+a.prefix),a.provider!==""&&h.push("iconify--"+a.provider),{data:f,classes:h}}function c(){var a;const u=l();u?u.data!==((a=i.value)==null?void 0:a.data)&&(i.value=u):i.value=null}return o.value?c():_n(()=>{o.value=!0,c()}),tt(()=>e.icon,c),Hs(r),()=>{const u=i.value;if(!u)return Dl(jy,e);let a=e;return u.classes&&(a={...e,class:u.classes.join(" ")}),Dl({...Sn,...u.data},a)}},{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]}),Ul={getAPIConfig:_o,setAPIModule:bu,sendAPIQuery:Eu,setFetch:sy,getFetch:iy,listAPIProviders:ry},$y=Qe({name:"@nuxt/icon",setup(){var o,s;const e=ar(),t=uu().icon;Ul.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"?Ul.setFetch(()=>Promise.resolve(new Response)):n.push(t.iconifyApiEndpoint);async function r(i,l){try{const c=await $fetch(n[0]+"/"+l+".json",{query:{icons:i.join(",")}});if(!c||c.prefix!==l||!c.icons)throw new Error("Invalid data"+JSON.stringify(c));return c}catch(c){return console.error("Failed to load custom icons",c),null}}vu("",{resources:n});for(const i of t.customCollections||[])i&&Sy(r,i)}}),Ny=[x0,M0,gm,mm,ym,_m,vm,Em,Cm,Im,Nm,$y],Tr="
",Wo=new WeakMap;function Hy(e){if(Wo.has(e))return Wo.get(e);const t={...e};return t.render?t.render=(n,r,o,s,i,l)=>{var c;if(s.mounted$??n.mounted$){const u=(c=e.render)==null?void 0:c.bind(n)(n,r,o,s,i,l);return u.children===null||typeof u.children=="string"?Je(u):pe(u)}return Do(n._.vnode.el,Tr)}:t.template&&(t.template=` + + + `),t.setup=(n,r)=>{var c;const o=me(),s=ft(o.isHydrating===!1),i=tn();if(o.isHydrating){const u={...i.attrs},a=Fy(i);for(const f in u)delete i.attrs[f];_n(()=>{Object.assign(i.attrs,u),i.vnode.dirs=a})}_n(()=>{s.value=!0});const l=((c=e.setup)==null?void 0:c.call(e,n,r))||{};return Rs(l)?Promise.resolve(l).then(u=>typeof u!="function"?(u||(u={}),u.mounted$=s,u):(...a)=>{if(s.value||!o.isHydrating){const f=u(...a);return f.children===null||typeof f.children=="string"?Je(f):pe(f)}return Do(i==null?void 0:i.vnode.el,Tr)}):typeof l=="function"?(...u)=>{if(s.value){const a=l(...u);return a.children===null||typeof a.children=="string"?Je(a,r.attrs):pe(a,r.attrs)}return Do(i==null?void 0:i.vnode.el,Tr)}:Object.assign(l,{mounted$:s})},Wo.set(e,t),t}function Fy(e){if(!e||!e.vnode.dirs)return null;const t=e.vnode.dirs;return e.vnode.dirs=null,t}function Dy(e={}){var u;const t=ft(""),n=ft(e.politeness||"polite"),r=Va();function o(a="",f="polite"){t.value=a,n.value=f}function s(a){return o(a,"polite")}function i(a){return o(a,"assertive")}function l(){var a;o((a=document==null?void 0:document.title)==null?void 0:a.trim(),n.value)}function c(){var a;(a=r==null?void 0:r.hooks)==null||a.removeHook("dom:rendered",l)}return l(),(u=r==null?void 0:r.hooks)==null||u.hook("dom:rendered",()=>{l()}),{_cleanup:c,message:t,politeness:n,set:o,polite:s,assertive:i}}function Uy(e={}){const t=me(),n=t._routeAnnouncer||(t._routeAnnouncer=Dy(e));return e.politeness!==n.politeness.value&&(n.politeness.value=e.politeness||"polite"),or()&&(t._routeAnnouncerDeps||(t._routeAnnouncerDeps=0),t._routeAnnouncerDeps++,Mr(()=>{t._routeAnnouncerDeps--,t._routeAnnouncerDeps===0&&(n._cleanup(),delete t._routeAnnouncer)})),n}const By=ht({name:"NuxtRouteAnnouncer",props:{atomic:{type:Boolean,default:!1},politeness:{type:String,default:"polite"}},setup(e,{slots:t,expose:n}){const{set:r,polite:o,assertive:s,message:i,politeness:l}=Uy({politeness:e.politeness});return n({set:r,polite:o,assertive:s,message:i,politeness:l}),()=>pe("span",{class:"nuxt-route-announcer",style:{position:"absolute"}},pe("span",{role:"alert","aria-live":l.value,"aria-atomic":e.atomic,style:{border:"0",clip:"rect(0 0 0 0)","clip-path":"inset(50%)",height:"1px",width:"1px",overflow:"hidden",position:"absolute","white-space":"nowrap","word-wrap":"normal",margin:"-1px",padding:"0"}},t.default?t.default({message:i.value}):i.value))}}),Cu=(e="RouteProvider")=>ht({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 Nt(Zt,at(o)),()=>pe(t.vnode,{ref:t.vnodeRef})}}),Vy=Cu(),Bl=new WeakMap,Wy=ht({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=me(),s=Ne(),i=Te(Zt,null);let l;r({pageRef:s});const c=Te(Ha,null);let u;const a=o.deferHydration();if(o.isHydrating){const d=o.hooks.hookOnce("app:error",a);He().beforeEach(d)}e.pageKey&&tt(()=>e.pageKey,(d,h)=>{d!==h&&o.callHook("page:loading:start")});let f=!1;{const d=He().beforeResolve(()=>{f=!1});lr(()=>{d()})}return()=>pe(su,{name:e.name,route:e.route,...t},{default:d=>{const h=qy(i,d.route,d.Component),_=i&&i.matched.length===d.route.matched.length;if(!d.Component){if(u&&!_)return u;a();return}if(u&&c&&!c.isCurrent(d.route))return u;if(h&&i&&(!c||c!=null&&c.isCurrent(i)))return _?u:null;const m=bs(d,e.pageKey),v=zy(i,d.route,d.Component);!o.isHydrating&&l===m&&!v&&Ft(()=>{f=!0,o.callHook("page:loading:end")}),l=m;const k=!!(e.transition??d.route.meta.pageTransition??qi),w=k&&Ky([e.transition,d.route.meta.pageTransition,qi,{onBeforeLeave(){o._runningTransition=!0},onAfterLeave(){delete o._runningTransition,o.callHook("page:transition:finish",d.Component)}}]),g=e.keepalive??d.route.meta.keepalive??mp;return u=lu(k&&w,Dg(g,pe(Us,{suspensible:!0,onPending:()=>o.callHook("page:start",d.Component),onResolve:()=>{Ft(()=>o.callHook("page:finish",d.Component).then(()=>{if(!f&&!v)return f=!0,o.callHook("page:loading:end")}).finally(a))}},{default:()=>{const b={key:m||void 0,vnode:n.default?Gy(n.default,d):d.Component,route:d.route,renderKey:m||void 0,trackRootNodes:k,vnodeRef:s};if(!g)return pe(Vy,b);const E=d.Component.type,T=E;let R=Bl.get(T);return R||(R=Cu(E.name||E.__name),Bl.set(T,R)),pe(R,b)}}))).default(),u}})}});function Ky(e){const t=e.filter(Boolean).map(n=>({...n,onAfterLeave:n.onAfterLeave?Zs(n.onAfterLeave):void 0}));return $a(...t)}function qy(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,l,c;return((i=o.components)==null?void 0:i.default)!==((c=(l=e.matched[s])==null?void 0:l.components)==null?void 0:c.default)})||n&&bs({route:t,Component:n})!==bs({route:e,Component:n})}function zy(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)})pe(jt[e.name],e.layoutProps,t.slots)}}),Qy={name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},Yy=ht({name:"NuxtLayout",inheritAttrs:!1,props:Qy,setup(e,t){const n=me(),r=Te(Zt),s=!r||r===ho()?iu():r,i=je(()=>{let a=fe(e.name)??(s==null?void 0:s.meta.layout)??"default";return a&&!(a in jt)&&e.fallback&&(a=fe(e.fallback)),a}),l=ft();t.expose({layoutRef:l});const c=n.deferHydration();if(n.isHydrating){const a=n.hooks.hookOnce("app:error",c);He().beforeEach(a)}let u;return()=>{const a=i.value&&i.value in jt,f=(s==null?void 0:s.meta.layoutTransition)??gp,d=u;return u=i.value,lu(a&&f,{default:()=>pe(Us,{suspensible:!0,onResolve:()=>{Ft(c)}},{default:()=>pe(Xy,{layoutProps:fa(t.attrs,{ref:l}),key:i.value||void 0,name:i.value,shouldProvide:!e.name,isRenderingNewLayout:h=>h!==d&&h===i.value,hasTransition:!!f},t.slots)})}).default()}}}),Xy=ht({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&&Nt(Ha,{isCurrent:s=>n===(s.meta.layout??"default")});const r=Te(Zt);if(r&&r===ho()){const s=iu(),i={};for(const l in s){const c=l;Object.defineProperty(i,c,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)?s[c]:r[c]})}Nt(Zt,at(i))}return()=>{var s,i;return!n||typeof n=="string"&&!(n in jt)?(i=(s=t.slots).default)==null?void 0:i.call(s):pe(Jy,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}}),Zy=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},e_=Hy(By),t_={};function n_(e,t){const n=e_,r=Wy,o=Yy;return ze(),ia("div",null,[de(n),de(o,null,{default:$s(()=>[de(r)]),_:1})])}const r_=Zy(t_,[["render",n_]]),o_={__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(),l=void 0,a=o?Ur(()=>Ht(()=>import("./jISQO879.js"),__vite__mapDeps([7,3,8]),import.meta.url)):Ur(()=>Ht(()=>import("./HxsO1gv8.js"),__vite__mapDeps([9,10]),import.meta.url));return(f,d)=>(ze(),vt(fe(a),Uu(aa({statusCode:fe(r),statusMessage:fe(s),description:fe(i),stack:fe(l)})),null,16))}},s_={key:0},Vl={__name:"nuxt-root",setup(e){const t=()=>null,n=me(),r=n.deferHydration();if(n.isHydrating){const u=n.hooks.hookOnce("app:error",r);He().beforeEach(u)}const o=!1;Nt(Zt,ho()),n.hooks.callHookWith(u=>u.map(a=>a()),"vue:setup");const s=po(),i=!1,l=/bot\b|chrome-lighthouse|facebookexternalhit|google\b|googlebot/i;Mc((u,a,f)=>{if(n.hooks.callHook("vue:error",u,a,f).catch(d=>console.error("[nuxt] Error in `vue:error` hook",d)),l.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(Da(u)&&(u.fatal||u.unhandled))return n.runWithContext(()=>qt(u)),!1});const c=!1;return(u,a)=>(ze(),vt(Us,{onResolve:fe(r)},{default:$s(()=>[fe(i)?(ze(),ia("div",s_)):fe(s)?(ze(),vt(fe(o_),{key:1,error:fe(s)},null,8,["error"])):fe(c)?(ze(),vt(fe(t),{key:2,context:fe(c)},null,8,["context"])):fe(o)?(ze(),vt(Bf(fe(o)),{key:3})):(ze(),vt(fe(r_),{key:4}))]),_:1},8,["onResolve"]))}};let Wl;{let e;Wl=async function(){var i,l;if(e)return e;const r=!!(((i=window.__NUXT__)==null?void 0:i.serverRendered)??((l=document.getElementById("__NUXT_DATA__"))==null?void 0:l.dataset.ssr)==="true")?uh(Vl):ah(Vl),o=wp({vueApp:r});async function s(c){var u;await o.callHook("app:error",c),(u=o.payload).error||(u.error=Yt(c))}r.config.errorHandler=s,o.hook("app:suspense:resolve",()=>{r.config.errorHandler===s&&(r.config.errorHandler=void 0)});try{await Sp(o,Ny)}catch(c){s(c)}try{await o.hooks.callHook("app:created",r),await o.hooks.callHook("app:beforeMount",r),r.mount(_p),await o.hooks.callHook("app:mounted",r),await Ft()}catch(c){s(c)}return r},e=Wl().catch(t=>{throw console.error("Error while mounting app:",t),t})}export{aa as $,u_ as A,a_ as B,h_ as C,p_ as D,$a as E,Ae as F,yc as G,Te as H,_e as I,Je as J,pe as K,tn as L,l_ as M,Ve as N,pf as O,Ku as P,or as Q,Mr as R,dt as S,jr as T,mc as U,Nt as V,Tl as W,xm as X,om as Y,Uu as Z,Zy as _,ca as a,tt as a0,Bf as a1,ro as a2,ho as a3,ft as a4,me as a5,ei as a6,xl as a7,lr as a8,b_ as a9,va as aa,Mp as ab,Tm as ac,nn as ad,Ks as ae,ar as af,$h as ag,Xn as ah,y_ as ai,__ as aj,v_ as ak,w_ as al,Wm as am,k_ as an,de as b,ia as c,ua as d,ht as e,um as f,He as g,c_ as h,m_ as i,vt as j,g_ as k,fe as l,be as m,ds as n,ze as o,d_ as p,uu as q,Ne as r,je as s,Wu as t,b0 as u,f_ as v,$s as w,oo as x,fa as y,_n as z}; diff --git a/TerraformRegistry/web/_nuxt/HxsO1gv8.js b/TerraformRegistry/web/_nuxt/HxsO1gv8.js new file mode 100644 index 0000000..ec9963d --- /dev/null +++ b/TerraformRegistry/web/_nuxt/HxsO1gv8.js @@ -0,0 +1 @@ +import{_ as s,u as a,c as i,o as u,a as e,t as o}from"./DfbLerQ4.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 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}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,r)=>(u(),i("div",l,[r[0]||(r[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)])]))}},b=s(f,[["__scopeId","data-v-4b6f0a29"]]);export{b as default}; diff --git a/TerraformRegistry/web/_nuxt/builds/latest.json b/TerraformRegistry/web/_nuxt/builds/latest.json new file mode 100644 index 0000000..918196c --- /dev/null +++ b/TerraformRegistry/web/_nuxt/builds/latest.json @@ -0,0 +1 @@ +{"id":"9792f59a-1af7-4ae3-9f14-0457ce5d038c","timestamp":1748804362179} \ No newline at end of file diff --git a/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json b/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json new file mode 100644 index 0000000..7d9c133 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json @@ -0,0 +1 @@ +{"id":"9792f59a-1af7-4ae3-9f14-0457ce5d038c","timestamp":1748804362179,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css b/TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css new file mode 100644 index 0000000..35f1033 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css @@ -0,0 +1 @@ +/*! 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-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-green-500:oklch(72.3% .219 149.579);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--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-900:oklch(37.9% .146 265.522);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-600:oklch(51.1% .262 276.966);--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-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-lg:32rem;--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;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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}.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-\[-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-4{margin-inline:calc(var(--spacing)*4)}.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-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-6{margin-top:calc(var(--spacing)*6)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.\!mr-4{margin-right:calc(var(--spacing)*4)!important}.mr-4{margin-right:calc(var(--spacing)*4)}.-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}.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-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.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-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-20{width:calc(var(--spacing)*20)}.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-60{width:calc(var(--spacing)*60)}.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-7xl{max-width:var(--container-7xl)}.max-w-32{max-width:calc(var(--spacing)*32)}.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-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}.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}.items-stretch{align-items:stretch}.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))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*3*var(--tw-space-x-reverse))}:where(.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))}.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)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.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-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:calc(var(--ui-radius)*4)}.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-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-gray-200{border-color:var(--color-gray-200)}.border-info{border-color:var(--ui-info)}.border-muted{border-color:var(--ui-border-muted)}.border-primary{border-color:var(--ui-primary)}.border-secondary{border-color:var(--ui-secondary)}.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-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-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-500{background-color:var(--color-green-500)}.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-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-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-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-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-100{--tw-gradient-to:var(--color-indigo-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-600{--tw-gradient-to:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.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)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.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\.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-16{padding-block:calc(var(--spacing)*16)}.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)}.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-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.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-\[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-\[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)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.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-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-900{color:var(--color-gray-900)}.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-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-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)}.uppercase{text-transform:uppercase}.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-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-gray-50:hover{background-color:var(--color-gray-50)}.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-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\: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\]\: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\: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-72{width:calc(var(--spacing)*72)}.sm\:w-96{width:calc(var(--spacing)*96)}.sm\:w-auto{width:auto}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}: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:64rem){.lg\:inline-flex{display:inline-flex}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}.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-gray-700:where(.dark,.dark *),:where(.dark\:divide-gray-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-gray-700)}.dark\:bg-blue-900:where(.dark,.dark *){background-color:var(--color-blue-900)}.dark\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:from-gray-900:where(.dark,.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800:where(.dark,.dark *){--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}}.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%}}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}.fade-in{animation:fadeIn .3s ease-out}.slide-in{animation:slideIn .3s ease-out}.hover-lift{transition:transform .2s ease-in-out,box-shadow .2s ease-in-out}.hover-lift:hover{box-shadow:0 10px 25px #0000001a;transform:translateY(-2px)}*{transition:background-color .2s ease-in-out,border-color .2s ease-in-out,color .2s ease-in-out}@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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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 pulse{50%{opacity:.5}} 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/_nuxt/jISQO879.js b/TerraformRegistry/web/_nuxt/jISQO879.js new file mode 100644 index 0000000..851f3b2 --- /dev/null +++ b/TerraformRegistry/web/_nuxt/jISQO879.js @@ -0,0 +1 @@ +import{_ as a}from"./CDgII3bh.js";import{_ as i,u,c,o as l,a as e,t as r,b as d,w as p,d as f}from"./DfbLerQ4.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 u({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=a;return l(),c("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,[d(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:p(()=>[f(r(t.backHome),1)]),_:1})])])])}}},v=i(y,[["__scopeId","data-v-06403dcb"]]);export{v as default}; diff --git a/TerraformRegistry/web/favicon.ico b/TerraformRegistry/web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18993ad91cfd43e03b074dd0b5cc3f37ab38e49c GIT binary patch literal 4286 zcmeHLOKuuL5PjK%MHWVi6lD zOGiREbCw`xmFozJ^aNatJY>w+g ze6a2@u~m#^BZm@8wco9#Crlli0uLb^3E$t2-WIc^#(?t)*@`UpuofJ(Uyh@F>b3Ph z$D^m8Xq~pTkGJ4Q`Q2)te3mgkWYZ^Ijq|hkiP^9`De={bQQ%heZC$QU2UpP(-tbl8 zPWD2abEew;oat@w`uP3J^YpsgT%~jT(Dk%oU}sa$7|n6hBjDj`+I;RX(>)%lm_7N{+B7Mu%H?422lE%MBJH!!YTN2oT7xr>>N-8OF$C&qU^ z>vLsa{$0X%q1fjOe3P1mCv#lN{xQ4_*HCSAZjTb1`}mlc+9rl8$B3OP%VT@mch_~G z7Y+4b{r>9e=M+7vSI;BgB?ryZDY4m>&wcHSn81VH1N~`0gvwH{ z8dv#hG|OK`>1;j7tM#B)Z7zDN?{6=dUal}$e^ -^ -^Terraform -Registry -SPA^^^ -^Welcome -to -the -Terraform -Registry -SPA^^This -is -a -placeholder -for -your -single -page -application.^^^ + + + + + + + + + + + +
+ \ 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: From 6a3da789954ce99094f62d415a6a9361dc22ea02 Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 7 Jun 2025 02:07:43 +0100 Subject: [PATCH 20/29] Update README.md --- README.md | 327 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 275 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 33573fa..d6356d1 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,309 @@ # Private Terraform Registry -A lightweight private Terraform Registry implementation currently focusing on support for modules. +A lightweight, feature-rich private Terraform Registry implementation with full support for modules! -## Features +[![.NET](https://img.shields.io/badge/.NET-8.0-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/) -- Full support for the Terraform Registry Protocol v1 for modules -- Support for different storage and database implementations -- OpenAPI documentation -- Configurable via environment variables for easy containerization and deployment +## ✨ Features -## API Endpoints +- 📦 **Full Terraform Registry Protocol v1** support for modules +- 🗄️ **Multiple Storage Backends**: Local filesystem and Azure Blob Storage +- 💾 **Multiple Database Options**: In-memory and PostgreSQL +- 🔐 **Authentication**: Token-based API security +- 📚 **OpenAPI Documentation**: Built-in Swagger UI +- 🌐 **Web Interface**: Included frontend for browsing modules +- 🐳 **Container Ready**: Easy deployment with Docker +- ☁️ **Azure Integration**: Managed Identity support for seamless cloud deployment +- ✅ **SemVer Validation**: Strict semantic versioning enforcement -### Service Discovery +## 🚀 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 +### 📦 Module Operations -- `GET /v1/modules` - List or search modules -- `GET /v1/modules/{namespace}/{name}/{provider}/{version}` - Get specific module +- `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 module -- `POST /v1/modules/{namespace}/{name}/{provider}/{version}` - Upload new module +- `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 🔒 -## Configuration +### 📖 Documentation -### Environment Variables +- `GET /swagger` - Interactive API documentation (when enabled) -The application can be configured using the following environment variables (all must be prefixed with `TF_REG_`): +_🔒 = Requires authentication_ -| Environment Variable | Description | Default Value | Required | -| -------------------------------------------- | ------------------------------------------------- | ----------------------- | ------------------------------------------ | -| `TF_REG_PORT` | Port the application listens on | `5131` | No | -| `TF_REG_BASEURL` | Base URL for the Terraform Registry | `http://localhost:5131` | Yes | -| `TF_REG_DATABASEPROVIDER` | Database provider (`postgres` or `inmemory`) | `inmemory` | No | -| `TF_REG_POSTGRESQL__CONNECTIONSTRING` | PostgreSQL connection string | Empty | Only when `DatabaseProvider` is `postgres` | -| `TF_REG_STORAGEPROVIDER` | Storage provider (`local` or `azure`) | `local` | Yes | -| `TF_REG_MODULESTORAGEPATH` | Local path to store modules | `modules` | Only when `StorageProvider` is `local` | -| `TF_REG_AZUREBLOB__CONNECTIONSTRING` | Azure Blob Storage connection string | Empty | Only when `StorageProvider` is `azure` | -| `TF_REG_AZUREBLOB__CONTAINERNAME` | Azure Blob Storage container name | `modules` | Only when `StorageProvider` is `azure` | -| `TF_REG_AZURESTORAGE__ACCOUNTNAME` | Azure Storage account name (for Managed Identity) | Empty | Only when using Managed Identity | -| `TF_REG_AZURESTORAGE__SASTOKENEXPIRYMINUTES` | SAS token expiry in minutes | `5` | No | -| `TF_REG_AUTHORIZATIONTOKEN` | Token required for API authentication | Empty | No | -| `TF_REG_ENABLESWAGGER` | Enable or disable Swagger UI (`true` or `false`) | `true` in dev | No | +## ⚙️ Configuration -> **Note:** For nested configuration (like `PostgreSQL:ConnectionString`), use double underscores: -> `TF_REG_POSTGRESQL__CONNECTIONSTRING` +### 🌍 Environment Variables -### Configuration Precedence +Configure the application using environment variables (prefix with `TF_REG_`): -Configuration values are loaded in the following order, with later values overriding earlier ones: +| 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 (`inmemory`/`postgres`) | `inmemory` | No | `postgres` | +| `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 (Managed Identity) | - | If using Managed Identity | `mystorageaccount` | +| `TF_REG_AZURESTORAGE__CONTAINERNAME` | Blob container name | `modules` | If using Azure | `terraform-modules` | +| `TF_REG_AZURESTORAGE__SASTOKENEXPIRYMINUTES` | SAS token expiry | `5` | No | `10` | +| **Development Settings** | | | | +| `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | -1. Default values -2. Configuration in `appsettings.json` -3. Configuration in `appsettings.{Environment}.json` -4. Environment variables (with `TF_REG_` prefix) +### 🏗️ Architecture Options -### Docker Example +#### 🏠 **Local Development** ```bash -docker run -p 5131:80 \ - -e TF_REG_PORT=80 \ - -e TF_REG_BASEURL=http://registry.example.com \ - -e TF_REG_STORAGEPROVIDER=azure \ - -e TF_REG_AZUREBLOB__CONNECTIONSTRING="DefaultEndpointsProtocol=https;AccountName=youraccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net" \ - -e TF_REG_AZUREBLOB__CONTAINERNAME=modules \ - -e TF_REG_AZURESTORAGE__ACCOUNTNAME=youraccountname \ - terraform-registry +# In-memory database + local file storage +TF_REG_DATABASEPROVIDER=inmemory +TF_REG_STORAGEPROVIDER=local +TF_REG_MODULESTORAGEPATH=./modules ``` -You can override the port mapping at runtime with Docker's `-p` flag, regardless of the `EXPOSE` instruction in the Dockerfile. +#### 🏢 **Production (PostgreSQL + Local)** -### Usage with Terraform +```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)** -Configure Terraform to use this private registry: +```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__ACCOUNTNAME=mystorageaccount +# Uses Managed Identity - no connection string needed! +``` -```terraform +## 🐳 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__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 = "localhost:5131/hashicorp/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" +``` + +## 🔍 Troubleshooting + +### ❌ Common Issues + +**"Module not found"** + +- ✅ Check if the module was uploaded successfully +- ✅ Verify the namespace/name/provider/version combination +- ✅ Ensure your Terraform configuration matches the uploaded module + +**"Authentication failed"** + +- ✅ Verify your auth token in `~/.terraformrc` +- ✅ Check that `TF_REG_AUTHORIZATIONTOKEN` is set correctly +- ✅ Ensure the token matches between client and server + +**"Database connection failed"** + +- ✅ Verify PostgreSQL connection string +- ✅ Check if the database server is running +- ✅ Ensure the database exists and user has permissions + +**"Azure Blob Storage access denied"** + +- ✅ Check Azure Storage connection string or Managed Identity setup +- ✅ Verify the storage account and container exist +- ✅ Ensure proper RBAC permissions for Managed Identity + +### 📊 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 8.0 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 + +--- From 08001c03e2e107b88e359e22b9718751b7b9863e Mon Sep 17 00:00:00 2001 From: matty Date: Sat, 7 Jun 2025 02:10:39 +0100 Subject: [PATCH 21/29] Fix README.md for Azure auth --- README.md | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index d6356d1..2d8190f 100644 --- a/README.md +++ b/README.md @@ -69,25 +69,25 @@ _🔒 = Requires authentication_ 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 (`inmemory`/`postgres`) | `inmemory` | No | `postgres` | -| `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 (Managed Identity) | - | If using Managed Identity | `mystorageaccount` | -| `TF_REG_AZURESTORAGE__CONTAINERNAME` | Blob container name | `modules` | If using Azure | `terraform-modules` | -| `TF_REG_AZURESTORAGE__SASTOKENEXPIRYMINUTES` | SAS token expiry | `5` | No | `10` | -| **Development Settings** | | | | -| `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | +| 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 (`inmemory`/`postgres`) | `inmemory` | No | `postgres` | +| `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` | +| **Development Settings** | | | | +| `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | ### 🏗️ Architecture Options @@ -117,8 +117,9 @@ TF_REG_MODULESTORAGEPATH=/data/modules 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 -# Uses Managed Identity - no connection string needed! +TF_REG_AZURESTORAGE__CONTAINERNAME=modules ``` ## 🐳 Docker Deployment @@ -169,6 +170,7 @@ az container create \ 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 @@ -252,9 +254,10 @@ curl -X POST \ **"Azure Blob Storage access denied"** -- ✅ Check Azure Storage connection string or Managed Identity setup +- ✅ Check Azure Storage connection string is properly configured - ✅ Verify the storage account and container exist -- ✅ Ensure proper RBAC permissions for Managed Identity +- ✅ Ensure the connection string has the correct account name and access key +- ✅ Check that the specified container name exists in the storage account ### 📊 Health Checks From 7f45f562b2567031c4dde821e8567612824dcd5d Mon Sep 17 00:00:00 2001 From: matty Date: Sun, 3 Aug 2025 05:45:25 +0100 Subject: [PATCH 22/29] Improve error handling --- .../GlobalExceptionMiddlewareTests.cs | 126 ++++++++++++++++++ TerraformRegistry/Handlers/ModuleHandlers.cs | 29 ++-- .../Middleware/ErrorResponseExtensions.cs | 89 +++++++++++++ .../Middleware/GlobalExceptionMiddleware.cs | 77 +++++++++++ TerraformRegistry/Program.cs | 13 +- 5 files changed, 316 insertions(+), 18 deletions(-) create mode 100644 TerraformRegistry.Tests/UnitTests/GlobalExceptionMiddlewareTests.cs create mode 100644 TerraformRegistry/Middleware/ErrorResponseExtensions.cs create mode 100644 TerraformRegistry/Middleware/GlobalExceptionMiddleware.cs 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/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs index 61de553..b67b2cd 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -1,5 +1,6 @@ using TerraformRegistry.API.Interfaces; using TerraformRegistry.API.Utilities; +using TerraformRegistry.Middleware; using TerraformRegistry.Models; namespace TerraformRegistry.Handlers; @@ -25,7 +26,7 @@ static ModuleHandlers() // Helper to return error responses in Terraform Registry format private static IResult Error(int statusCode, string message) { - return Json(new { errors = new[] { message } }, statusCode: statusCode); + return ErrorResponseExtensions.TerraformError(statusCode, message); } /// @@ -69,7 +70,7 @@ public static async Task GetModule( @namespace, name, provider, version); var module = await moduleService.GetModuleAsync(@namespace, name, provider, version); - if (module == null) return Error(404, "Module not found"); + if (module == null) return ErrorResponseExtensions.NotFound("Module not found"); return Ok(module); } @@ -89,7 +90,7 @@ public static async Task GetModuleVersions( 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 Error(404, "Module not found"); + return ErrorResponseExtensions.NotFound("Module not found"); return Ok(versions); } @@ -108,7 +109,7 @@ public static async Task DownloadModule( @namespace, name, provider, version); var downloadPath = await moduleService.GetModuleDownloadPathAsync(@namespace, name, provider, version); - if (downloadPath == null) return Error(404, "Module not found"); + if (downloadPath == null) return ErrorResponseExtensions.NotFound("Module not found"); context.Response.Headers["X-Terraform-Get"] = downloadPath; return NoContent(); @@ -132,7 +133,7 @@ public static async Task DownloadLatestModule( 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 Error(404, "Module not found"); + if (string.IsNullOrEmpty(latest)) return ErrorResponseExtensions.NotFound("Module not found"); return await DownloadModule(@namespace, name, provider, latest, moduleService, context); } @@ -155,7 +156,7 @@ public static async Task UploadModule( if (!SemVerValidator.IsValid(version)) { _logger.LogWarning("Invalid version format: {Version}", version); - return Error(400, + return ErrorResponseExtensions.BadRequest( $"Version '{version}' is not a valid Semantic Version (SemVer 2.0.0). Expected format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]"); } @@ -163,7 +164,7 @@ public static async Task UploadModule( var moduleFile = form.Files["moduleFile"]; var description = form["description"].ToString() ?? string.Empty; - if (moduleFile == null || moduleFile.Length == 0) return Error(400, "No file uploaded"); + if (moduleFile == null || moduleFile.Length == 0) return ErrorResponseExtensions.BadRequest("No file uploaded"); try { @@ -171,7 +172,7 @@ public static async Task UploadModule( var result = await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description); - if (!result) return Error(409, "Module version already exists"); + if (!result) return ErrorResponseExtensions.Conflict("Module version already exists"); // Return JSON with filename using DTO var response = new UploadModuleResponse { Filename = moduleFile.FileName }; @@ -179,13 +180,15 @@ public static async Task UploadModule( } catch (ArgumentException ex) when (ex.Message.Contains("Version")) { - _logger.LogWarning("Invalid version format: {Version}", version); - return Error(400, ex.Message); + _logger.LogWarning("Invalid version format: {Version} - {Message}", version, ex.Message); + return ErrorResponseExtensions.BadRequest(ex.Message); } - catch (Exception ex) + catch (InvalidOperationException ex) when (ex.Message.Contains("already exists")) { - _logger.LogError(ex, "Error uploading module"); - return Error(500, "An error occurred while uploading the module"); + _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/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/Program.cs b/TerraformRegistry/Program.cs index c0c6094..50805d2 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -1,8 +1,9 @@ +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; using TerraformRegistry.API.Interfaces; using TerraformRegistry.AzureBlob; using TerraformRegistry.Handlers; @@ -86,8 +87,8 @@ builder.Services.ConfigureHttpJsonOptions(options => { - options.SerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase; - options.SerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull; + options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; // Add other options as needed }); @@ -138,6 +139,9 @@ 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 @@ -283,5 +287,4 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, app.Run($"http://0.0.0.0:{portNumber}"); -public partial class Program; - +public partial class Program; \ No newline at end of file From adf4d3e28dc9abcce62f53e85c2f6cf51a51da7c Mon Sep 17 00:00:00 2001 From: matty Date: Thu, 21 Aug 2025 18:01:13 +0100 Subject: [PATCH 23/29] Simplify build process --- .github/workflows/release.yaml | 12 ------------ Dockerfile | 9 +++------ 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f190c24..fbdf9fd 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -18,15 +18,6 @@ on: paths: - "TerraformRegistry**/**" workflow_dispatch: - inputs: - use_postgresql: - description: "Include PostgreSQL support" - required: false - default: "true" - use_azure_blob: - description: "Include Azure Blob support" - required: false - default: "true" jobs: build: @@ -72,9 +63,6 @@ jobs: uses: docker/build-push-action@v5 with: context: . - build-args: | - USE_POSTGRESQL=${{ github.event.inputs.use_postgresql || 'true' }} - USE_AZURE_BLOB=${{ github.event.inputs.use_azure_blob || 'true' }} push: ${{ github.event_name != 'pull_request' }} tags: | ghcr.io/${{ github.repository_owner }}/terraform-registry:${{ steps.set-version.outputs.semVer }} diff --git a/Dockerfile b/Dockerfile index 427f733..f68cd8d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,6 @@ FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build WORKDIR /app -# Define build arguments with defaults -ARG USE_POSTGRESQL=true -ARG USE_AZURE_BLOB=true # Copy solution and project files COPY terraform-registry.sln ./ @@ -15,16 +12,16 @@ COPY TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj TerraformR COPY TerraformRegistry.Tests/TerraformRegistry.Tests.csproj TerraformRegistry.Tests/ # Restore using the solution file -RUN dotnet restore terraform-registry.sln /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +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 /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +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 /p:UsePostgreSQL=${USE_POSTGRESQL} /p:UseAzureBlob=${USE_AZURE_BLOB} +RUN dotnet publish TerraformRegistry.csproj -c Release -o /app/publish /p:UseAppHost=false FROM mcr.microsoft.com/dotnet/aspnet:9.0-alpine AS final WORKDIR /app From aad903199e19b99d1421fb06c0d26d1322d24c70 Mon Sep 17 00:00:00 2001 From: matty Date: Fri, 22 Aug 2025 02:10:42 +0100 Subject: [PATCH 24/29] Removed inmemory database for sqlite, added option to replace existing uploaded modules --- README.md | 121 ++++--- .../Interfaces/IModuleService.cs | 2 +- TerraformRegistry.API/ModuleService.cs | 6 +- .../AzureBlobModuleService.cs | 34 +- .../UnitTests/LocalModuleServiceTests.cs | 4 +- TerraformRegistry/Handlers/ModuleHandlers.cs | 23 +- TerraformRegistry/Program.cs | 12 +- .../Services/InMemoryDatabaseService.cs | 169 ---------- .../Services/LocalModuleService.cs | 22 +- .../Services/SqliteDatabaseService.cs | 319 ++++++++++++++++++ TerraformRegistry/TerraformRegistry.csproj | 1 + .../appsettings.Development.json | 5 +- TerraformRegistry/appsettings.json | 8 +- 13 files changed, 474 insertions(+), 252 deletions(-) delete mode 100644 TerraformRegistry/Services/InMemoryDatabaseService.cs create mode 100644 TerraformRegistry/Services/SqliteDatabaseService.cs diff --git a/README.md b/README.md index 2d8190f..7444782 100644 --- a/README.md +++ b/README.md @@ -6,19 +6,16 @@ A lightweight, feature-rich private Terraform Registry implementation with full [![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 +## Features -- 📦 **Full Terraform Registry Protocol v1** support for modules -- 🗄️ **Multiple Storage Backends**: Local filesystem and Azure Blob Storage -- 💾 **Multiple Database Options**: In-memory and PostgreSQL -- 🔐 **Authentication**: Token-based API security -- 📚 **OpenAPI Documentation**: Built-in Swagger UI -- 🌐 **Web Interface**: Included frontend for browsing modules -- 🐳 **Container Ready**: Easy deployment with Docker -- ☁️ **Azure Integration**: Managed Identity support for seamless cloud deployment -- ✅ **SemVer Validation**: Strict semantic versioning enforcement +- Full Terraform Registry Protocol v1 for modules +- Local filesystem and Azure Blob Storage support +- PostgreSQL database +- Token-based API authentication +- Built-in web UI and OpenAPI (Swagger) documentation +- Docker-ready deployment -## 🚀 Quick Start +## Quick Start ### Using Docker (Recommended) @@ -40,32 +37,32 @@ cd terraform-registry/TerraformRegistry dotnet run ``` -Visit `http://localhost:5131` to access the web interface! 🌐 +Visit `http://localhost:5131` to access the web interface! -## 📋 API Endpoints +## API Endpoints -### 🔍 Service Discovery +### Service Discovery - `GET /.well-known/terraform.json` - Terraform service discovery endpoint -### 📦 Module Operations +### 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 🔒 +- `POST /v1/modules/{namespace}/{name}/{provider}/{version}` - Upload new module (auth required) -### 📖 Documentation +### Documentation - `GET /swagger` - Interactive API documentation (when enabled) -_🔒 = Requires authentication_ +_Endpoints requiring authentication are marked accordingly._ -## ⚙️ Configuration +## Configuration -### 🌍 Environment Variables +### Environment Variables Configure the application using environment variables (prefix with `TF_REG_`): @@ -73,34 +70,36 @@ Configure the application using environment variables (prefix with `TF_REG_`): | -------------------------------------------- | ------------------------------------- | ----------------------- | ------------------- | ---------------------------------------- | | **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_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 (`inmemory`/`postgres`) | `inmemory` | No | `postgres` | +| `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__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` | | **Development Settings** | | | | | `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | -### 🏗️ Architecture Options +### Architecture Options -#### 🏠 **Local Development** +#### Local Development ```bash -# In-memory database + local file storage -TF_REG_DATABASEPROVIDER=inmemory +# 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)** +#### Production (PostgreSQL + Local) ```bash # PostgreSQL database + local file storage @@ -110,7 +109,7 @@ TF_REG_STORAGEPROVIDER=local TF_REG_MODULESTORAGEPATH=/data/modules ``` -#### ☁️ **Cloud (PostgreSQL + Azure)** +#### Cloud (PostgreSQL + Azure) ```bash # PostgreSQL database + Azure Blob Storage @@ -122,9 +121,9 @@ TF_REG_AZURESTORAGE__ACCOUNTNAME=mystorageaccount TF_REG_AZURESTORAGE__CONTAINERNAME=modules ``` -## 🐳 Docker Deployment +## Docker Deployment -### 📝 Docker Compose Example +### Docker Compose Example ```yaml version: "3.8" @@ -157,7 +156,7 @@ volumes: postgres_data: ``` -### ☁️ Azure Container Instances +### Azure Container Instances ```bash az container create \ @@ -176,9 +175,9 @@ az container create \ --scope /subscriptions/.../resourceGroups/.../providers/Microsoft.Storage/storageAccounts/mystorageaccount ``` -## 🔧 Usage with Terraform +## Usage with Terraform -### 📝 Configure Terraform CLI +### Configure Terraform CLI Create or update `~/.terraformrc`: @@ -194,7 +193,7 @@ host "registry.company.com" { } ``` -### 🏗️ Use Modules in Terraform +### Use Modules in Terraform ```hcl terraform { @@ -216,7 +215,7 @@ module "vpc" { } ``` -### 📤 Upload Modules +### Upload Modules ```bash # Create a module archive @@ -230,36 +229,36 @@ curl -X POST \ "https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3" ``` -## 🔍 Troubleshooting +## Troubleshooting -### ❌ Common Issues +### Common Issues **"Module not found"** -- ✅ Check if the module was uploaded successfully -- ✅ Verify the namespace/name/provider/version combination -- ✅ Ensure your Terraform configuration matches the uploaded module +- Check if the module was uploaded successfully +- Verify the namespace/name/provider/version combination +- Ensure your Terraform configuration matches the uploaded module **"Authentication failed"** -- ✅ Verify your auth token in `~/.terraformrc` -- ✅ Check that `TF_REG_AUTHORIZATIONTOKEN` is set correctly -- ✅ Ensure the token matches between client and server +- Verify your auth token in `~/.terraformrc` +- Check that `TF_REG_AUTHORIZATIONTOKEN` is set correctly +- Ensure the token matches between client and server **"Database connection failed"** -- ✅ Verify PostgreSQL connection string -- ✅ Check if the database server is running -- ✅ Ensure the database exists and user has permissions +- Verify PostgreSQL connection string +- Check if the database server is running +- Ensure the database exists and user has permissions **"Azure Blob Storage access denied"** -- ✅ Check Azure Storage connection string is properly configured -- ✅ Verify the storage account and container exist -- ✅ Ensure the connection string has the correct account name and access key -- ✅ Check that the specified container name exists in the storage account +- Check Azure Storage connection string is properly configured +- Verify the storage account and container exist +- Ensure the connection string has the correct account name and access key +- Check that the specified container name exists in the storage account -### 📊 Health Checks +### Health Checks ```bash # Check service discovery @@ -272,15 +271,15 @@ curl https://registry.company.com/v1/modules curl https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3 ``` -## 🏗️ Development +## Development -### 🛠️ Prerequisites +### Prerequisites - .NET 8.0 SDK - PostgreSQL (optional, for database testing) - Azure Storage Emulator (optional, for Azure testing) -### 🚀 Run Locally +### Run Locally ```bash cd TerraformRegistry @@ -288,25 +287,25 @@ dotnet restore dotnet run ``` -### 🧪 Run Tests +### Run Tests ```bash dotnet test ``` -### 📦 Build Docker Image +### Build Docker Image ```bash docker build -t terraform-registry . ``` -## 📄 License +## License This project is licensed under the MIT License - see the LICENSE file for details. -## 🙋‍♂️ Support +## Support -- 📖 Check the [API documentation](http://localhost:5131/swagger) when running locally -- 🐛 Report issues on GitHub +- Check the [API documentation](http://localhost:5131/swagger) when running locally +- Report issues on GitHub --- diff --git a/TerraformRegistry.API/Interfaces/IModuleService.cs b/TerraformRegistry.API/Interfaces/IModuleService.cs index 997b243..b8555fa 100644 --- a/TerraformRegistry.API/Interfaces/IModuleService.cs +++ b/TerraformRegistry.API/Interfaces/IModuleService.cs @@ -31,5 +31,5 @@ public interface IModuleService /// Uploads a new module /// Task UploadModuleAsync(string @namespace, string name, string provider, string version, Stream moduleContent, - string description); + string description, bool replace = false); } \ No newline at end of file diff --git a/TerraformRegistry.API/ModuleService.cs b/TerraformRegistry.API/ModuleService.cs index 9d77e23..2b185a9 100644 --- a/TerraformRegistry.API/ModuleService.cs +++ b/TerraformRegistry.API/ModuleService.cs @@ -34,7 +34,7 @@ public abstract class ModuleService : IModuleService /// Uploads a new module with SemVer validation ///
public async Task UploadModuleAsync(string @namespace, string name, string provider, string version, - Stream moduleContent, string description) + Stream moduleContent, string description, bool replace = false) { // Validate the version string against SemVer 2.0.0 specification if (!SemVerValidator.IsValid(version)) @@ -43,12 +43,12 @@ public async Task UploadModuleAsync(string @namespace, string name, string nameof(version)); // Delegate to the implementation-specific upload method - return await UploadModuleAsyncImpl(@namespace, name, provider, version, moduleContent, description); + 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); + Stream moduleContent, string description, bool replace); } \ No newline at end of file diff --git a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs index dd465e4..cfc19ad 100644 --- a/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs +++ b/TerraformRegistry.AzureBlob/AzureBlobModuleService.cs @@ -194,17 +194,31 @@ public override Task GetModuleVersionsAsync(string @namespace, s /// 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) + 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 + // Check if blob already exists to avoid duplication or allow replacement if (await blobClient.ExistsAsync()) { - _logger.LogWarning($"Module {@namespace}/{name}/{provider}/{version} already exists in blob storage"); - return false; + 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 @@ -237,6 +251,18 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str 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); diff --git a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs index 4f8071d..aa9ce5d 100644 --- a/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs +++ b/TerraformRegistry.Tests/UnitTests/LocalModuleServiceTests.cs @@ -206,9 +206,9 @@ public TestableLocalModuleService(IConfiguration c, IDatabaseService d, ILogger< } public Task CallUploadModuleAsyncImpl(string ns, string name, string provider, string version, - Stream content, string desc) + Stream content, string desc, bool replace = false) { - return base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc); + return base.UploadModuleAsyncImpl(ns, name, provider, version, content, desc, replace); } } } \ No newline at end of file diff --git a/TerraformRegistry/Handlers/ModuleHandlers.cs b/TerraformRegistry/Handlers/ModuleHandlers.cs index b67b2cd..bf8aa74 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -168,11 +168,30 @@ public static async Task UploadModule( 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); + await moduleService.UploadModuleAsync(@namespace, name, provider, version, stream, description, replace); - if (!result) return ErrorResponseExtensions.Conflict("Module version already exists"); + if (!result) + { + return ErrorResponseExtensions.Conflict("Module version already exists"); + } // Return JSON with filename using DTO var response = new UploadModuleResponse { Filename = moduleFile.FileName }; diff --git a/TerraformRegistry/Program.cs b/TerraformRegistry/Program.cs index 50805d2..23108c1 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -20,7 +20,7 @@ .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", true, true) .AddEnvironmentVariables("TF_REG_"); -// Register MigrationManager and IInitializableDb for postgres +// Register MigrationManager and IInitializableDb for database initialization builder.Services.AddSingleton(); builder.Services.AddSingleton(provider => { @@ -35,7 +35,7 @@ var config = provider.GetRequiredService(); var loggerDb = provider.GetRequiredService>(); var migrationManager = provider.GetRequiredService(); - var databaseProvider = config["DatabaseProvider"]?.ToLower() ?? "inmemory"; + var databaseProvider = config["DatabaseProvider"]?.ToLower() ?? "sqlite"; var baseUrl = config["BaseUrl"] ?? "http://localhost:5131"; if (string.IsNullOrEmpty(baseUrl)) @@ -48,8 +48,10 @@ throw new InvalidOperationException( "PostgreSQL connection string is missing or empty. Please check your configuration."); return new PostgreSqlDatabaseService(connectionString, baseUrl, loggerDb, migrationManager); - case "inmemory": - return new InMemoryDatabaseService(baseUrl); + 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."); } @@ -126,7 +128,7 @@ var logger = app.Services.GetRequiredService>(); var config = app.Services.GetRequiredService(); logger.LogInformation("Using {DatabaseProvider} database for module metadata", - config["DatabaseProvider"] ?? "inmemory"); + config["DatabaseProvider"] ?? "sqlite"); logger.LogInformation("Using {StorageProvider} storage for module storage", config["StorageProvider"] ?? "local"); var authToken = app.Configuration["AuthorizationToken"]; diff --git a/TerraformRegistry/Services/InMemoryDatabaseService.cs b/TerraformRegistry/Services/InMemoryDatabaseService.cs deleted file mode 100644 index 923f164..0000000 --- a/TerraformRegistry/Services/InMemoryDatabaseService.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System.Collections.Concurrent; -using TerraformRegistry.API.Interfaces; -using TerraformRegistry.Models; - -namespace TerraformRegistry.Services; - -/// -/// Implementation of a database service with in-memory storage -/// -public class InMemoryDatabaseService(string baseUrl) : IDatabaseService -{ - private readonly ConcurrentDictionary _modules = new(); - - /// - /// Lists all modules based on search criteria - /// - public Task ListModulesAsync(ModuleSearchRequest request) - { - var filteredModules = _modules.Values.AsEnumerable(); - - if (!string.IsNullOrWhiteSpace(request.Q)) - filteredModules = filteredModules.Where(m => - m.Name.Contains(request.Q, StringComparison.OrdinalIgnoreCase) || - m.Description.Contains(request.Q, StringComparison.OrdinalIgnoreCase)); - - if (!string.IsNullOrWhiteSpace(request.Namespace)) - filteredModules = filteredModules.Where(m => m.Namespace == request.Namespace); - - if (!string.IsNullOrWhiteSpace(request.Provider)) - filteredModules = filteredModules.Where(m => m.Provider == request.Provider); - - // Group by namespace, name, provider to get unique modules - var modules = filteredModules - .GroupBy(m => new { m.Namespace, m.Name, m.Provider }) - .Select(g => g.OrderByDescending(m => m.Version).First()) // Take latest version - .Skip(request.Offset) - .Take(request.Limit) - .ToList(); - - var result = new ModuleList - { - Modules = modules.Select(m => new ModuleListItem - { - Id = $"{m.Namespace}/{m.Name}/{m.Provider}", - Owner = m.Namespace, - Namespace = m.Namespace, - Name = m.Name, - Version = m.Version, - Provider = m.Provider, - Description = m.Description, - PublishedAt = m.PublishedAt.ToString("o"), - Versions = _modules.Values - .Where(v => v.Namespace == m.Namespace && v.Name == m.Name && v.Provider == m.Provider) - .Select(v => v.Version) - .OrderByDescending(v => v) - .ToList(), - DownloadUrl = $"{baseUrl}/v1/modules/{m.Namespace}/{m.Name}/{m.Provider}/{m.Version}/download" - }).ToList(), - Meta = new Dictionary - { - { "limit", request.Limit.ToString() }, - { "current_offset", request.Offset.ToString() } - } - }; - - return Task.FromResult(result); - } - - /// - /// Gets detailed information about a specific module - /// - public Task GetModuleAsync(string @namespace, string name, string provider, string version) - { - var key = GetModuleKey(@namespace, name, provider, version); - if (!_modules.TryGetValue(key, out var storage)) return Task.FromResult(null); - - var versions = _modules.Values - .Where(m => m.Namespace == @namespace && m.Name == name && m.Provider == provider) - .Select(m => m.Version) - .OrderByDescending(v => v) - .ToList(); - - var module = new Module - { - Id = $"{@namespace}/{name}/{provider}/{version}", - Owner = @namespace, - Namespace = @namespace, - Name = name, - Version = version, - Provider = provider, - Description = storage.Description, - PublishedAt = storage.PublishedAt.ToString("o"), - Versions = versions, - Root = "root", - Submodules = new List(), // Assuming no submodules for simplicity - Providers = new Dictionary - { - { provider, ">=0.12" } // Simplified provider constraints - }, - DownloadUrl = $"{baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download" - }; - - return Task.FromResult(module); - } - - /// - /// Gets all versions of a specific module - /// - public Task GetModuleVersionsAsync(string @namespace, string name, string provider) - { - var versions = _modules.Values - .Where(m => m.Namespace == @namespace && m.Name == name && m.Provider == provider) - .Select(m => m.Version) - .OrderByDescending(v => v) - .ToList(); - - return Task.FromResult(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 Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) - { - var key = GetModuleKey(@namespace, name, provider, version); - if (!_modules.TryGetValue(key, out var storage)) return Task.FromResult(null); - - return Task.FromResult(storage); - } - - /// - /// Adds a new module to the database - /// - public Task AddModuleAsync(ModuleStorage module) - { - var key = GetModuleKey(module.Namespace, module.Name, module.Provider, module.Version); - - // Check if module already exists - if (_modules.ContainsKey(key)) return Task.FromResult(false); - - return Task.FromResult(_modules.TryAdd(key, module)); - } - - /// - /// Removes a module from the in-memory database - /// - public Task RemoveModuleAsync(ModuleStorage module) - { - var key = GetModuleKey(module.Namespace, module.Name, module.Provider, module.Version); - return Task.FromResult(_modules.TryRemove(key, out _)); - } - - /// - /// Generates a unique key for a module version - /// - private static string GetModuleKey(string @namespace, string name, string provider, string version) - { - return $"{@namespace}/{name}/{provider}/{version}".ToLowerInvariant(); - } -} \ No newline at end of file diff --git a/TerraformRegistry/Services/LocalModuleService.cs b/TerraformRegistry/Services/LocalModuleService.cs index 44ded04..29427e4 100644 --- a/TerraformRegistry/Services/LocalModuleService.cs +++ b/TerraformRegistry/Services/LocalModuleService.cs @@ -218,7 +218,7 @@ public static bool TryGetFilePathFromToken(string token, out string filePath) /// 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) + string version, Stream moduleContent, string description, bool replace) { var namespaceDir = Path.Combine(_moduleStoragePath, @namespace); if (!Directory.Exists(namespaceDir)) Directory.CreateDirectory(namespaceDir); @@ -247,6 +247,26 @@ protected override async Task UploadModuleAsyncImpl(string @namespace, str 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 diff --git a/TerraformRegistry/Services/SqliteDatabaseService.cs b/TerraformRegistry/Services/SqliteDatabaseService.cs new file mode 100644 index 0000000..425ba61 --- /dev/null +++ b/TerraformRegistry/Services/SqliteDatabaseService.cs @@ -0,0 +1,319 @@ +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(); + } + + 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; + } +} \ No newline at end of file diff --git a/TerraformRegistry/TerraformRegistry.csproj b/TerraformRegistry/TerraformRegistry.csproj index 23208bc..9f108ed 100644 --- a/TerraformRegistry/TerraformRegistry.csproj +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -28,6 +28,7 @@ + diff --git a/TerraformRegistry/appsettings.Development.json b/TerraformRegistry/appsettings.Development.json index feac267..8fd1161 100644 --- a/TerraformRegistry/appsettings.Development.json +++ b/TerraformRegistry/appsettings.Development.json @@ -8,7 +8,7 @@ "BaseUrl": "http://localhost:5131", "ModuleStoragePath": "modules", "StorageProvider": "local", - "DatabaseProvider": "inmemory", + "DatabaseProvider": "sqlite", "AzureStorage": { "ConnectionString": "UseDevelopmentStorage=true", "ContainerName": "modules", @@ -22,7 +22,8 @@ "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 (inmemory or postgres)", + "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", diff --git a/TerraformRegistry/appsettings.json b/TerraformRegistry/appsettings.json index 737ccd1..9f5d9d2 100644 --- a/TerraformRegistry/appsettings.json +++ b/TerraformRegistry/appsettings.json @@ -9,7 +9,10 @@ "BaseUrl": "http://localhost:5131", "ModuleStoragePath": "modules", "StorageProvider": "local", - "DatabaseProvider": "inmemory", + "DatabaseProvider": "sqlite", + "Sqlite": { + "ConnectionString": "Data Source=terraform.db" + }, "AzureStorage": { "ConnectionString": "", "ContainerName": "modules", @@ -23,7 +26,8 @@ "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 (inmemory or postgres)", + "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)", From 6efabbda04f9783cdcab1766a491c83c38930143 Mon Sep 17 00:00:00 2001 From: matty <5208976+matty@users.noreply.github.com> Date: Sun, 7 Dec 2025 19:18:34 +0000 Subject: [PATCH 25/29] Frontend is updated with a new UI, OIDC support, API key management support & upgrade to .NET 10 --- .github/workflows/release.yaml | 32 +- .gitignore | 21 + Dockerfile | 4 +- Dockerfile.dev | 2 +- README.md | 17 +- .../Interfaces/IDatabaseService.cs | 15 + .../TerraformRegistry.API.csproj | 2 +- .../TerraformRegistry.AzureBlob.csproj | 6 +- TerraformRegistry.Models/ApiKey.cs | 47 ++ .../TerraformRegistry.Models.csproj | 2 +- TerraformRegistry.Models/User.cs | 33 ++ .../Migrations/Migration_1_0_1.cs | 48 ++ .../PostgreSQLDatabaseService.cs | 259 +++++++- .../TerraformRegistry.PostgreSQL.csproj | 2 +- .../TerraformRegistry.Tests.csproj | 4 +- .../Database/SqliteDatabaseServiceTests.cs | 191 ++++++ .../Controllers/ApiKeyController.cs | 164 +++++ TerraformRegistry/Handlers/AuthHandlers.cs | 202 +++++++ TerraformRegistry/Handlers/ModuleHandlers.cs | 16 +- .../Middleware/AuthenticationMiddleware.cs | 123 +++- .../Middleware/CustomBearerHandler.cs | 32 + .../PortalAuthenticationMiddleware.cs | 92 +++ .../Models/DatabaseRetryOptions.cs | 27 + TerraformRegistry/Models/OidcOptions.cs | 47 ++ TerraformRegistry/Program.cs | 106 +++- TerraformRegistry/Services/ApiKeyService.cs | 209 +++++++ .../DatabaseInitializerHostedService.cs | 63 +- TerraformRegistry/Services/IApiKeyService.cs | 54 ++ TerraformRegistry/Services/JwtService.cs | 123 ++++ TerraformRegistry/Services/OAuthService.cs | 268 +++++++++ .../Services/SqliteDatabaseService.cs | 265 ++++++++- TerraformRegistry/TerraformRegistry.csproj | 28 +- TerraformRegistry/appsettings.json | 41 +- TerraformRegistry/web-src/app.config.ts | 8 + TerraformRegistry/web-src/app.vue | 37 +- TerraformRegistry/web-src/assets/css/main.css | 38 +- .../web-src/components/UserMenu.vue | 56 ++ .../web-src/composables/useAuth.ts | 130 +++- .../web-src/composables/useDashboard.ts | 22 + TerraformRegistry/web-src/layouts/default.vue | 105 +++- .../web-src/middleware/global-auth.global.ts | 32 +- TerraformRegistry/web-src/nuxt.config.ts | 5 +- TerraformRegistry/web-src/package-lock.json | 90 ++- TerraformRegistry/web-src/package.json | 4 +- TerraformRegistry/web-src/pages/callback.vue | 58 ++ TerraformRegistry/web-src/pages/index.vue | 287 +++++++-- TerraformRegistry/web-src/pages/login.vue | 167 +++--- TerraformRegistry/web-src/pages/modules.vue | 376 ------------ TerraformRegistry/web-src/pages/settings.vue | 561 ++++++++++++++++++ TerraformRegistry/web/200.html | 16 + TerraformRegistry/web/404.html | 16 + ...Au2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff | Bin 0 -> 32284 bytes ...U3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff | Bin 0 -> 32276 bytes ...F_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff | Bin 0 -> 32512 bytes ...AhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff | Bin 0 -> 32284 bytes ...fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff | Bin 0 -> 30360 bytes ...XQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff | Bin 0 -> 30316 bytes ...LeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff | Bin 0 -> 30360 bytes ...sTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff | Bin 0 -> 30436 bytes ...gM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 | Bin 0 -> 19292 bytes ...fmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 | Bin 0 -> 8492 bytes ...M1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 | Bin 0 -> 26636 bytes ...F1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 | Bin 0 -> 28356 bytes ...6o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 | Bin 0 -> 7576 bytes ...2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 | Bin 0 -> 18372 bytes TerraformRegistry/web/_nuxt/4J-u_g9l.js | 1 - TerraformRegistry/web/_nuxt/B9sIrZpC.js | 1 - TerraformRegistry/web/_nuxt/BB080qx0.js | 1 + TerraformRegistry/web/_nuxt/BLEGckhC.js | 1 - TerraformRegistry/web/_nuxt/BRMY5sEW.js | 1 + TerraformRegistry/web/_nuxt/BnS3deBy.js | 46 ++ TerraformRegistry/web/_nuxt/BvVBPIAF.js | 1 - TerraformRegistry/web/_nuxt/C0rx7CO6.js | 1 + TerraformRegistry/web/_nuxt/CBbkJY-x.js | 1 + TerraformRegistry/web/_nuxt/CDgII3bh.js | 1 - TerraformRegistry/web/_nuxt/ChEe6xeu.js | 1 + TerraformRegistry/web/_nuxt/CjNMrKxF.js | 1 - TerraformRegistry/web/_nuxt/CwuZat6W.js | 1 - TerraformRegistry/web/_nuxt/CyQxyuxc.js | 1 - TerraformRegistry/web/_nuxt/D-iuHiwX.js | 1 + TerraformRegistry/web/_nuxt/D2SsjiDy.js | 1 + TerraformRegistry/web/_nuxt/D5zdv4Fl.js | 1 + TerraformRegistry/web/_nuxt/D6LYtxie.js | 1 + TerraformRegistry/web/_nuxt/DEdsACyT.js | 1 + TerraformRegistry/web/_nuxt/DZhRnb1V.js | 6 - TerraformRegistry/web/_nuxt/DcGCRxN2.js | 1 + TerraformRegistry/web/_nuxt/DfbLerQ4.js | 42 -- TerraformRegistry/web/_nuxt/DlAUqK2U.js | 1 + TerraformRegistry/web/_nuxt/DsdUjOsK.js | 5 + TerraformRegistry/web/_nuxt/DzDAta3s.js | 1 + TerraformRegistry/web/_nuxt/HxsO1gv8.js | 1 - TerraformRegistry/web/_nuxt/YGikTPtL.js | 1 + .../web/_nuxt/builds/latest.json | 2 +- .../9792f59a-1af7-4ae3-9f14-0457ce5d038c.json | 1 - .../f3625417-32b5-4eac-8a8d-eb5cb15667ce.json | 1 + .../web/_nuxt/entry.DOt0xfNe.css | 1 - .../web/_nuxt/entry.DTnOiQrN.css | 1 + TerraformRegistry/web/_nuxt/jISQO879.js | 1 - TerraformRegistry/web/callback/index.html | 16 + TerraformRegistry/web/index.html | 21 +- TerraformRegistry/web/login/index.html | 16 + TerraformRegistry/web/settings/index.html | 16 + build-frontend.ps1 | 81 +++ devutils/upload-dummy-module.ps1 | 49 ++ docker-compose.dev.build.yml | 24 +- docker-compose.dev.yml | 11 +- ...od.yml => docker-compose.prod.yml.disabled | 0 global.json | 7 + 108 files changed, 4171 insertions(+), 752 deletions(-) create mode 100644 TerraformRegistry.Models/ApiKey.cs create mode 100644 TerraformRegistry.Models/User.cs create mode 100644 TerraformRegistry.PostgreSQL/Migrations/Migration_1_0_1.cs create mode 100644 TerraformRegistry.Tests/UnitTests/Database/SqliteDatabaseServiceTests.cs create mode 100644 TerraformRegistry/Controllers/ApiKeyController.cs create mode 100644 TerraformRegistry/Handlers/AuthHandlers.cs create mode 100644 TerraformRegistry/Middleware/CustomBearerHandler.cs create mode 100644 TerraformRegistry/Middleware/PortalAuthenticationMiddleware.cs create mode 100644 TerraformRegistry/Models/DatabaseRetryOptions.cs create mode 100644 TerraformRegistry/Models/OidcOptions.cs create mode 100644 TerraformRegistry/Services/ApiKeyService.cs create mode 100644 TerraformRegistry/Services/IApiKeyService.cs create mode 100644 TerraformRegistry/Services/JwtService.cs create mode 100644 TerraformRegistry/Services/OAuthService.cs create mode 100644 TerraformRegistry/web-src/app.config.ts create mode 100644 TerraformRegistry/web-src/components/UserMenu.vue create mode 100644 TerraformRegistry/web-src/composables/useDashboard.ts create mode 100644 TerraformRegistry/web-src/pages/callback.vue delete mode 100644 TerraformRegistry/web-src/pages/modules.vue create mode 100644 TerraformRegistry/web-src/pages/settings.vue create mode 100644 TerraformRegistry/web/200.html create mode 100644 TerraformRegistry/web/404.html create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-8KeALpAu2nWJknvJhMk31fqE06iajfSeiM57lsZAo5g.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-CAyrLGU3kauAbzcFnj2Cv_iAPV8wT2NEvNmrA_77Up0.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-Cbq5YGF_nsoQo6qYm9EhA3p-oINRUqlXhACZ2Wh4BBE.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-G1pKsfAhfeIECsLbuPUckyz92yuHFKi9rmiwlRl8Tb0.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-OnaIl8fChu9Cb4bpYiOA4dK_W7eeMCjXQOWR8tUhXJ0.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-kzEiBeXQ06q7fC06p1Y4RaOpLlRWCnHcCcSaqFMJ6fc.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-rmd8_oLeTXCNUhiFyy1UYsogNo6QYBr9dQHrhl_hLbs.woff create mode 100644 TerraformRegistry/web/_fonts/1ZTlEDqU4DtwDJiND8f6qaugUpa0RIDvQl-v7iM6l54-wjJHhPsTzX4mZm37l7bbvLDtOEIT1R38DKPlwV_Z34A.woff create mode 100644 TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 create mode 100644 TerraformRegistry/web/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 create mode 100644 TerraformRegistry/web/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 create mode 100644 TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 create mode 100644 TerraformRegistry/web/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 create mode 100644 TerraformRegistry/web/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 delete mode 100644 TerraformRegistry/web/_nuxt/4J-u_g9l.js delete mode 100644 TerraformRegistry/web/_nuxt/B9sIrZpC.js create mode 100644 TerraformRegistry/web/_nuxt/BB080qx0.js delete mode 100644 TerraformRegistry/web/_nuxt/BLEGckhC.js create mode 100644 TerraformRegistry/web/_nuxt/BRMY5sEW.js create mode 100644 TerraformRegistry/web/_nuxt/BnS3deBy.js delete mode 100644 TerraformRegistry/web/_nuxt/BvVBPIAF.js create mode 100644 TerraformRegistry/web/_nuxt/C0rx7CO6.js create mode 100644 TerraformRegistry/web/_nuxt/CBbkJY-x.js delete mode 100644 TerraformRegistry/web/_nuxt/CDgII3bh.js create mode 100644 TerraformRegistry/web/_nuxt/ChEe6xeu.js delete mode 100644 TerraformRegistry/web/_nuxt/CjNMrKxF.js delete mode 100644 TerraformRegistry/web/_nuxt/CwuZat6W.js delete mode 100644 TerraformRegistry/web/_nuxt/CyQxyuxc.js create mode 100644 TerraformRegistry/web/_nuxt/D-iuHiwX.js create mode 100644 TerraformRegistry/web/_nuxt/D2SsjiDy.js create mode 100644 TerraformRegistry/web/_nuxt/D5zdv4Fl.js create mode 100644 TerraformRegistry/web/_nuxt/D6LYtxie.js create mode 100644 TerraformRegistry/web/_nuxt/DEdsACyT.js delete mode 100644 TerraformRegistry/web/_nuxt/DZhRnb1V.js create mode 100644 TerraformRegistry/web/_nuxt/DcGCRxN2.js delete mode 100644 TerraformRegistry/web/_nuxt/DfbLerQ4.js create mode 100644 TerraformRegistry/web/_nuxt/DlAUqK2U.js create mode 100644 TerraformRegistry/web/_nuxt/DsdUjOsK.js create mode 100644 TerraformRegistry/web/_nuxt/DzDAta3s.js delete mode 100644 TerraformRegistry/web/_nuxt/HxsO1gv8.js create mode 100644 TerraformRegistry/web/_nuxt/YGikTPtL.js delete mode 100644 TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json create mode 100644 TerraformRegistry/web/_nuxt/builds/meta/f3625417-32b5-4eac-8a8d-eb5cb15667ce.json delete mode 100644 TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css create mode 100644 TerraformRegistry/web/_nuxt/entry.DTnOiQrN.css delete mode 100644 TerraformRegistry/web/_nuxt/jISQO879.js create mode 100644 TerraformRegistry/web/callback/index.html create mode 100644 TerraformRegistry/web/login/index.html create mode 100644 TerraformRegistry/web/settings/index.html create mode 100644 build-frontend.ps1 create mode 100644 devutils/upload-dummy-module.ps1 rename docker-compose.prod.yml => docker-compose.prod.yml.disabled (100%) create mode 100644 global.json diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fbdf9fd..1ef3494 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,15 +9,21 @@ on: - "hotfix/**" tags: - "v*.*.*" - paths: - - "TerraformRegistry**/**" pull_request: branches: - main - develop - paths: - - "TerraformRegistry**/**" 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: @@ -38,7 +44,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: "9.0.x" + dotnet-version: "10.0.x" - name: Install GitVersion uses: gittools/actions/gitversion/setup@v0.10.2 @@ -51,8 +57,18 @@ jobs: 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' + if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image) uses: docker/login-action@v3 with: registry: ghcr.io @@ -63,9 +79,9 @@ jobs: uses: docker/build-push-action@v5 with: context: . - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image) }} tags: | - ghcr.io/${{ github.repository_owner }}/terraform-registry:${{ steps.set-version.outputs.semVer }} + 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/.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 index f68cd8d..53edcbf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build +FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine AS build WORKDIR /app @@ -23,7 +23,7 @@ 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:9.0-alpine AS final +FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS final WORKDIR /app COPY --from=publish /app/publish . # Create modules directory diff --git a/Dockerfile.dev b/Dockerfile.dev index ce0f66b..78699ed 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build-env +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build-env WORKDIR /app # Copy csproj and restore dependencies diff --git a/README.md b/README.md index 7444782..cb7a16f 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,18 @@ A lightweight, feature-rich private Terraform Registry implementation with full support for modules! -[![.NET](https://img.shields.io/badge/.NET-8.0-purple?style=flat-square&logo=dotnet)](https://dotnet.microsoft.com/) +[![.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 -- Token-based API authentication -- Built-in web UI and OpenAPI (Swagger) documentation - Docker-ready deployment ## Quick Start @@ -84,6 +85,14 @@ Configure the application using environment variables (prefix with `TF_REG_`): | `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` | | **Development Settings** | | | | | `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | @@ -275,7 +284,7 @@ curl https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3 ### Prerequisites -- .NET 8.0 SDK +- .NET 10 SDK - PostgreSQL (optional, for database testing) - Azure Storage Emulator (optional, for Azure testing) diff --git a/TerraformRegistry.API/Interfaces/IDatabaseService.cs b/TerraformRegistry.API/Interfaces/IDatabaseService.cs index 3ffaa21..3049757 100644 --- a/TerraformRegistry.API/Interfaces/IDatabaseService.cs +++ b/TerraformRegistry.API/Interfaces/IDatabaseService.cs @@ -36,4 +36,19 @@ public interface IDatabaseService /// 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/TerraformRegistry.API.csproj b/TerraformRegistry.API/TerraformRegistry.API.csproj index 3cbb7af..5fe5af1 100644 --- a/TerraformRegistry.API/TerraformRegistry.API.csproj +++ b/TerraformRegistry.API/TerraformRegistry.API.csproj @@ -5,7 +5,7 @@ - net9.0 + net10.0 enable enable diff --git a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj index cbfe9a4..59af2a1 100644 --- a/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj +++ b/TerraformRegistry.AzureBlob/TerraformRegistry.AzureBlob.csproj @@ -5,7 +5,7 @@ - net9.0 + net10.0 enable enable @@ -13,8 +13,8 @@ - - + + \ 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/TerraformRegistry.Models.csproj b/TerraformRegistry.Models/TerraformRegistry.Models.csproj index 17b910f..237d661 100644 --- a/TerraformRegistry.Models/TerraformRegistry.Models.csproj +++ b/TerraformRegistry.Models/TerraformRegistry.Models.csproj @@ -1,7 +1,7 @@  - net9.0 + net10.0 enable enable 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/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 index 0129a25..1dd9b8d 100644 --- a/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs +++ b/TerraformRegistry.PostgreSQL/PostgreSQLDatabaseService.cs @@ -191,15 +191,12 @@ namespace = @namespace AND await using var reader = await command.ExecuteReaderAsync(); if (!await reader.ReadAsync()) - // No matching module found return null; - // Dependencies are stored as a JSON array in PostgreSQL var dependenciesJson = reader.GetString(7); var dependencies = JsonSerializer.Deserialize>(dependenciesJson) ?? new List(); var versions = reader.GetFieldValue(8); - // Create and return the module return new Module { Id = $"{@namespace}/{name}/{provider}/{version}", @@ -213,11 +210,11 @@ namespace = @namespace AND PublishedAt = reader.GetDateTime(6).ToString("o"), DownloadUrl = $"{_baseUrl}/v1/modules/{@namespace}/{name}/{provider}/{version}/download", Versions = versions.ToList(), - Root = "main", // Set the root directory name as a string - Submodules = new List(), // No submodules for simplicity + Root = "main", + Submodules = new List(), Providers = new Dictionary { - { provider, "*" } // Adding required Providers property with a default value + { provider, "*" } } }; } @@ -249,7 +246,8 @@ ORDER BY var versions = new List(); await using var reader = await command.ExecuteReaderAsync(); - while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); // Return the updated ModuleVersions structure with the format expected by Terraform + while (await reader.ReadAsync()) versions.Add(reader.GetString(0)); + return new ModuleVersions { Modules = new List @@ -265,11 +263,6 @@ ORDER BY /// /// Gets the storage path information for a specific module version /// - /// - /// This method retrieves the storage metadata that connects a module's metadata in the database - /// with its physical file location in blob storage. The FilePath property is particularly important - /// as it's used by the blob storage service to locate and retrieve the actual module file. - /// public async Task GetModuleStorageAsync(string @namespace, string name, string provider, string version) { @@ -302,10 +295,8 @@ namespace = @namespace AND await using var reader = await command.ExecuteReaderAsync(); if (!await reader.ReadAsync()) - // No matching module found return null; - // Dependencies are stored as a JSON array in PostgreSQL var dependenciesJson = reader.GetString(7); var dependencies = JsonSerializer.Deserialize>(dependenciesJson) ?? new List(); @@ -316,7 +307,7 @@ namespace = @namespace AND Provider = reader.GetString(2), Version = reader.GetString(3), Description = reader.GetString(4), - FilePath = reader.GetString(5), // Critical field that maps to blob storage + FilePath = reader.GetString(5), PublishedAt = reader.GetDateTime(6), Dependencies = dependencies }; @@ -325,11 +316,6 @@ namespace = @namespace AND /// /// Adds a new module to the database /// - /// - /// This method stores module metadata in the database, including a reference to the blob storage path - /// where the actual module file is stored. The storage_path column creates the link between database - /// records and physical files in the blob storage. - /// public async Task AddModuleAsync(ModuleStorage module) { var sql = @" @@ -371,15 +357,13 @@ DO UPDATE SET command.Parameters.AddWithValue("@provider", module.Provider); command.Parameters.AddWithValue("@version", module.Version); command.Parameters.AddWithValue("@description", module.Description); - command.Parameters.AddWithValue("@storagePath", module.FilePath); // Link to blob storage path + 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; - // Execute and get the ID of the inserted/updated row var result = await command.ExecuteScalarAsync(); - return result != null; } catch (Exception ex) @@ -424,6 +408,235 @@ DELETE FROM modules } } + // 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(); diff --git a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj index e8a9618..53ccc1e 100644 --- a/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj +++ b/TerraformRegistry.PostgreSQL/TerraformRegistry.PostgreSQL.csproj @@ -5,7 +5,7 @@ - net9.0 + net10.0 enable enable diff --git a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj index d046a26..c51f8ed 100644 --- a/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj +++ b/TerraformRegistry.Tests/TerraformRegistry.Tests.csproj @@ -1,7 +1,7 @@  - net9.0 + net10.0 enable enable false @@ -9,7 +9,7 @@ - + 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/Controllers/ApiKeyController.cs b/TerraformRegistry/Controllers/ApiKeyController.cs new file mode 100644 index 0000000..8376bed --- /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.API.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 index bf8aa74..163155f 100644 --- a/TerraformRegistry/Handlers/ModuleHandlers.cs +++ b/TerraformRegistry/Handlers/ModuleHandlers.cs @@ -112,7 +112,21 @@ public static async Task DownloadModule( if (downloadPath == null) return ErrorResponseExtensions.NotFound("Module not found"); context.Response.Headers["X-Terraform-Get"] = downloadPath; - return NoContent(); + + // 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; } /// diff --git a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs index 41794cd..0549cb9 100644 --- a/TerraformRegistry/Middleware/AuthenticationMiddleware.cs +++ b/TerraformRegistry/Middleware/AuthenticationMiddleware.cs @@ -1,13 +1,18 @@ +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 static readonly string[] ProtectedPathPrefixes = new[] { "/v1/" }; + private const string SessionCookieName = "tf-session"; + private static readonly string[] ProtectedPathPrefixes = ["/v1/", "/api/keys"]; public async Task InvokeAsync(HttpContext context) { @@ -15,17 +20,119 @@ public async Task InvokeAsync(HttpContext context) if (ProtectedPathPrefixes.Any(prefix => path.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) { var header = context.Request.Headers[AuthorizationHeader].FirstOrDefault(); - if (string.IsNullOrEmpty(header) || !header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) + + // Check 1: Static API token (Legacy/System) + if (!string.IsNullOrEmpty(header) && header.Equals($"{BearerPrefix}{authToken}", StringComparison.Ordinal)) { - logger.LogWarning("Unauthorized request to {Path} from {RemoteIp}", path, - context.Connection.RemoteIpAddress); - context.Response.StatusCode = StatusCodes.Status401Unauthorized; - context.Response.Headers["WWW-Authenticate"] = "Bearer"; - await context.Response.WriteAsync("Unauthorized: missing or invalid Authorization token."); + 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); } -} \ No newline at end of file +} 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/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..7fd3d5c --- /dev/null +++ b/TerraformRegistry/Models/OidcOptions.cs @@ -0,0 +1,47 @@ +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(); +} + +/// +/// 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 index 23108c1..70034e2 100644 --- a/TerraformRegistry/Program.cs +++ b/TerraformRegistry/Program.cs @@ -20,6 +20,9 @@ .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 => @@ -87,6 +90,31 @@ 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; @@ -152,7 +180,16 @@ RequestPath = "" }); -app.UseMiddleware(authToken); +// 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) { @@ -178,13 +215,49 @@ } }); +// 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, int limit) => + (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") @@ -253,22 +326,12 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, await context.Response.SendFileAsync(filePath); }); +app.MapControllers(); + app.MapFallback(async context => { - // Serve index.html only at root - if (context.Request.Path == "/") - { - var indexPath = Path.Combine(webFolderPath, "index.html"); - if (File.Exists(indexPath)) - { - context.Response.ContentType = "text/html"; - await context.Response.SendFileAsync(indexPath); - return; - } - } - - // If path starts with /v1/, return problem JSON - if (context.Request.Path.StartsWithSegments("/v1")) + // 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"; @@ -283,7 +346,16 @@ await ModuleHandlers.UploadModule(@namespace, name, provider, version, request, return; } - // All other paths: 404 + // 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; }); diff --git a/TerraformRegistry/Services/ApiKeyService.cs b/TerraformRegistry/Services/ApiKeyService.cs new file mode 100644 index 0000000..c2fa1c4 --- /dev/null +++ b/TerraformRegistry/Services/ApiKeyService.cs @@ -0,0 +1,209 @@ +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 + }; + + // We need direct access to DbContext if IDatabaseService doesn't expose generic Add/Save. + // Assuming IDatabaseService has generic methods or exposes valid Sets. + // Or we might need to cast to specific implementation or add methods to IDatabaseService. + // For now, assuming we can access DbSet via a method or property, OR use the repository pattern properly. + // Let's check IDatabaseService. If it's limited, we might need to update it. + // Checking previous file reads, it seems IDatabaseService is generic or we need to add methods. + // Actually, let's implement the logic assuming we can add methods to IDatabaseService or accessing DbContext. + // But since `IDatabaseService` seems custom, let's look at `PostgreSqlDatabaseService`. + // It likely inherits from `DbContext` or wraps it. + // Wait, `PostgreSqlDatabaseService` was just DI'd. + + 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 index c94d0d9..294cf79 100644 --- a/TerraformRegistry/Services/DatabaseInitializerHostedService.cs +++ b/TerraformRegistry/Services/DatabaseInitializerHostedService.cs @@ -1,21 +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(IServiceProvider serviceProvider) : IHostedService +public class DatabaseInitializerHostedService : IHostedService { - private readonly IInitializableDb? _initializableDb = serviceProvider.GetService(typeof(IInitializableDb)) as IInitializableDb; - + 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) await _initializableDb.InitializeDatabase(); + 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/OAuthService.cs b/TerraformRegistry/Services/OAuthService.cs new file mode 100644 index 0000000..7c81d14 --- /dev/null +++ b/TerraformRegistry/Services/OAuthService.cs @@ -0,0 +1,268 @@ +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; + + providers.Add(new OidcProviderInfo + { + Name = name.ToLowerInvariant(), + DisplayName = name switch + { + "GitHub" => "GitHub", + "AzureAD" => "Microsoft", + _ => name + }, + Icon = name 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 index 425ba61..54176d9 100644 --- a/TerraformRegistry/Services/SqliteDatabaseService.cs +++ b/TerraformRegistry/Services/SqliteDatabaseService.cs @@ -51,6 +51,44 @@ namespace TEXT NOT NULL, 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) @@ -316,4 +354,229 @@ private static async Task> GetVersionsInternal(SqliteConnection con while (await r.ReadAsync()) versions.Add(r.GetString(0)); return versions; } -} \ No newline at end of file + + // 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 index 9f108ed..89903f3 100644 --- a/TerraformRegistry/TerraformRegistry.csproj +++ b/TerraformRegistry/TerraformRegistry.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable @@ -26,25 +26,29 @@ - - - + + + + + + + - - - + + + - + - - - - + + + + \ No newline at end of file diff --git a/TerraformRegistry/appsettings.json b/TerraformRegistry/appsettings.json index 9f5d9d2..7c2070e 100644 --- a/TerraformRegistry/appsettings.json +++ b/TerraformRegistry/appsettings.json @@ -21,6 +21,35 @@ "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", @@ -31,6 +60,16 @@ "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_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/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 index ed9e94c..3b168df 100644 --- a/TerraformRegistry/web-src/app.vue +++ b/TerraformRegistry/web-src/app.vue @@ -1,8 +1,39 @@ + + diff --git a/TerraformRegistry/web-src/assets/css/main.css b/TerraformRegistry/web-src/assets/css/main.css index 0700ce4..4a6a5a9 100644 --- a/TerraformRegistry/web-src/assets/css/main.css +++ b/TerraformRegistry/web-src/assets/css/main.css @@ -1,36 +1,16 @@ -@import "tailwindcss"; +@import "tailwindcss" theme(static); @import "@nuxt/ui"; -/* Custom animations and styles */ -@keyframes fadeIn { - from { opacity: 0; transform: translateY(10px); } - to { opacity: 1; transform: translateY(0); } +/* Font configuration */ +@theme static { + --font-sans: "Public Sans", sans-serif; } -@keyframes slideIn { - from { opacity: 0; transform: translateX(-10px); } - to { opacity: 1; transform: translateX(0); } -} - -.fade-in { - animation: fadeIn 0.3s ease-out; -} - -.slide-in { - animation: slideIn 0.3s ease-out; -} - -/* Custom hover effects */ -.hover-lift { - transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; +/* Smooth transitions for theme changes */ +* { + transition: background-color 0.2s ease, border-color 0.2s ease; } -.hover-lift:hover { - transform: translateY(-2px); - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); +body { + @apply bg-neutral-50 dark:bg-neutral-950; } - -/* Smooth transitions */ -* { - transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out; -} \ No newline at end of file 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 index 97c2305..9f7e62e 100644 --- a/TerraformRegistry/web-src/composables/useAuth.ts +++ b/TerraformRegistry/web-src/composables/useAuth.ts @@ -1,34 +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 = () => { - const token = useCookie('auth-token', { + // 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' - }) + sameSite: "strict", + }); - const isAuthenticated = computed(() => { - return !!token.value - }) + // 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; - const login = (authToken: string) => { - token.value = authToken - } + 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; + } + }; - const logout = () => { - token.value = null - navigateTo('/login') - } + // 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 ${token.value}` - } - } + Authorization: `Bearer ${apiToken.value}`, + }; + }; + + // Check if any OIDC providers are available + const hasOidcProviders = computed(() => providers.value.length > 0); return { - token: readonly(token), + // State isAuthenticated: readonly(isAuthenticated), - login, + user: readonly(user), + providers: readonly(providers), + isLoading: readonly(isLoading), + apiToken: readonly(apiToken), + hasOidcProviders, + + // Actions + checkSession, + fetchUser, + fetchProviders, + loginWithOidc, + loginWithToken, logout, - getAuthHeaders - } -} + 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 index 22a850d..2d2664e 100644 --- a/TerraformRegistry/web-src/layouts/default.vue +++ b/TerraformRegistry/web-src/layouts/default.vue @@ -1,9 +1,102 @@ + + - - diff --git a/TerraformRegistry/web-src/middleware/global-auth.global.ts b/TerraformRegistry/web-src/middleware/global-auth.global.ts index de78c26..c4e17c7 100644 --- a/TerraformRegistry/web-src/middleware/global-auth.global.ts +++ b/TerraformRegistry/web-src/middleware/global-auth.global.ts @@ -1,18 +1,22 @@ -export default defineNuxtRouteMiddleware((to) => { - // Skip middleware for login page - if (to.path === '/login') { - return +export default defineNuxtRouteMiddleware(async (to) => { + // Skip middleware for login and callback pages + if (to.path === "/login" || to.path === "/callback") { + return; } - const { isAuthenticated } = useAuth() - - // If not authenticated and trying to access protected routes, redirect to login - if (!isAuthenticated.value && to.path !== '/') { - return navigateTo('/login') + const { checkSession, isAuthenticated, apiToken, isLoading } = useAuth(); + + // Wait for loading to complete if on client side + if (import.meta.client && isLoading.value) { + await checkSession(); } - - // If authenticated and on root, redirect to modules - if (isAuthenticated.value && to.path === '/') { - return navigateTo('/modules') + + // 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 index 95c63c0..b888d02 100644 --- a/TerraformRegistry/web-src/nuxt.config.ts +++ b/TerraformRegistry/web-src/nuxt.config.ts @@ -2,7 +2,7 @@ export default defineNuxtConfig({ compatibilityDate: "2025-05-15", devtools: { enabled: true }, - modules: ["@nuxt/icon", "@nuxt/ui", "@nuxt/fonts"], + modules: ["@nuxt/icon", "@nuxt/ui", "@nuxt/fonts", "@vueuse/nuxt"], css: ["~/assets/css/main.css"], nitro: { prerender: { @@ -10,4 +10,7 @@ export default defineNuxtConfig({ }, }, 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 index 7941c32..a204f20 100644 --- a/TerraformRegistry/web-src/package-lock.json +++ b/TerraformRegistry/web-src/package-lock.json @@ -10,13 +10,15 @@ "@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/material-symbols": "^1.2.23" + "@iconify-json/lucide": "^1.2.0", + "@iconify-json/simple-icons": "^1.2.0" } }, "node_modules/@alloc/quick-lru": { @@ -1027,12 +1029,22 @@ } } }, - "node_modules/@iconify-json/material-symbols": { - "version": "1.2.23", - "resolved": "https://registry.npmjs.org/@iconify-json/material-symbols/-/material-symbols-1.2.23.tgz", - "integrity": "sha512-GoNuWl8dVDiVFQq+HEgbOmPW0vTycs7qXgtpfBAx4XgDI4MVwnEIjIcYy/tlzzjMF1TPDwkX5fI1+KIylSdBwQ==", + "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": "Apache-2.0", + "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": "*" } @@ -1321,17 +1333,6 @@ "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==", "license": "Apache 2" }, - "node_modules/@netlify/blobs": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.2.0.tgz", - "integrity": "sha512-9djLZHBKsoKk8XCgwWSEPK9QnT8qqxEQGuYh48gFIcNLvpBKkLnHbDZuyUxmNemCfDz7h0HnMXgSPnnUVgARhg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, "node_modules/@netlify/dev-utils": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-2.2.0.tgz", @@ -4533,6 +4534,61 @@ "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", diff --git a/TerraformRegistry/web-src/package.json b/TerraformRegistry/web-src/package.json index 78ec65d..8ac8a78 100644 --- a/TerraformRegistry/web-src/package.json +++ b/TerraformRegistry/web-src/package.json @@ -13,12 +13,14 @@ "@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/material-symbols": "^1.2.23" + "@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 index 1a5d494..2a4f9ad 100644 --- a/TerraformRegistry/web-src/pages/index.vue +++ b/TerraformRegistry/web-src/pages/index.vue @@ -1,46 +1,263 @@ + + - - diff --git a/TerraformRegistry/web-src/pages/login.vue b/TerraformRegistry/web-src/pages/login.vue index ee54813..c6bf3f1 100644 --- a/TerraformRegistry/web-src/pages/login.vue +++ b/TerraformRegistry/web-src/pages/login.vue @@ -1,62 +1,64 @@ @@ -66,38 +68,49 @@ definePageMeta({ layout: false, }); -const { login } = useAuth(); -const router = useRouter(); +const route = useRoute(); +const { + loginWithOidc, + isAuthenticated, + fetchProviders, + providers, + hasOidcProviders, + checkSession, +} = useAuth(); -const apiToken = ref(""); const isLoading = ref(false); -const error = ref(""); - -const handleLogin = async () => { - if (!apiToken.value.trim()) { - error.value = "Please enter a valid API token"; - return; - } +const isLoadingProviders = ref(true); +const selectedProvider = ref(null); +const errorMessage = ref(""); - isLoading.value = true; - error.value = ""; +// Handle error from OAuth callback +const errorParam = route.query.error as string | undefined; +if (errorParam) { + const errorMessages: Record = { + 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.", + }; + errorMessage.value = errorMessages[errorParam] || "Authentication failed"; +} - try { - // Simulate a brief loading state - await new Promise((resolve) => setTimeout(resolve, 500)); +// Fetch OIDC providers on mount +onMounted(async () => { + await fetchProviders(); + isLoadingProviders.value = false; - login(apiToken.value.trim()); - await router.push("/modules"); - } catch (err) { - error.value = "An error occurred. Please try again."; - } finally { - isLoading.value = false; + // Check if already authenticated + await checkSession(); + if (isAuthenticated.value) { + navigateTo("/"); } -}; +}); -// Redirect if already authenticated -const { isAuthenticated } = useAuth(); -if (isAuthenticated.value) { - navigateTo("/modules"); -} +const handleOidcLogin = (provider: string) => { + isLoading.value = true; + selectedProvider.value = provider; + errorMessage.value = ""; + loginWithOidc(provider); +}; diff --git a/TerraformRegistry/web-src/pages/modules.vue b/TerraformRegistry/web-src/pages/modules.vue deleted file mode 100644 index b9b4d7d..0000000 --- a/TerraformRegistry/web-src/pages/modules.vue +++ /dev/null @@ -1,376 +0,0 @@ - - - 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/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 0000000000000000000000000000000000000000..d33ee753b4c57df03b59a3b8ac127640bae2a487 GIT binary patch literal 32284 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 J|AnvwjQ}cXUq1i< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d51d4a0e2d00f3ba18a8341ccab25235807be9c2 GIT binary patch literal 30360 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⪚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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..52bdf5a21a500f53bc48b86a539cc0874441d147 GIT binary patch literal 30436 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 Ix0V1oa6a%9d~oU=q`mh8%DF{q+u+(PU)#dhT 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 literal 0 HcmV?d00001 diff --git a/TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 b/TerraformRegistry/web/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..44f707a7d46c4140bc1761bd8397c69a10203ca7 GIT binary patch literal 19292 zcmV(@K-Rx^Pew8T0RR91083l|6951J0IaY807~uv0RR9100000000000000000000 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

",Wo=new WeakMap;function Hy(e){if(Wo.has(e))return Wo.get(e);const t={...e};return t.render?t.render=(n,r,o,s,i,l)=>{var c;if(s.mounted$??n.mounted$){const u=(c=e.render)==null?void 0:c.bind(n)(n,r,o,s,i,l);return u.children===null||typeof u.children=="string"?Je(u):pe(u)}return Do(n._.vnode.el,Tr)}:t.template&&(t.template=` - - - `),t.setup=(n,r)=>{var c;const o=me(),s=ft(o.isHydrating===!1),i=tn();if(o.isHydrating){const u={...i.attrs},a=Fy(i);for(const f in u)delete i.attrs[f];_n(()=>{Object.assign(i.attrs,u),i.vnode.dirs=a})}_n(()=>{s.value=!0});const l=((c=e.setup)==null?void 0:c.call(e,n,r))||{};return Rs(l)?Promise.resolve(l).then(u=>typeof u!="function"?(u||(u={}),u.mounted$=s,u):(...a)=>{if(s.value||!o.isHydrating){const f=u(...a);return f.children===null||typeof f.children=="string"?Je(f):pe(f)}return Do(i==null?void 0:i.vnode.el,Tr)}):typeof l=="function"?(...u)=>{if(s.value){const a=l(...u);return a.children===null||typeof a.children=="string"?Je(a,r.attrs):pe(a,r.attrs)}return Do(i==null?void 0:i.vnode.el,Tr)}:Object.assign(l,{mounted$:s})},Wo.set(e,t),t}function Fy(e){if(!e||!e.vnode.dirs)return null;const t=e.vnode.dirs;return e.vnode.dirs=null,t}function Dy(e={}){var u;const t=ft(""),n=ft(e.politeness||"polite"),r=Va();function o(a="",f="polite"){t.value=a,n.value=f}function s(a){return o(a,"polite")}function i(a){return o(a,"assertive")}function l(){var a;o((a=document==null?void 0:document.title)==null?void 0:a.trim(),n.value)}function c(){var a;(a=r==null?void 0:r.hooks)==null||a.removeHook("dom:rendered",l)}return l(),(u=r==null?void 0:r.hooks)==null||u.hook("dom:rendered",()=>{l()}),{_cleanup:c,message:t,politeness:n,set:o,polite:s,assertive:i}}function Uy(e={}){const t=me(),n=t._routeAnnouncer||(t._routeAnnouncer=Dy(e));return e.politeness!==n.politeness.value&&(n.politeness.value=e.politeness||"polite"),or()&&(t._routeAnnouncerDeps||(t._routeAnnouncerDeps=0),t._routeAnnouncerDeps++,Mr(()=>{t._routeAnnouncerDeps--,t._routeAnnouncerDeps===0&&(n._cleanup(),delete t._routeAnnouncer)})),n}const By=ht({name:"NuxtRouteAnnouncer",props:{atomic:{type:Boolean,default:!1},politeness:{type:String,default:"polite"}},setup(e,{slots:t,expose:n}){const{set:r,polite:o,assertive:s,message:i,politeness:l}=Uy({politeness:e.politeness});return n({set:r,polite:o,assertive:s,message:i,politeness:l}),()=>pe("span",{class:"nuxt-route-announcer",style:{position:"absolute"}},pe("span",{role:"alert","aria-live":l.value,"aria-atomic":e.atomic,style:{border:"0",clip:"rect(0 0 0 0)","clip-path":"inset(50%)",height:"1px",width:"1px",overflow:"hidden",position:"absolute","white-space":"nowrap","word-wrap":"normal",margin:"-1px",padding:"0"}},t.default?t.default({message:i.value}):i.value))}}),Cu=(e="RouteProvider")=>ht({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 Nt(Zt,at(o)),()=>pe(t.vnode,{ref:t.vnodeRef})}}),Vy=Cu(),Bl=new WeakMap,Wy=ht({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=me(),s=Ne(),i=Te(Zt,null);let l;r({pageRef:s});const c=Te(Ha,null);let u;const a=o.deferHydration();if(o.isHydrating){const d=o.hooks.hookOnce("app:error",a);He().beforeEach(d)}e.pageKey&&tt(()=>e.pageKey,(d,h)=>{d!==h&&o.callHook("page:loading:start")});let f=!1;{const d=He().beforeResolve(()=>{f=!1});lr(()=>{d()})}return()=>pe(su,{name:e.name,route:e.route,...t},{default:d=>{const h=qy(i,d.route,d.Component),_=i&&i.matched.length===d.route.matched.length;if(!d.Component){if(u&&!_)return u;a();return}if(u&&c&&!c.isCurrent(d.route))return u;if(h&&i&&(!c||c!=null&&c.isCurrent(i)))return _?u:null;const m=bs(d,e.pageKey),v=zy(i,d.route,d.Component);!o.isHydrating&&l===m&&!v&&Ft(()=>{f=!0,o.callHook("page:loading:end")}),l=m;const k=!!(e.transition??d.route.meta.pageTransition??qi),w=k&&Ky([e.transition,d.route.meta.pageTransition,qi,{onBeforeLeave(){o._runningTransition=!0},onAfterLeave(){delete o._runningTransition,o.callHook("page:transition:finish",d.Component)}}]),g=e.keepalive??d.route.meta.keepalive??mp;return u=lu(k&&w,Dg(g,pe(Us,{suspensible:!0,onPending:()=>o.callHook("page:start",d.Component),onResolve:()=>{Ft(()=>o.callHook("page:finish",d.Component).then(()=>{if(!f&&!v)return f=!0,o.callHook("page:loading:end")}).finally(a))}},{default:()=>{const b={key:m||void 0,vnode:n.default?Gy(n.default,d):d.Component,route:d.route,renderKey:m||void 0,trackRootNodes:k,vnodeRef:s};if(!g)return pe(Vy,b);const E=d.Component.type,T=E;let R=Bl.get(T);return R||(R=Cu(E.name||E.__name),Bl.set(T,R)),pe(R,b)}}))).default(),u}})}});function Ky(e){const t=e.filter(Boolean).map(n=>({...n,onAfterLeave:n.onAfterLeave?Zs(n.onAfterLeave):void 0}));return $a(...t)}function qy(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,l,c;return((i=o.components)==null?void 0:i.default)!==((c=(l=e.matched[s])==null?void 0:l.components)==null?void 0:c.default)})||n&&bs({route:t,Component:n})!==bs({route:e,Component:n})}function zy(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)})pe(jt[e.name],e.layoutProps,t.slots)}}),Qy={name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},Yy=ht({name:"NuxtLayout",inheritAttrs:!1,props:Qy,setup(e,t){const n=me(),r=Te(Zt),s=!r||r===ho()?iu():r,i=je(()=>{let a=fe(e.name)??(s==null?void 0:s.meta.layout)??"default";return a&&!(a in jt)&&e.fallback&&(a=fe(e.fallback)),a}),l=ft();t.expose({layoutRef:l});const c=n.deferHydration();if(n.isHydrating){const a=n.hooks.hookOnce("app:error",c);He().beforeEach(a)}let u;return()=>{const a=i.value&&i.value in jt,f=(s==null?void 0:s.meta.layoutTransition)??gp,d=u;return u=i.value,lu(a&&f,{default:()=>pe(Us,{suspensible:!0,onResolve:()=>{Ft(c)}},{default:()=>pe(Xy,{layoutProps:fa(t.attrs,{ref:l}),key:i.value||void 0,name:i.value,shouldProvide:!e.name,isRenderingNewLayout:h=>h!==d&&h===i.value,hasTransition:!!f},t.slots)})}).default()}}}),Xy=ht({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&&Nt(Ha,{isCurrent:s=>n===(s.meta.layout??"default")});const r=Te(Zt);if(r&&r===ho()){const s=iu(),i={};for(const l in s){const c=l;Object.defineProperty(i,c,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)?s[c]:r[c]})}Nt(Zt,at(i))}return()=>{var s,i;return!n||typeof n=="string"&&!(n in jt)?(i=(s=t.slots).default)==null?void 0:i.call(s):pe(Jy,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}}),Zy=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},e_=Hy(By),t_={};function n_(e,t){const n=e_,r=Wy,o=Yy;return ze(),ia("div",null,[de(n),de(o,null,{default:$s(()=>[de(r)]),_:1})])}const r_=Zy(t_,[["render",n_]]),o_={__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(),l=void 0,a=o?Ur(()=>Ht(()=>import("./jISQO879.js"),__vite__mapDeps([7,3,8]),import.meta.url)):Ur(()=>Ht(()=>import("./HxsO1gv8.js"),__vite__mapDeps([9,10]),import.meta.url));return(f,d)=>(ze(),vt(fe(a),Uu(aa({statusCode:fe(r),statusMessage:fe(s),description:fe(i),stack:fe(l)})),null,16))}},s_={key:0},Vl={__name:"nuxt-root",setup(e){const t=()=>null,n=me(),r=n.deferHydration();if(n.isHydrating){const u=n.hooks.hookOnce("app:error",r);He().beforeEach(u)}const o=!1;Nt(Zt,ho()),n.hooks.callHookWith(u=>u.map(a=>a()),"vue:setup");const s=po(),i=!1,l=/bot\b|chrome-lighthouse|facebookexternalhit|google\b|googlebot/i;Mc((u,a,f)=>{if(n.hooks.callHook("vue:error",u,a,f).catch(d=>console.error("[nuxt] Error in `vue:error` hook",d)),l.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(Da(u)&&(u.fatal||u.unhandled))return n.runWithContext(()=>qt(u)),!1});const c=!1;return(u,a)=>(ze(),vt(Us,{onResolve:fe(r)},{default:$s(()=>[fe(i)?(ze(),ia("div",s_)):fe(s)?(ze(),vt(fe(o_),{key:1,error:fe(s)},null,8,["error"])):fe(c)?(ze(),vt(fe(t),{key:2,context:fe(c)},null,8,["context"])):fe(o)?(ze(),vt(Bf(fe(o)),{key:3})):(ze(),vt(fe(r_),{key:4}))]),_:1},8,["onResolve"]))}};let Wl;{let e;Wl=async function(){var i,l;if(e)return e;const r=!!(((i=window.__NUXT__)==null?void 0:i.serverRendered)??((l=document.getElementById("__NUXT_DATA__"))==null?void 0:l.dataset.ssr)==="true")?uh(Vl):ah(Vl),o=wp({vueApp:r});async function s(c){var u;await o.callHook("app:error",c),(u=o.payload).error||(u.error=Yt(c))}r.config.errorHandler=s,o.hook("app:suspense:resolve",()=>{r.config.errorHandler===s&&(r.config.errorHandler=void 0)});try{await Sp(o,Ny)}catch(c){s(c)}try{await o.hooks.callHook("app:created",r),await o.hooks.callHook("app:beforeMount",r),r.mount(_p),await o.hooks.callHook("app:mounted",r),await Ft()}catch(c){s(c)}return r},e=Wl().catch(t=>{throw console.error("Error while mounting app:",t),t})}export{aa as $,u_ as A,a_ as B,h_ as C,p_ as D,$a as E,Ae as F,yc as G,Te as H,_e as I,Je as J,pe as K,tn as L,l_ as M,Ve as N,pf as O,Ku as P,or as Q,Mr as R,dt as S,jr as T,mc as U,Nt as V,Tl as W,xm as X,om as Y,Uu as Z,Zy as _,ca as a,tt as a0,Bf as a1,ro as a2,ho as a3,ft as a4,me as a5,ei as a6,xl as a7,lr as a8,b_ as a9,va as aa,Mp as ab,Tm as ac,nn as ad,Ks as ae,ar as af,$h as ag,Xn as ah,y_ as ai,__ as aj,v_ as ak,w_ as al,Wm as am,k_ as an,de as b,ia as c,ua as d,ht as e,um as f,He as g,c_ as h,m_ as i,vt as j,g_ as k,fe as l,be as m,ds as n,ze as o,d_ as p,uu as q,Ne as r,je as s,Wu as t,b0 as u,f_ as v,$s as w,oo as x,fa as y,_n as z}; 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/HxsO1gv8.js b/TerraformRegistry/web/_nuxt/HxsO1gv8.js deleted file mode 100644 index ec9963d..0000000 --- a/TerraformRegistry/web/_nuxt/HxsO1gv8.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,u as a,c as i,o as u,a as e,t as o}from"./DfbLerQ4.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 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}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,r)=>(u(),i("div",l,[r[0]||(r[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)])]))}},b=s(f,[["__scopeId","data-v-4b6f0a29"]]);export{b as default}; 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 index 918196c..0c74c8a 100644 --- a/TerraformRegistry/web/_nuxt/builds/latest.json +++ b/TerraformRegistry/web/_nuxt/builds/latest.json @@ -1 +1 @@ -{"id":"9792f59a-1af7-4ae3-9f14-0457ce5d038c","timestamp":1748804362179} \ No newline at end of file +{"id":"f3625417-32b5-4eac-8a8d-eb5cb15667ce","timestamp":1765130559661} \ No newline at end of file diff --git a/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json b/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json deleted file mode 100644 index 7d9c133..0000000 --- a/TerraformRegistry/web/_nuxt/builds/meta/9792f59a-1af7-4ae3-9f14-0457ce5d038c.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"9792f59a-1af7-4ae3-9f14-0457ce5d038c","timestamp":1748804362179,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ 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.DOt0xfNe.css b/TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css deleted file mode 100644 index 35f1033..0000000 --- a/TerraformRegistry/web/_nuxt/entry.DOt0xfNe.css +++ /dev/null @@ -1 +0,0 @@ -/*! 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-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-green-500:oklch(72.3% .219 149.579);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--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-900:oklch(37.9% .146 265.522);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-600:oklch(51.1% .262 276.966);--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-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-lg:32rem;--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;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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}.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-\[-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-4{margin-inline:calc(var(--spacing)*4)}.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-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-6{margin-top:calc(var(--spacing)*6)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.\!mr-4{margin-right:calc(var(--spacing)*4)!important}.mr-4{margin-right:calc(var(--spacing)*4)}.-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}.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-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.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-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-20{width:calc(var(--spacing)*20)}.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-60{width:calc(var(--spacing)*60)}.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-7xl{max-width:var(--container-7xl)}.max-w-32{max-width:calc(var(--spacing)*32)}.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-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}.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}.items-stretch{align-items:stretch}.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))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*3*var(--tw-space-x-reverse))}:where(.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))}.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)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.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-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:calc(var(--ui-radius)*4)}.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-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-gray-200{border-color:var(--color-gray-200)}.border-info{border-color:var(--ui-info)}.border-muted{border-color:var(--ui-border-muted)}.border-primary{border-color:var(--ui-primary)}.border-secondary{border-color:var(--ui-secondary)}.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-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-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-500{background-color:var(--color-green-500)}.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-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-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-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-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-100{--tw-gradient-to:var(--color-indigo-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-600{--tw-gradient-to:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.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)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.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\.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-16{padding-block:calc(var(--spacing)*16)}.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)}.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-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.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-\[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-\[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)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.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-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-900{color:var(--color-gray-900)}.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-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-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)}.uppercase{text-transform:uppercase}.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-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-gray-50:hover{background-color:var(--color-gray-50)}.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-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\: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\]\: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\: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-72{width:calc(var(--spacing)*72)}.sm\:w-96{width:calc(var(--spacing)*96)}.sm\:w-auto{width:auto}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}: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:64rem){.lg\:inline-flex{display:inline-flex}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}.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-gray-700:where(.dark,.dark *),:where(.dark\:divide-gray-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-gray-700)}.dark\:bg-blue-900:where(.dark,.dark *){background-color:var(--color-blue-900)}.dark\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:from-gray-900:where(.dark,.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800:where(.dark,.dark *){--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}}.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%}}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}.fade-in{animation:fadeIn .3s ease-out}.slide-in{animation:slideIn .3s ease-out}.hover-lift{transition:transform .2s ease-in-out,box-shadow .2s ease-in-out}.hover-lift:hover{box-shadow:0 10px 25px #0000001a;transform:translateY(-2px)}*{transition:background-color .2s ease-in-out,border-color .2s ease-in-out,color .2s ease-in-out}@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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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 pulse{50%{opacity:.5}} 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/jISQO879.js b/TerraformRegistry/web/_nuxt/jISQO879.js deleted file mode 100644 index 851f3b2..0000000 --- a/TerraformRegistry/web/_nuxt/jISQO879.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./CDgII3bh.js";import{_ as i,u,c,o as l,a as e,t as r,b as d,w as p,d as f}from"./DfbLerQ4.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 u({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=a;return l(),c("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,[d(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:p(()=>[f(r(t.backHome),1)]),_:1})])])])}}},v=i(y,[["__scopeId","data-v-06403dcb"]]);export{v as default}; 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/index.html b/TerraformRegistry/web/index.html index 34f8829..d675408 100644 --- a/TerraformRegistry/web/index.html +++ b/TerraformRegistry/web/index.html @@ -1,13 +1,16 @@ - - - - + + + + + + + - - + + - -
- \ No newline at end of file + +
+ \ 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/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/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.build.yml b/docker-compose.dev.build.yml index 430aa4c..ab45787 100644 --- a/docker-compose.dev.build.yml +++ b/docker-compose.dev.build.yml @@ -1,5 +1,4 @@ --- - services: app: build: @@ -18,22 +17,35 @@ services: - 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=false + - TF_REG_AUTHORIZATIONTOKEN=MY_TOKEN_123 depends_on: - - postgres + postgres: + condition: service_healthy postgres: - image: postgres:17 + image: postgres:18 ports: - "5433:5432" volumes: - - postgres_data_dev:/var/lib/postgresql/data + - postgres_data_dev:/var/lib/postgresql environment: POSTGRES_USER: terraform_reg_user POSTGRES_PASSWORD: terraform_reg_password - POSTGRES_DB: terraform_registry_dev + 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 + image: dpage/pgadmin4:latest container_name: terraform-registry-pgadmin environment: PGADMIN_DEFAULT_EMAIL: admin@example.com diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 38c9cec..ff65a3c 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,5 +1,4 @@ --- - # Development-specific overrides services: # app: @@ -22,15 +21,15 @@ services: # - TF_REG_EnableSwagger=true postgres: - image: postgres:17 + image: postgres:18 ports: - - "5432:5432" + - "5433:5432" volumes: - - postgres_data_dev:/var/lib/postgresql/data + - postgres_data_dev:/var/lib/postgresql environment: POSTGRES_USER: terraform_reg_user POSTGRES_PASSWORD: terraform_reg_password - POSTGRES_DB: terraform_registry_dev + POSTGRES_DB: terraform_registry # Adding a database admin tool for development pgadmin: @@ -50,4 +49,4 @@ services: volumes: postgres_data_dev: pgpassfile_data: - # module_data: \ No newline at end of file + # module_data: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml.disabled similarity index 100% rename from docker-compose.prod.yml rename to docker-compose.prod.yml.disabled 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 From cc876dfd92de69700cdeca8efbed758cbe42950d Mon Sep 17 00:00:00 2001 From: matty <5208976+matty@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:04:55 +0000 Subject: [PATCH 26/29] Fixes to Azure AD auth --- TerraformRegistry/Models/OidcOptions.cs | 3 ++- TerraformRegistry/Services/OAuthService.cs | 15 ++++++++------- TerraformRegistry/web-src/pages/login.vue | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/TerraformRegistry/Models/OidcOptions.cs b/TerraformRegistry/Models/OidcOptions.cs index 7fd3d5c..b1d9842 100644 --- a/TerraformRegistry/Models/OidcOptions.cs +++ b/TerraformRegistry/Models/OidcOptions.cs @@ -21,7 +21,8 @@ public class OidcOptions { public string JwtSecretKey { get; set; } = string.Empty; public int JwtExpiryHours { get; set; } = 24; - public Dictionary Providers { get; set; } = new(); + public Dictionary Providers { get; set; } = + new(StringComparer.OrdinalIgnoreCase); } /// diff --git a/TerraformRegistry/Services/OAuthService.cs b/TerraformRegistry/Services/OAuthService.cs index 7c81d14..4cebecd 100644 --- a/TerraformRegistry/Services/OAuthService.cs +++ b/TerraformRegistry/Services/OAuthService.cs @@ -38,19 +38,20 @@ public IEnumerable GetEnabledProviders() if (!config.Enabled || string.IsNullOrEmpty(config.ClientId)) continue; + var normalizedName = name.ToLowerInvariant(); providers.Add(new OidcProviderInfo { - Name = name.ToLowerInvariant(), - DisplayName = name switch + Name = normalizedName, + DisplayName = normalizedName switch { - "GitHub" => "GitHub", - "AzureAD" => "Microsoft", + "github" => "GitHub", + "azuread" => "Azure AD", _ => name }, - Icon = name switch + Icon = normalizedName switch { - "GitHub" => "i-simple-icons-github", - "AzureAD" => "i-simple-icons-microsoft", + "github" => "i-simple-icons-github", + "azuread" => "i-simple-icons-microsoft", _ => "i-lucide-key" } }); diff --git a/TerraformRegistry/web-src/pages/login.vue b/TerraformRegistry/web-src/pages/login.vue index c6bf3f1..34d2fd7 100644 --- a/TerraformRegistry/web-src/pages/login.vue +++ b/TerraformRegistry/web-src/pages/login.vue @@ -41,7 +41,7 @@ :disabled="isLoading" class="w-full justify-center font-medium" size="xl" - :color="provider.name === 'github' ? 'neutral' : 'primary'" + color="neutral" variant="solid" @click="handleOidcLogin(provider.name)" > From 0b0fa475cb90a794afee8c791c6a67bf10f2e2e0 Mon Sep 17 00:00:00 2001 From: matty <5208976+matty@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:57:58 +0000 Subject: [PATCH 27/29] Update README.md for additional info for Azure AD --- README.md | 66 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index cb7a16f..ea9ba6c 100644 --- a/README.md +++ b/README.md @@ -67,34 +67,36 @@ _Endpoints requiring authentication are marked accordingly._ 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` | -| **Development Settings** | | | | -| `TF_REG_ENABLESWAGGER` | Enable Swagger UI | `true` (dev) | No | `false` | +| 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 @@ -267,6 +269,14 @@ curl -X POST \ - Ensure the connection string has the correct account name and access key - Check that the specified container name exists in the storage account +**"AADSTS50194" when using Azure AD** + +- If your Azure AD app is single-tenant, replace `common` in the OAuth endpoints with your tenant ID via env vars: + - `TF_REG_OIDC__PROVIDERS__AZUREAD__AUTHORIZATIONENDPOINT=https://login.microsoftonline.com//oauth2/v2.0/authorize` + - `TF_REG_OIDC__PROVIDERS__AZUREAD__TOKENENDPOINT=https://login.microsoftonline.com//oauth2/v2.0/token` +- Or configure the app registration as multi-tenant so `.../common/...` works. +- Ensure the redirect URI matches your `TF_REG_BASEURL`: `/api/auth/callback/azure`. + ### Health Checks ```bash From d7be4824499c37dac08c628222e7b7bf53b8a510 Mon Sep 17 00:00:00 2001 From: matty <5208976+matty@users.noreply.github.com> Date: Sat, 20 Dec 2025 13:39:00 +0000 Subject: [PATCH 28/29] Preparation for first release --- README.md | 37 ------------ .../Controllers/ApiKeyController.cs | 2 +- .../Models/StringArrayWrapper.cs | 10 ---- TerraformRegistry/Services/ApiKeyService.cs | 11 ---- docker-compose.dev.yml | 57 ++++++++++++------- ...e.dev.build.yml => docker-compose.psql.yml | 26 --------- 6 files changed, 36 insertions(+), 107 deletions(-) delete mode 100644 TerraformRegistry/Models/StringArrayWrapper.cs rename docker-compose.dev.build.yml => docker-compose.psql.yml (51%) diff --git a/README.md b/README.md index ea9ba6c..0bc86cd 100644 --- a/README.md +++ b/README.md @@ -240,43 +240,6 @@ curl -X POST \ "https://registry.company.com/v1/modules/myorg/vpc/aws/1.2.3" ``` -## Troubleshooting - -### Common Issues - -**"Module not found"** - -- Check if the module was uploaded successfully -- Verify the namespace/name/provider/version combination -- Ensure your Terraform configuration matches the uploaded module - -**"Authentication failed"** - -- Verify your auth token in `~/.terraformrc` -- Check that `TF_REG_AUTHORIZATIONTOKEN` is set correctly -- Ensure the token matches between client and server - -**"Database connection failed"** - -- Verify PostgreSQL connection string -- Check if the database server is running -- Ensure the database exists and user has permissions - -**"Azure Blob Storage access denied"** - -- Check Azure Storage connection string is properly configured -- Verify the storage account and container exist -- Ensure the connection string has the correct account name and access key -- Check that the specified container name exists in the storage account - -**"AADSTS50194" when using Azure AD** - -- If your Azure AD app is single-tenant, replace `common` in the OAuth endpoints with your tenant ID via env vars: - - `TF_REG_OIDC__PROVIDERS__AZUREAD__AUTHORIZATIONENDPOINT=https://login.microsoftonline.com//oauth2/v2.0/authorize` - - `TF_REG_OIDC__PROVIDERS__AZUREAD__TOKENENDPOINT=https://login.microsoftonline.com//oauth2/v2.0/token` -- Or configure the app registration as multi-tenant so `.../common/...` works. -- Ensure the redirect URI matches your `TF_REG_BASEURL`: `/api/auth/callback/azure`. - ### Health Checks ```bash diff --git a/TerraformRegistry/Controllers/ApiKeyController.cs b/TerraformRegistry/Controllers/ApiKeyController.cs index 8376bed..53ae373 100644 --- a/TerraformRegistry/Controllers/ApiKeyController.cs +++ b/TerraformRegistry/Controllers/ApiKeyController.cs @@ -4,7 +4,7 @@ using TerraformRegistry.Models; using TerraformRegistry.Services; -namespace TerraformRegistry.API.Controllers; +namespace TerraformRegistry.Controllers; [ApiController] [Route("api/keys")] diff --git a/TerraformRegistry/Models/StringArrayWrapper.cs b/TerraformRegistry/Models/StringArrayWrapper.cs deleted file mode 100644 index d3d27cc..0000000 --- a/TerraformRegistry/Models/StringArrayWrapper.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace TerraformRegistry.Models; - -/// -/// Wrapper class for use in JsonSerialization where an array of strings is used. -/// This replaces anonymous types like new { property = new string[] { ... } } -/// -public class StringArrayWrapper -{ - public string[] Values { get; set; } = Array.Empty(); -} \ No newline at end of file diff --git a/TerraformRegistry/Services/ApiKeyService.cs b/TerraformRegistry/Services/ApiKeyService.cs index c2fa1c4..5c41211 100644 --- a/TerraformRegistry/Services/ApiKeyService.cs +++ b/TerraformRegistry/Services/ApiKeyService.cs @@ -33,17 +33,6 @@ public class ApiKeyService(IDatabaseService dbService, ILogger lo CreatedAt = DateTime.UtcNow }; - // We need direct access to DbContext if IDatabaseService doesn't expose generic Add/Save. - // Assuming IDatabaseService has generic methods or exposes valid Sets. - // Or we might need to cast to specific implementation or add methods to IDatabaseService. - // For now, assuming we can access DbSet via a method or property, OR use the repository pattern properly. - // Let's check IDatabaseService. If it's limited, we might need to update it. - // Checking previous file reads, it seems IDatabaseService is generic or we need to add methods. - // Actually, let's implement the logic assuming we can add methods to IDatabaseService or accessing DbContext. - // But since `IDatabaseService` seems custom, let's look at `PostgreSqlDatabaseService`. - // It likely inherits from `DbContext` or wraps it. - // Wait, `PostgreSqlDatabaseService` was just DI'd. - await dbService.AddApiKeyAsync(apiKey); logger.LogInformation("Created new API key {KeyId} for user {UserId}", apiKey.Id, userId); diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index ff65a3c..255f05a 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,24 +1,31 @@ --- -# Development-specific overrides services: - # app: - # build: - # context: . - # dockerfile: Dockerfile.dev # Using a development-specific Dockerfile - # container_name: terraform-registry-app-dev - # ports: - # - "5131:80" - # - "5132:443" # Exposing HTTPS port for development - # volumes: - # - ./TerraformRegistry:/app/TerraformRegistry # Mount source code for hot reload - # - 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 + 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 @@ -30,10 +37,16 @@ services: 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 - # Adding a database admin tool for development pgadmin: - image: dpage/pgadmin4 + image: dpage/pgadmin4:latest container_name: terraform-registry-pgadmin environment: PGADMIN_DEFAULT_EMAIL: admin@example.com @@ -49,4 +62,4 @@ services: volumes: postgres_data_dev: pgpassfile_data: - # module_data: + module_data: diff --git a/docker-compose.dev.build.yml b/docker-compose.psql.yml similarity index 51% rename from docker-compose.dev.build.yml rename to docker-compose.psql.yml index ab45787..755a0e0 100644 --- a/docker-compose.dev.build.yml +++ b/docker-compose.psql.yml @@ -1,31 +1,5 @@ --- 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=false - - TF_REG_AUTHORIZATIONTOKEN=MY_TOKEN_123 - depends_on: - postgres: - condition: service_healthy - postgres: image: postgres:18 ports: From 346a143cd0f87c2a411860ec607e55e4dcff0488 Mon Sep 17 00:00:00 2001 From: matty <5208976+matty@users.noreply.github.com> Date: Sat, 20 Dec 2025 13:49:24 +0000 Subject: [PATCH 29/29] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 0bc86cd..a41508f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,12 @@ A lightweight, feature-rich private Terraform Registry implementation with full - 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)

4wY=-N4< z0d-cCYDq-OQ6t|x-*{Gf|1UnI!KKow!LVM+-~BxH@5rZcj1bG(G2&>-oF~>c6!#hO}{u|u*O+e#}ak;B=Gt@ P5(5n?>>xG4uVV=S=($Tp literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e73a897a26ecff097ddb2ed8ac1c6eba8c862eb3 GIT binary patch literal 8492 zcmV+{A=BP>Pew8T0RR9103j>@6951J08;P(03f{p0RR9100000000000000000000 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 bu-Tg?du5@TyyxBwSA|$pNxsB51nm?7k4+}c literal 0 HcmV?d00001 diff --git a/TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 b/TerraformRegistry/web/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..962a4bd3846a07b77609c2f91fc4956d1bf74e0d GIT binary patch literal 28356 zcmV)FK)=6tPew8T0RR910B*zp6951J0ObS#0B%zN0RR9100000000000000000000 z0000QgCiU0UL1!iKS)+VQi~)8U_Vn-K~#Y>Co%wq4ljNY2nvCXMD;=ogf0Lufs0rH zHUcCAh*$(51&=fbi9Z{M)faG^y39D&n-xX$x$pXME7&%Zde9y8+HoZHMk0ib6EMtl zwe$b~Ny)|-c3>R*6@-9* zQZ}Lz7AS}aijCcyTRWG!a4z!~^|9(-e{B26;c1)yIEj*$652qpYKn2du$LHrx=OQ_ zEYi97b5*X(Sfnc#>FmbHvBR9!j3hg0d5;K3c5*!cdJ??uX*p0z8B+jA%bP`j@cjSp z_m9rCFTBr5N!**e7|A8n{>2E+zb5wcjk?TKWABg((XK`xKagn9xj)m zBt!Q2fB0kId1J_=VMNe?Xav*v_hN2SOUa~Sk~pr<{E^>~g>{9}u2|1@SXkKD*rB@0nXSLw zk{twHbU^$HLC>`8QC17A5R7+@{FT2UaFs*EH!C;gS|L0k5Kh71A89_Pqjdksr+i1ADE7~}=P zkVc-2JjCk>p+f|1Qj|HVQkD#Dx-NAERHbOJs$rm zMhJ(q@bLZKoXzE=D<0iuP?=Q-w>XV3%Ujy#()vr$%qmK04hhB~Y>J{(g^qG4iU0p= zm6kV%meB)%F%jnXeXsg<(QKy|dKQ@L)vxNQ<(@@yiDI9u3@8`l$+##tXN`;s|NML7 z0bauAJQ`qN1%lx}0Y!kjIPwkyuq>d;+X9N(!T@vmz28sM=Ff2W&LEzQ9V`8$vo89t?1D_y zhX)4-2LlUJzXk#Wfj}S-2s8u&dqkH$W|I`ci7s~lNE!&h4FG@+Sc0Du3A;3aP{@ig z2P}9AjGheRUlN2AWI`56C|NejQH09WpgMJ^!5|Prq=FcM4Pu-u5HsY1n5zWDDhd#5 zX+UhD1+h&%h?EKwKL!@zcNXC+OZv~4Jfwh(MiV3gJ_Z4%190*qf@P&EUiI2Hyy!+Z zm!DScI(6yMr{AO*b2i#)-m=4vJL!yXzBA_S2r_5|079Z}>K+&!o19v^VdMPHrM(B1 zkDNSr{_?f!cYe5g@8P58FJ8a-@XPSufB#Q=EMaIIo?vBd>qK(%^!D)$2nt;t866WF zmqMk{(^#AgE>Dn|m7SAYAhse&v%Dy)x@r4idcEf_WLjGXf)J4e5MUM%Ve;;8zA&iI zelJ^~C;;dY3_#*DKZ+KF8pr|)Kn1K`9JVqK$w@{$Og*z+!}pI6tvub2C$d|CwyRyE zzSe!XxA)Q>+66M&>vnLPHeu(jjs(&G>YLVm?G{EZp!ANtOmwH1F;|2!gceOBOWIZAeZpG$pQeGgC&@5ZCHhlQPMTfxj^Vf1eYatZl)oU&oI7qz5rvRTse|!LgVF! zI2wQBg~!eD057RW_z5Wzo&YnFe22kq?dXGl0L=?bIE_OPBTyXioVSCu+2A5ho=(71 zA%!Vuk@$gWA9BV(EoVTyPUgIN&wF`THpZ|ocn+oJ!vdx<^)^3sSvo{iBhykNs;%3B zpla6-53Jx{{R&WaZ9k%{s3DXe-o?Qbt-KJp>OFm(ZBEJeypX=2lx*)_KC~7{ZI^@j z(cIS&R=xT+oaQQx*QK8SgjAdgFs7-;8vd8ow(JGca`{IFjBVwVS$>-k3)=Mu4x^K$ z0LvCN1>pGtCx>QP4F$Qaa6x8E=0MoXg}jhWRScMzEGd|t)NWL2UIj|NDZQlpOq(C{^<;0~P?V8Nq@S48aif zP`L(d${9DQIE64)J?7ayW`Sx(UY~*#Ti9J3Wxu~+CtL+-Ewr8e6TtBcGGpQY)R3W$ z4s>D^n6PB>Re&-1JZbQtkI9=V3`zh1mQtfb<@df$bdJc3I3rHN(UPLeI5Hz8qGme( zL)kdMcCo}v`kjJ{(I%u_9>p3YCu=Y)_aWM+01}P(=<}RI@xPF-dCHa?CmK(S(pi6| znSByNt0PZt62E_R>(3S|J$05Y9kh4F$$3pmJw2<=N@pmmK&~j*P~}7)k-w$W73rJ4 zLuP8+kP=NZFOWoExGB(&GIO=GmD*ihus_OFTFbpQ0)LVII#FoGru4{IH)Fc4Bw+F0 zw^BdCD-)?)2GH=eCRpSoYgOwKufZcDa!}s|GI==RhrdPf#F_(11G+rW$U7mD$c9?~ zh)s;WxGHQ~BlKU-^yDd5v=cL%+x(Lp0;jQKqG!xS$6o!7n5O}LAtc`{q9gUo>&07| zpNq$X$8pMcQ57r#zuo9NrrcULJE$Z!+cV)nHY2nf--EA+bZ&w2 z3#}WxVA&hk>sQoVN|BoZuo&r#PUNJIkBN8A6SPsyOH*>mvzNnQY|7^Ar~P&Rr2&r{ z<#;iNyCBmHx38%mxF08h*n3nqa8!eHmz%%6DK5kXKF-r4#_66Bua?$jWZ_itEb#$*iV3CRcIx zwP3CfrQHEvN<>9$`8i$~lRwDe({P1Zg8^Vq7GK@MV%LV4UXjzbPV?LDg`^ z02AyH%2Zy|TO7dFeQ*8&Fe^v7Y~F=AA-IU!VE{n+cS3Ufd%TJs=;hq+0aO^1hI(_~ zl9|wEYYCN=CksSwm9Wn9E2TySbgt*M$9?$iUp@Gts+DM{-atg;V{1iVQLRoXu}prc zl$(~lQ6|`S_7U^rQBYKZBVj}w2o?OL|-dUZ8)6OOoY4a`}ji0J^t%!DL@ z82~GE;Vexws4>Pd>l*gtRH1^(DSB^3(G^>q+}Zsp5~pl3oA{;rfh33ejqW5?#=d7Q zjHyWbME6*qtfh_*uwI-&P&lfCevj5U&WY5yZ|K*$8+0C*HaH2K25Dh$0M2|t-3Q%C zx)tIu4dVat$Z$dzqi^zI8c=M1>~^M1Z4GeEz?Hwn2YX+RX9Jq&&Z~sz5a--@pTgOp zjUY0OTY;a&clbKb z>$3W=;s(;GPCOV*yPKy)UMdQKL zQhh0XsK@Xifc*3}|I^=61O70@RKp(P9V{K=1CUI)ViRH@9N-(jCsnyWdFtv6gH4^E7WI1g=b+L4^c z+4*oTsJjbw!?_*G9XHIKHefgMP&7rU)&W1Q-^#(jshBxZuMT8l7!tzxhwWSj6B7b5Kyftd zM!Y%1OaKz7rUWlN0tidNEW>WV1!DKxc*?!shg-kvgm*1>2DB|$*u+*4j~JEsvV+e< zvGPT+_GPisQLODx`)aae!sKU&B_k+=0x)JP(2`V*O2drOHTLyXT$z6c@5enIpFA?` z_Hky}2T-2IC3P_{tkZIOV)HT~|14vauQ4jb zfH3QU9UspL9wv5U5}|Ce*;dItCU#A-P3falo;%HVfg)$~lkom3AIyrfX})E%Ew9#w)w8yW) zBsxYeCTcN2Fs-Y9_}47bS^zNAHS;*JAb{{e1>EyJ&oa(TnqCBONB?=(KaJQ* zY_3Tt^)_Eq=Du7$w{TXBdn^6zQ>q$3ZWdu}MsU2hop&;KxyQZk_rQaX%$xcYfTj%E zWgz?GEv|OFxXwy%@1P+T6auK-TiY?mARg?WezqG*ZDlG{EyjRD$>g;wrd$)gbANN< zViBP5=!2fy(f|MqqBT_zwo~sn{HNB=S7Pc z5WN;a38?u8YOo15+hVJ2w%cK+UG~~%zXJ|B~LPCMhQbI!ZqqDwBj;;L(| z``NF({{TD#|N7qzH>)0vjm6+gu^=s-fyen9JO}_P8Yr?JRKN@XevaEtguK>jIs>ER zMh&RvO?qEkfC-5(D8T960b&3~VQTOSC;({>s^I#>>1DcXy@s%E1Q;~{&M}Ai&aO%7s1=%p!Xtp7@$uR03a{{NPq$ufCV^!_w}R0I3W%UmyrONdvkrl z;ss`zq))xd=DB5m^3zr>%RgW6`wLwE?CkU?7eAXDH#tr2Ir{m9Y?1w6w3pfWRSdOC z9joXHhF#>4F_4sS9+Q)v0Xn2`t&3+ktcDGp!9Ya7)j-6m5g%FpE_3G1az@Q<+ zMvOY{gs18?Xw(FvoR%awr2HG0AN@h}vs$LfUbvsCQTyFom1;G$Y@>^f0%Oe9zE|ta?wO!ne8j;*Pb$9S zZs)QhyRq*tf*{}2?47fir#YV*I1+qj1y7*5J_b~t?_DjsqT<^Vus9k-Dfw#w)J*Uw zF)9`rllOS8)Ig1V`t1Z~!N$-9*$)jse*Ag<|Jq0>Rset?K!O4)XkY*%n7|Acu!0Tj z-~cDMzzs>@fn@MP3Zz0Bq(cT|LKgTS8~l(1xsV6>Pyhi4LI?_>2#TQuN}&wOp#s8C z2~|)HHBbw6P!A2z2u;uoEzk-BAOb{zfwxOCg-T1MGni>CHYYuU%i{}#nOWI6xq11b z0&!tcu|z79mz0*3S16Q~RVsD0rbb(<)7RA-8XB9LTUy(U?H!$6-95d1{R4wT!y}_( z;}erp(=)Sc*3PYSEs~-cmg5Cck`-0c4b!rF{lRcFo=j)+#d5XYYxi7)O9k;2>}aI1C&CjsnMk<8T5_!YMcnXP^tZp$E=F zFPwuu=!XR8fWUwSF5n7o;0_+ZGw>X|058ES@EW`U9{?Z3hwusbM0^rH89^LD0M>XB zLI2VYD@(q*-P^-!!Zm$~$K1EvdVh7nqt((_=%=(plF^^jEj#_{Pd8oi-Y?{etpl2~ za4^ml$`q~XEMPdLyh)2DRn!@7TMx>28-ks5+ErUK8{5-+yB^XN@84U@oO;6+okZI3 zgwtkRR&RR19``Of-aTW6+v663W5LG7&%Os^ZpEI_=(J+fj<{ftaYyXs;V_;54XDv6 z59pJWyzCAVe}|xJoQfPa=(bXKb6t#2$^ighdm3G0e9&!;#!$T!6P(T}{vKX-7_gkk z#M|E1e&e70)O^ACr&YG^(?#Q-(Imq&yB#=g z1rrCE|KKSAz{vFLPjE`*<(DZWSH<17)hbyH2uX^kXzZ{`?cCEE`6NL^cjG00HEXluK-BgIuWh9G1372|585y`2B0@PqRs$oZr6FO0`0O z006asiS7dcf0{`nmfv>`_}vWqW&S&Ne5c4m2B&@NiBleV?S}KNJ8H>ZA9Uz+&u3(2 zVdLPD%qvBvEIxiY@)Rpord)-vT6O9*X!5QS=k)nF2s9gvDis4qx(r;|a^(>zP^eV7 z3JR5~)X=J>Q}471@96Q{UH8?fRBKXKHlW)cxAb~#G>_OHMv{1~21*n~M#Jvm1kb`J zAVeo7?d3>v4{x`QhKgD>y)t!tE%Tp#I$GjOpS|}{xepKkCxJXn%sU)|bTn4b>@rBg z{Xx8-0PqpOOG<#R0$x!8_(Oo#Q~~}EctZ^k9|iaT4LjU#@WEID@_E3A0!<$C6yo1K zqY?n%QveXJ0=^VncL97q0hD(F;%@)|Nz9SV=BJZz=!wzFuFysG@IR+Ve!eUeCRiI4A@{b`^lt6>=Al-Mlmf|R+WBMlx(~f^J5(5ts`V`izM4} zg4w8^)Nc_|t2#|mSl~5kd6lyYGWc^PUM1U@fAhN{<-9kqDypioRa7*Z(7T27+{DYS zQSNyoGc9D8T!-mqMMKBEal?8=W;fpqXx#njz?f9cXcfQ zIg2H>xkg&3(#-kwC->lQ)+aT3DlDhoGAEWQf6MANXbXDVe=fjpJJ z+l>V@ScXzQhztE-3X~65`c+Ox>>4y~RZ12pRco4=L0i#G&J8C6hp$p2Tg{yLN%oTy z!$}!dR~?Y49umo1`oYIb1*64B)z0M3i*M~dja9+;tq)|fW;i2Ve;#JdT6GH!G<7+q zG`$HNAkU&{vn*HHd4fZfD>Pw{9g8EXdp?bI^4R8VKvWry7mSi;X>I50vD z(SR^Fwb-9JjJN+|$P>NMv$erxW$5n+S_M+K_811E%S2y=`E1(NePw?3U1T(tr$V5n}t}WJE-X=8;l;%}LZYr)5y}VPB z*@$dn*$gpET3K+91h6rR=NSw)3Ynt}toO4DrZhdLB86*)O;fn)%FwUXn*5|1Ax0}5 znfhPyI#K0{`us_`igTevb2eV%AFEFSGBH;vo@L5){b9 z+YGz?D5XDLX1Mn;e!6DWh@hJ<;{|uMINB!}7ZYNo3zN?z5-^M&k~Wlf+z0~KJ1|V2 zECB-s410^~Xbi5D>QDJJvBlCS9DFv~{L4HIron-0GvY+4^=kLUaR!oIW#L4?s4zf+ z(0&nV+qKpiz7??`>`4{a4z(c_5gzC&KB|kmu-Kgyo?RWqTc_wG$*=~gGIZqK`J-gw$q3603Jxz8?x=3UBIY@i(z4EUJVpD`DbNw z5;N@(wpsBr7Md1rM?DW(yv+Y8C&R*0jKHtD{lnmot{DK~mJzO}0C1+yKa5|8^!75` zOgVmxA$q4s#_F8H*Nl`Jz1>;GKiz6-=6>nS|aiA73h>S!GukiAb zbSy8b&!|9FV+w!HkF9Rqb$(l~OOT0B?JW4xUAlDAGj9njK#HPQoIJ>Km8pl72Jdnc z+%wZzHX@Kn{051sa=tV|=LR+{O3)LC4C>Z?EVpJsU6(U%%}!s?&gqhv`sGE$SNLk{ z8F#&Ds=nB3nEM=94gB`1RYQ-bDFwC5i0al>IR{S}*L!Q%4jbZ@E#*o}va~Y1U{ji6 zhXT~Bg`#l@G!s4;7IU@Yc6#BtkhSx@~kd{O; z)aP=&As^FZ_ON^`aVAjbl9NJq%g_J06DK7*tkY^2A2$I8yUi;Gh+3#GSAG$$n6vyt zT?ZpId%+4>|LDa_m+)dTOHw5*T1*KYu%bMg;1_OL7+(^*EN36)6e3ULDS6rGH8WK$HVjHr#t5@SH^<*WFlej2}jIBPgt{N$fZr`F?_dnIAbs) zIX1!{#D_6MSST$JVOEJ(Y^pD9veP>Erp)}A0%W^TyZQ?m0Q_ZPI>PDsT+r@JMQP512>)VUX@a(YgOax zPyXn6nF)IzVwH6})=*v&+bkUHJBWpA*d_Dk*~Yjn_Wd^-_(lpH_%!~$B5H_WcauDq zv%OF=>Fx_G1W_ra&LuX$B0Dg0{xvW!c6Hj5st4v=yu0ms;OplxFUM}3PtUqo{NN(Q zF#u*74j6GB^M66vO?+YYXv`JLrvCxs`;;5cBW_3>Pgs!Sz!>8EyyoenGqwk@`u>GU ze;Ps-9iL6q!svD<9glzT;d*`dbt`c_T9ezo6r-X+xycFLHuZ^_)$kmvxyu79-hhSQ z{lh$)?)=&MV2RbbqqoIv?T72d=S?bkt3<4IBZVr}eqP6xtUrkJzN}@+Gt~~UcAcY$ zhvSN7d+K(jf*%Kbf1g+}x#SyNk=68`Vq!sX&DxxhXpq*y6AGh~1kT}gV!n1eiI|u- z>4b2b!3FPOzNjH!dqtz$kLg#N=MU+>CgUr($~z?e;sdt-fqiWk|D4&|0Lm75LLPLH z5xdmuA9(r!KDQk@ym$#k*C22%m_Tfu{~4OTiJPv1a;uB>13G^D58Kk|F2B0`yqjgd zbGz!0zT%vjnhSFI>&J?V2A+*hdpbX|+G_ttVZ$7^ykdc`>!3|TDc0L+q0|%dCk(g0 z1Jl~;chJE&VtJmP*O#B$M}Id{axo7?p+t{~f?sN!ieSB?@H#z^mL*VPyI_RsR2XFt zkr&fhL0368rUf}A%$QOf6m3IR6j+@N42!4!^lf7f!YpF}F67vZhxg$4ZRK!22g!iF zyy@kBvm8q~1v_^NyIG9qc^F&-_p3x~VU$bc;@G_2%AW*J0};VA(uY_rK#D^B>??!3*-f8O7P{CP7O zRgbasAQrmO^fGAH&PU~GunM3E7Z8g(jeHHzg#RniytNo zk6(UP+9PE9?tPNcogGpXw?C)m zaDsjSU5l>ZH!eohvjBO+C;w&-y_{5hF9Yti<-z7my6bN)UzXCK3)>g&F7VP^zPS8x zICFQNv#c{SbJe>C4;{z>Y^S>kUMrK6&un>t^Z@4RlyH1k`nGjvI&&Sm7Nb|L8Olt- zE}rJ?Ts%>S)T}TyMwkG~ za?y$S8CJIGeO}!gFfAyx@xYzZ_KB6+v=u}lZ1xOSNNu$aE&L zkQFXLY8nx;hV2hz;0VGj^Aa@ufMxpDXMBK;pW0uZ@X&g@rSTHS^6WcoW5lkp?E1rZ z&f1-PTYIUN`(G2+Hr}`;2bVDC=Q-$C0`Fx3+xOKxD1mLA=Rvg;msgZjnAvLw$9?*L zA4#Ac7}7EZ_=dgWofHRXpK0@LPs(43lBfQi0;9qzf^l_**N?xnX1I<;Whnu3E{Xf2>R|GwLNrok!2EGP+P@j z@vC7%OS+<*ViwR45MLdZzqY%EjMZq^qZ21I<3J}QZ8 z%XA^#NkI^=GkMLeVdR|D){x8ths|8kPQSkQKFb)n`OfLH?ZuWa3x}3|cDUmFr_Kz{ z;Tv~W(>~ZNTWvJ_dbM*fYcMItxJsH1$Vn1)1Z(Q?bJ7QgYwiE;X0=A-OYr1$lBCJF zF%guFjXQ&H9s56O58;;&S-Rq!e|qO}HB%EpOLZlO@SB+kkLxMKJ4FFZA-6LslW}bS zOVXd{E{}_?3d8u#dk)X-zc*Nb>-gIB<=m5vrJ>K&XOGr*PtI<49-;RV$C}=ZZ`Ty% zXUyF%^t+-B_^cEhX>Ma^rqwz7JT7HzAK%@lo~g*&>3t?^ZSOU6K@mKOw%alpe2;J1 zUC(@PyJY51xl8mX7b^w&m!9AmjJbNbig& z&7zkx2bK@dFY4dPZZLzH4VhHMCIxdG)s}7LW+|%-=3Q-=Mr_xQ+s-g%E~!v8P?k_q zVje@>TNKVO970I88Eifp_h``uOv_Ncv16YB(~Q>k7=QsmyiVqb0vXE^t$2V=YlRDn z|7Dzcf>Jj$*9#{jWolTK=myY0-C+zU0cO565UtBb>wp4EfH9!%Fp!YOg#b-8ga)B8 z5&6)UQaWr^B}ONzLe1CVHv_S0ya>2Pvz9N_Qf&)y6{tXZTu+5kT(u&3kIrT!|DW_% z@xHOZ&LZeL64^Xg3Sae*0Vg~}NFw=OF=cLUl2F(NS>F72TwcwB15OQV zYvLZ`*B9MrWOg4McIb&VUYi`3^BUW|cgSWuvG4ooz_V}eZdPtD`CSPs8E(d+S>16L zC`SdAhHX`;udEgc^ZGw8^!D+Tp($*abS2fnpqse;#_4CfZ(4s_*mUJH=Nh&<_`CLc zkdTb-d_!eNm}KyKXj08WHS3l2F5=eyKfmoWiVTS^$5-6KTY0+DC3W2$!Wdzea$!)M zn=>lRH_TA}j!bFF056iM4xX8+k<7~aZ93|2HplR5YTuk|>E$a!$Z0O@3a2|XxEV{T zQ*Nm*{SMP@cdhU9rioh*9ADXg+q?=?K;2;}gc(3AZ?Xd+>oBu5vkRtsy^$Wi6c)X2;i_sJ6HQVmiL&&+OJL$B(Z?m+ahO|oSQ zrFy0WrG!#B9G3MxvU75nTe2lP8=jfdI!6a^e0;yh-q7SVd^d8_);3HHA}6`DI`+2# zfqN*!k^*JOMDnl+UO-%GACxC9DA6siCvJmM2$l2_hb&}FsmccL`9O-LammVBvc$A)hv_Zd+O0OX1MDGd#4kCH{nGup z)4zCF=b7H?xCinX)J33`$ELe5@Z=s8Wfcc;cGkf-OLLcQASLlR5;uUiAP0PIi-3|l zEFbziZL*)2fR)jzKqP|mk@<5a1E>xp7sg`JGh(v+KIZsPdRT&rVjZ#s&PJ(NZc+A@ z5IzMWsZ&G@@M-b)l6=t`1+)R$z!{X$5`mq@u2XdcKa7-SO?3){E&9WRDMX=QqEnEO zC~26$7|=D`(PBycD5eH$;7)+s#Pi3>!)o3BS<8C3*?8_mRd`*v&QrO}-S#{>I44*% z7`=7tyV&5opzP5Y5Cl7Sh5%(Zv^az%*Cry)&x3e4HxJv^a^QgRLe>7drj2L~u5)_J zm|}Cbd=ew#;;LGXU)OZ&Hj5d%F`A$2ThCYiPOo7DMw@pZ&IQ+r)sTHM(E*sA2N|B< zH>Ek4Q8SDXqg8nm`FxtSS&SGue?)gFH=JIeYfO;r6`3KeYT>+QnY}yazvw6murF3F~wxg}Mo(7(aYwkKL=8 z>r=QMe9xBk(^EG$;JR@=Tc*H1V&NRSaLl5Ng;1~UYZ$n@Fpy(!Nh&r@?Z~tUSkV&3 zS{`3(=(Q76Z>A&YRm2X+Cxbw~3@rw5MTA2pwi z7l*`%OjCj^Xrf$B`?jBL|8f>h)aKST&f*8)`P{x%HX}^j*^jQqRPnniqm|JtsbvyQ zE8Pg1ob%i457AV!?~1+Jn8oA2wtg-U5R!lgv3IBst=1+<^JqUFPL#tq81?o>mAbtV zt%h-O+GQ{y zLRcaOAFShxgX8j7r371~7H4tVcl~Vlr;}*1Hm9y}7B_&%=k~X-g~sMj&JP^FJ83Sc zk5NRkWJ6f3WV5`WYY<(HuHtop4Chq1?H69?&cO^o-!|FKr`vnU3tjO`ZLj1KmpkN& z2Rg9E`Epa=T#YZKQum2-xk^NU&d(C#WEZIHMZE0@jaOAEgl2Ph-0_ zeg!acIB|`Ns!-%Wj2tktMzc`-jLK`u8oDY5zoyy*2eZyl_s#;iwA0{>$J9(phMx0{ zv1s=-mF}A|mH5r1c0<=l_OuSQc8aHvh1kaakuKVBRE_8$)q|n_)YV!umq}ZPsz8-V zHW+)_`y^Y@3ZonGcSPKL6rpx~7JWUk0wF2rYF0F>3ujQ(EVQ9;bECGQG_Mh!i*6hk z>!yuF)f8+?^`fgkc7gE=_!-q;0($$1GoxA{lI!)#BgxB4{L(UC(l@w!(pP{rRsFg1 z(T`;D6E5;^-nze^iQ-?RZ@u+@p$$BMFyP2n>lo08%?Fta%$2vFl?~V%PY|Q^r8%&; z2J~uC^G^nKAsK!*R`*eG7!Ruj*RS7Q>0R;Ho;r1%^xo;Q_nyQ@Am~o*>63Dbcg|0| zcPBma$44$n{ig2_@JvqS1le(mk}nsK#QY>GJgpR>Yer-xo-YdHPElXTQGJu#stO&j_2X*E(m4- z^UpsJ){mMVB@@@rV!PIV1*C8~u6x%XiCxdB#C12{djaIP<+!e0Unl5E{TzT3ydTQ* zU-k`Rr@j-#D#OvrZK8q)Q2@adOteE8`kgXTln)hcQwE>P0J<&4&j{8*zEe=q_P6oT zB7hAKMr(WXwBYgO{|o|czU=azPI_WPrslzdUTVjg7^O9_=5=*-L3^hG%0c3&!hwUZr;h4a{O&(CYRBw@W(> z>lKVWt0WAxX$7snnUa^jE4i%?r9|YHE5;&!NFQGK;`iL&#buD*k>2m-m@h3byF)AE)22&;Qy$>CfmDZE@opmttmf^cXWE46ux&63ul6OwyqI--}*6Yz$(i~7NJX+loqcshJAd4m=-UFj$k@J;wX}wTN=e*&9NoB z&~1aMMG;_T5q`4ZxuFE@mqrUp19kABk+cC`$@%=B`!{U947?c#Y9-Uc6jv8iTo9L- zd#YMqX#T>636;82tT(qvw(_&63ZJpaF%UhhzlI*aIf|i7jq8!*`mSV8cZu?u6|~qc zNv8Ko=GxA}?C3N_4yDg!CRvv`B4t!$(|TQ|6ZOK0kkPBOKV5@^4>o;NPh5<$AWT@z z4cb2VfoPah-=?phWWKlBOqejd*wtK^L^6t!2rY3p}wR3PV3@yJOO$ML1_TtH<^>yDJkt!clz3Z}|SN+TQb|@dt;;ojKhD@b4#^tR+ z<|E`yYKAK-lwAko!RW=BH7Ud}vNV*IC517A6|x{@$QDH$Gp}ecDq9u;*5U`>RIj^2 zMiOTU(?f{6S1dGx1FtpH925j`nm9Xz90BIlISg4(Y0Ob<1IC~_zO6!GQKWk#6F-h6=dwIam!kFn;l)<$~;Q;3YNgO3J#0VF_g_-R}W;$DP zgto(la6y)Fc&XG}eLbQORg_tmpH*LnEP@wi)q|2`Z0bQ8w&WndyeKq(L7-Wf5>Q(< zT_pg5r=s6Y4Tc`(cfh(obl`NnB&J)THSgbARI8JW=HyRy|P73 z;lYV)YFh3s3a=s#;8u+@vej_DBu3D1znX61x>v;ApQB`+|*J2jzN8BPV3 z-#&ZrSA(C|n?Gc3ulHfetR&Lvz-?I`0bF2l?iU>69Fze9!`qL33})YY!8iMOJUyfp zIpv&8Z3X3tt9nb>UT|MyfT9?CT;*a{0HYX_wz{fl5GF4{fFVNc%Q2U^!VWXZ&yPW8 zF2@YH#9S3LX#A9RmG+6GO6SlicPVfNW)g#rL5Ct^sLvvb51B7ci$FC; z4t+$IM_;YWv;RhMfpnNI&vzSCO{yA>MPIB7)8FaBw4W|aucI4G1dnC|wV96p8ZeWz zAA^qhhlY3nk;B>mbp-X@Pt7E=t?;BI5m2Y_vs z()%VvH*y!dZPb1v#lcE6 zRmM{D3DXL*uw&R~ts!m)+osQ@X@4**KkqJYIA2Hkg-@8U(C(vyHZNsz~WJ}a?XvnKtG!D=2 z_Ho5iJ4`#n+RVH&zuh++>@eeTT_Vo^@AG@vpc+szBAP)Fua*Pn?C7ibBCr9I33AwLMnJl!2DzaQK$XJ;Zfy1}%L1BpBQ{7E0guqhC|Ixx**m-t?J!H>f-^D8NU9Xa!cI>F;bY$oCWUudq-a9}!S0>Erxi&xV%UioU_rM1RK$ZxP~-C z1|fCGyC^f1A1WLbkD{T{QN^eh)GX>0>N4s!>I3R4>OXV@It$&2o<-logkZRsSR-3I(SY5VyV)Y^Y2wPX89%C2;A8OdK zfF62mf^F(}j3S!3z=W*o+Irirwq=ShwdysfI#DH)O~K*#H0>Pi-0dpo=DurRz27Xn zo;_=rcXH1m$RXZAV2yi?cfTbs=CvLD9W&qA|B2JqPrLV=+i&E|S)T^Ui^NE28q=GS z;L{m?=KG|Jt4pK{xfRvaP-C-O+^W{MtwWtEyWbrlBn4mr9smsmGJ-THkG8h7wo=ij zv2JAm@X9J!Kr|g*6$SKMRs9tR#P-T`^n%)<;X$smmbu7UIVCNXnszVbg!%s1$- zmb1Ry9}>%P8N9BLIYNy~W?bnLk_LAAs-$XV3WjF&W1i!U;DkmcX-t{NX+$Y|#vN$U zpe7`Zco=jJGS`X?O`<8&yB6t%aUH(W^HB~?BWR08PU){vsn@ZR3^p8eeJ!r0ZUPj4 z-ZG-}!MawC-?YW0>FLR_M30Ny$tRF1wJ0SQXPqR)o6az#(h5yKYk2`AUL?e zfp=(K$B!5lMUdHC@QXbY!Qu`rb~LOYElnHKDI$+(^h8XPQL&NtPbD0$LK+j!AlkNL zAtAHsJ&-R~Ttqu_gGrBo#k_3qxvZzBu z1L`2yX3w!-C&~5eZ%;w)ZudJ87-?*&n?BUlR$EfFu<{Co=_1-op(K!TY+l{6i0KER zrWX$f6VIC~RaW_B*tiE9<~JGTa>c`ADjAd!(S|&wLKaaDyTA*^hE8;)8-*}xIxJDj zIyyQZWk>>_6g7HmXgUXis+FLp7+oGcukWj@bhk+_81#@CW$P6~Kof3sZhpu#0)RdZ>`|b8>m)g6=h>CSypqpgT}GS#E*|n zva{cV^a)tIRFJ`Dt3+~Ky8w#0+qsORXGo3NSBPi_%_45os*)*JjcPoRO_Iu;hULU$ z4SNyBtMr39`&dCuw|$P*DBRYqz~a!x_~^D$samJo?WECMXx6%i30CeQ=)@FdU@>D@ zV>}Wn=t4eb27y}%a*|>=)u#0y1CQ(ns&>(;xs<(Bv*_;Rm5h@YV5KLC@%KPKa>Qn_~a9xvI5C^#Y0Kr`)hkph#-C2_H0MrdVExE z(?(8S-2qtYX!Q{k>aEBAGjs|@ec1NhD;c(~!3ZnloZ*A1o-dYIB7N{BT+2-x;1R8B zT>gQ$*Y8$OThmU{md6rJx^0Xns#F+$Yz{&5uJtC>w*MW=4Z(+tgSJdAV_Lx5?B-8pfDj&C+Bj- z!mQOhu2d-3h41mu3=SP5f=fTH;Ua43iTvI51M0w1)`-eTENM?KI0rGdHhB6l>>X_r zbT4rJOV9g`fbH)k(;XxN5*6pv{Jv?YGZtQgv&SJs_!n13{<}>(F+R2=WDybM&iyTF z0#+VLyVIAr{PejpakhfG`_aDF;aD&4#dp&lS#`m((R=jx=)Q zsIf_hNv)KdX^1|eTC`vW}Y_yMtOZWPC8oc4K}85c~=OG){A%dn`h29(22I+xD$-@ctlVpLpE#^Zgq(}_K7%n?^c zdu-fJXr7vwQAjV|do~Gp5KCL&ZQ^Qp-`cKHSsbMok}68U>_epOp@%`H@lLEQY7um{O&<-}x^ z$<*D><6TBUbo|}1m0#m%?TB{9S(O(gXxFard~q?Qj4N>4=<6cw08Cx18o{;F2wd9U zld$D{2%D~DJnB$Myc+(6qR$5pft4deie#7ppiGk_dDtcTGN1RHN{ZCX&cMaS~RfFE1cHhJL>o{;~L*Q3FbL-Kiv zR?U0S^n@}HN=u|jDP3WN6N~}{GN|YXq%9u3b#?MKSL|%v0EvXyV~RD4P_TvkSyx?t z6Me0gaTympw{bW3t}=~@LSh+kx}t@vqH2SKNAULD=^ZjPdE|sbX4(qAW{mdrarL6S zYG60Gh(Cb0f zp%YR1;(ILDOKtkrjTExU8Ndby+-}8MMd}o;ojq8s$M#hlBs#L!tnM+R?xu0?T($^Z zX;{1!Op4@AK93)9Y)_Ubm$s)|m>RljGpQhB;xx3*t{q2_LJ5aUoG5(&&1gASA3uNx_= zlxftUUgpK3j86M0-Wi`Q%w3n(ft3P*$S7&FR7qn{(h*+&tN7L1vwYQ``r?ARgB~iG z9DJ7U|CT1H6%#4AHf}M-aNNwRL^g2mH;L-zBvv-k3(rN6IoMHSRp$2#HD(38mY>EN zK~z>Ue|h`VX6fn;=pT4jU1p349(_?_A;?Dgq{bjf6k$G{Uu>iz^#ks;y2+ALNFOjL zkg(Ikd$)By0&#AwZ0+QkUL+6_s;SvMTvR1a;cTe6doML1B3uriBE8xW)XKqJTy;z) z-TZ9#awo-VJEKprFgKm@CD3xG-(|#z0(&iQhcjz;3$hYS{sF(Y5?Ev39{W~7pWj^2 z_}mni-UWUaIC@LRsQ?}B%FH(n>LfvJ=`FTzxgjT|lB!&jX2Z#tE>Wj%z~?tu zvfglniZxb@nQNYXhB>OmYL%!Qx>?n5caImZ_FFlZPX&iUkcH1h_&o) z$MHp($KdN^&@gi<9`JuFjqs;*xZE$>VrALdxwK-T$0Iy%hS_+Bwb0VWRrPFe?DYSh zty-dQ>@xVzY1t4KyN_BG7Y>^VP%;o0L9+3#0CUZ)qS92yVB?lpTUM z15Zr_%>?7TMogH*A;Lr7c4qj;V$_2mP%%&slF_z<+wahpdgh>lruURN4L=GvLeQxf z_>uEslO!U{zAlNaeZZ~uQ1%*q?&rJAjSw3E7t#z(1)Jeoq0N(Zsrlyq5v5K5yk$+E zEpmCl5mbjkkvKX9q$4}8=a4hQ;vi$KkmA&!2k{UpYJ!Unh&gPV!jY3NJH*qwG$=9- zLTx%3P)C!3%t0nvAurBdICy^!9q!F>x8*SPpOFuz#r%3j!eNf~*3Jw9?wHGh!0U@S z0<%d!=^Y*ky=|V~3PUg$qQFo+NMmb;lP2qdjvL_CyBNkXj#_x0^g!ouQPAcH$`pMC z_8$Fs`v-$%kdBnmk{g`mpAj}w4Xl5|SF$lhGr@%gTTpM(TcsBslqfri9k3$#+4c^zmm>J=frH4Gm zR5#qBIIkh50#>V5ODvs;kjedO z#zZBWA2<`VTV82V7(F*i@43_THn|yYlyC!Xpq?&*()K`R9CAs(F-|0NTi$A`a9HR8 zs~(#_7)e~gFL<5OH;4b#GfUH)BqPRzqxl~f(-X#Xkw+6Ber0c29%=bdx(U>QyY$RR zP^LjEY|Y?HWG2=nW6`~1*Z{MKw zHt8`{8z3Hws^Kn|CzcKz=}Gk9)Ms0evdwwA>oW@iq0@mBh)o&Nt4oUvNva71g&0Yx z4?5KSJTQKLwaP3TH-Yqn{_5E*W_6EV7|$I)pu>pj-jX07adB&2Pn$tz?mwSWA_BiP z%DL%t-?+q_xjiUH2|v%6R*oMkbm-xGOfGAyNod#B6S*2%hqvzimb@wvVU!Z zg2@r-WTaHtJmomhP%J62&*lWaR~Mvgm2WAi)?A+4mDgD8Y(e-I*s$MCAh&Ug@iWGa z2DvGOQuP!YXpdb473_Jd>l0QpArVb5Y@ig2OvqS4(Su%<82ArOtY$&m)VjAX&?C+> zY}=bS6lsh!MFtZ8MtY;7wgFqhQ^JNEtdb@Ylagt;(%>frk0In z?Y2hT3qGhAcqY*NstSwJEH$Ot%m+eOD}fIUcf}R5kG>+fi1QDP^{09p7JhSLcsVtc z`yT+)v)PUuG*bpw3ZZrzXD&(-JbGCerW^)ABQGt6z9)FV8k$-rF2{t!R1;$2kf6$8h!qud!U_^87dIGeju!PG#rzws!y{^|RaG}|OjhOWvx{<>@!KTpElCRVl!jwxgztM$&hZS7yNtt0 zn^xVGF#R>6uDJcWKa#v$5hgwsqmp}gUmiMtJ@gUI&DC!<2`ij#v>=XYY}-p<1s1GA z5?Gbe392uCOGH7BYdyNW)tX&3y_rYRv`0XgXxvK%5Dcx5mpK(R8NL~8?Y_K$wjxf% zNlJNW2q-txppDf2-l1Q@RKTtizP=z=_wH-}ISLr1m4>WM+EtAf%h5S8xYC`S+&U#J znN#uN6h}kN`;M0t_npEug}l6kwc#hSv~v6Ld*h8NV%j z!58Q}!-B`lgCAiZ(><#1fN)~k>;m?_*@W!f&rIgdJrCeV790XErZ9Xu01;`M{UOM* zI&3JZ6fviO5@^(JOHUYP-kDUX3Cqf^$HNVViYv~0$k~gxf@eT7hwK%bC^f2Y8V9Z_ zM9dR_a1cXL>+)v(I^}RlK%l>cb7v%tvS?(@@D?GY4VSgfu{hA(FOi9JN4{QD=;aQC zv875I7crJqEr+$>yfXHdm8erOTS#9S()|o9N?kXIIM>2Jylr5q{z_l?C@zQhM}? zAlMuWS`&|!Ky;HN9NzbXuQEI>@Gu8O4;5g!h9cjw?Yh9Ea6< z-qe+rmeedZXejjwR#oT1Z%uQ>99V~e3LkY9<$jXfu`36$gw(hn?GhyqUqSF(YlhLS z#FUik#XVcNaan_51{L&XV2r5S!a9Q4I9GBeML$M<-Z}4Z3M14JH*8M_3|m!vGi0%? z*Q^?%00(RiY(5xF@K~_GjiW&3?)qFyaH%ArQEV~JoI*7;dv?J~N)PG=(-Z=e$XnJV z={N*cXC?;|7oo;YD&olPxS+fQkwZ3w`HHzgl1Otz<+yPkb`0&ZD|FsZapx& zbFa%9qu!>`%o8bXIfdpi8YQmKYJo-)(%WgZlKG;nnVPBgMHx`Y!~)};HqO`wEg(S< zZ6<0~LWXLk(`{23-<~Xq1hb@2i{{4N`_%c$;)-K=7j0I_GOd64;MUnULgaRv9Qn8t zB=k0cYyp70E1Z9F6>KkfXTgh8F9)wmmIj}+`Uu*BCy72ZoFu~)Xf0@T0ztMnh7gy& zsg$MO3t^j0iz%20bq5WV0%R1UiVyL_E599j)oCh_OkgV-q_-8LNrTP%;1Q7WL-x|> zFZ{Gz6D1MU*OcolfU~UHPp)~P`*k}^gNgxn+Y+07tG~BrYO!~(f1N)=2*8GWiLb= z3=9flBPf^{XmD8t1WH@NcvIJuFqvG0zM7p|)!5YjV!Z!_9_4gGYh;D`0~2e0EI|5L z)VbXj{}^c*48&ARIYc^o%pNh(f`Y0|i6&h-ig=I^){9+ee5h6TZn}%$s{AWm%0lu8 zk}HPo>yu!Vo+ZrbLJS{y>BpD&5NrrB8_*B-1LTYcgialu2cSkX!L4M&d`A z0xNrIyE}~vTK&%OvkB%aH^?mNVG8ge5bV382UUdid!}J=(Rko&Yidho0Ne0FuvCuo zkVa%)z_cpexC8{+&vKV{;lN1L^HqwGjA5u8gx-n~yEMJ%;SCPdxGKZ#3x#LF{}?Yj zSd9VavPxTPZ7# z?IzLd9kxei4=EfApY1vZ`9{0C1D>p#Div{JympNU@SFE6eop;w5obNTMS+fMM&Uu{ ztDlvvRjyO$(vK`-kdlr;(BO8WCNKA&=?v(jM-KS@=KfTQ8-s`x) zK@o7Lt=}{{e=OJ)NL1t-_L?IK4{^h`7Z1Mdm`Bz@<5&uzCxx2!aK7h@H8IY3Y1FB`2%Ru4 zAG)`9xY0_^;%9dP-``%mJY6A8g&gQgOEwFoSFvnErc_ANXw;-sOen>-{$XPJci(7t zxIW;&Lb7rl$moPLN%;|l7L70U_8jl@k9GG1y_OrC$~ZAWhbA=$D|MDIx1mDJ-Jsg4 zz`!F>bO_IGP|Mf(tjG20Hh?0tz+dRk^Wt$`5-pSR4^WHZ?sjjt2Jxfuw{9><9RhMg zG4q2vL|QMdR#~uWfg+B|t#n<3mK67c2YiL)vCT0{y#|bCY*-7^o>+fZrg3Wq1%l^D zVvBm8me8BdG$5FpT|I3AqhEh0k8guzAeMVzfeU{cR>uTwvquF+-3JO44mo z#AGfmhxv*BJC;aUJEaDTL72Y|mdTgHqmpg6hK6N%Lg^?ZQ2C-DZd+Ie&-~5lD$4dR zmGovx5a8C!q4P;&F0h7>3>!noC#A^crLZ8$3nm6PL3G$!m+Y{y%U#%7)^Q40-n~q( zjlts=Ri+G%0CYDM7(mj_h(Mo*q~S0|4deehw4I2AO*Cn=rwe`HMUYy-xl)y2Ml{~$ zE&Oy368qQDde?tyTD2>KMhVKM&~2|<3q=iKkUT9-iWO8^H7M9d(6}!Xe80suQYU_H zf?5-nlmn7ORKovJ_c{U z2_wMQJ80!-^K?fZWi?DUwJW^5R#PY8m?zq&r2HO*kBI~_bmM523NVz0Ixs6O0EXu4#o$I>^5qiyr1ALE2wq*w4V4hLb zx0=>?f0R}x?lwR2>6Ebvr<~Qjxhf6rd_FyA2@Z zwmj{TeSSD(lw&m8J;Ifem4SBFL=(y@<63s zg$BXbo3!?b$JBsVZ9r>xi0XfcdVHHG@R5=P2DOMm;3iO_{xm;S>01-i)8d|Tetan84=0)}nuCv^blqiFaLkEPKjg;;%p3F3A0ku82c%06OE@Icj5e)7s8Iwg zX5>;7nC*$@Ac~1s##IPp))EKTlxFg!OxXnfXW5oKw1&j!<+CqSca>GoM*;UvPxl71 z*(e*fY}ts^ZOx1xZ{^}Br5Z)Eg2~8MqD@2iEWp!v4)f3ravB~Hfo#CVkjH6=1aBN0 zMoEGtsh-*9vlW~m8*8+o^F5huS&x4Jzq0rm@*YWcSj!SDOX-D{^JVCNUEuBcs>`oP zf(u*R!5`G-&L$8v%bA#oJ6j@`HOkcEhsZ{TaZ2lKl2Bs8Hq66)xC_@1rUP@C%mtiH zU5aHbm!lCbOBN`?Tn506@Vtt7mdV40lDFID^%{-mUy9^a#^BR>?CE~1JnckFUKZ+> zm+q)c=A-Slwan#CW<+m(GB*g_<%a>DUpa}sv+r$M43?eDF^r*(H6B=)!(etqU||Jy zG1`K-1gH!RpNmzfWAfOL(+1ot6)^81EsOZ{QrKDp=Wg9BXv8p$4WvK zv(((e)I?xGLa3)`kGuZ=b$8`2Z=VLxI}3c$Pg#~PJ~D$JnwY7_q{47wG*TQlU6Vvo z^?6Sxk>b%1U)OkV5D#yJVaE)+5f+&6$9Jb}?s6oKCVCP*{cYR?Gv&b=<6v47!|wvH zV2-6nh_raY&rctwEPK{MXM$k$lyXmv<3X5Qga-*V)f$4sbcBY)oF@dyKoO=?EU5)C zR$@j>oAOq8)AwdUy>`3^*&_>v+>*@{wW$cXR?@kl$rN%nOAn*(LPVUS+_7e$Qd#A7 zm9Y34z>HxR9;ZImNm8u?2}zGG?NsLDhGlgKuySD5+#SUTh$v4r`K9gk3DrlW<{a}x zGA`I}<>1)zc81E~4t(yeZDHBV9eCA%4LdPSg4Y6CybS{%+77 z+sPkQ$q4;QAY?1DXufs?X48VEXv9`mwqH`@kT5K_yKiYy=^_ydgujFIx1EGU927%V zkC-=luW8qg#p}l#lKQM){_}HgW6!d~bgI?Vw18y?Rlyu$1KXDLvm^iH3(yubHBwYj z_p5UE-1!02j<0&j#=%vFFti8YYd5rGSGmmNxr2ivTLTVGBLd7*#g{1*GCN>z!{oWo3hU8f_f>ZvKfgGU^vkfF^V)gR zVC2=;utjBmmh>vA0}i*XAt(e8dVzrPu|&H@{@b9{!pR&Vy3e->PNT;Z<%Zk6XDy1U z_s}FXS(llkW~QI`kN!5VQC#=!pyGMmP1b}#wu)jsTIJ=F4oQ)e`h{BSOFUPBsWb-D zEC1S78fyfxEBadlQ}tp zHFB<^9*ylvj!PMMS_ z(fxvZG^Uq)hnXXi*dmyzT*X=RWtHl&wQL2C{c7r1&pD6xI)+|07nExAQ!_kIT=5j2 zX>0_{QyUfW#CJa1_H^&xk?`y0>J^o0-I8Pcf?04L`a(-~^$(CqcPz6lOtRcjPmGHT z260i65$V57T^>BsZB>ZF7Twt@Z94U7R`fuDcYKZ3?lQg`&g&|45qrAwsr4nlV&Pl1 zaJ0Q+wjIO!H;eP0rz%@Z8{%5Hy!FEob2{sZx%z!ovTay<<5#9jGDxaU3v})>ntP0f zrY^nEhDPmDzCdK_Gs~D+SICktPtN7Kweg^2BaxhefVe`M9vw=ypU#&wPf3Ns&S75r zlC!==rlAQH2MPLW-dxp&Mhb6rsBdUiC0mmgMCn-wgz?UcM=BDNkM*1ujZezc8q%q) zmraz>xo?tP?tfelW(I4KN$b<{DFFSxHkTH!o!Adv3Fk`)E9(mSU9AMGy&Gut^wh+7 z-0AAGppb~^70Q6o^5V+KX@MrSwz?{VaYx#lQkvPx84V|osJKZ%6D7mvdxZT+11eceK&OUq(Q(=vRCdmW z843fc)I1y}+dTKQXL&p1Hk7x_z_9rm0(J7TP5{jx1v75WHSO%`QYm`Hj@k>`BIYd- ziHycCeO;TK(?0pd8POh(h{ii|>}dQS+j#%H|&W zW}|fv50cayJOxlR{|(-*e=h8{GuF<>GKYBme5VLR{36m)E0X{s=JBLXL&rxLjUX9{ zVHMb7wt$B!u!P&+$D!1P|EB9I1QJ|it+i(7vc$9&zkH^qj&JwF2F@kPpu02Jp=Kij zh{7Ed9zBIt$l0|PCKKTk6{#{>J)&;+(`GSl$v}nADjcQoeN2B^5=7RX4E)hz9+L!X z2!OSsWL9egh~q)jVDMz&(j_;*3pclgAW>8umC|4za^ZxXCJ39yz?~HgCK~Tgi4cTV zy`hkdr&SzDciCiuc=|pmX}y+Yn#aOB&?x1tq*EPmb9MFdms}pN^QM~*^ey+Bclu!wqRU4zx2U_=RCT9ux$AM^*pXX4bctH)w;NE zjO+Ngfz2lK1ItP&*OkdQOz#Fg2P+rMeS zC*KyKF5k3!>PlDkIkYaDyY{!&q1*-7g-^Npe85ZfwMOc`^T>!*86bi(+-r8jkz z{kfJ{EoWm~{#* z%mP8_yHJV*rwe@TQJy6^xhHvVTi7+%mNtD8=CP?UUWLM$acPxd<7C?@t5!NF+&Q*a znBQ5-q*KZi^9Is;Yma&oazDwwoSTf!<8-v%P|C7eL~`z_nBDef(W8voJO6`M=5K|$ z!z;Ha=6>+`hR$D>fF-XaApb0JudC?=)oZxngkA37+so?U2Zblk(GzcakMi3a&aQ&lPwK+D1{Gj@>Y$C}2Ttj&gj0@}_omxsf=_RzWW;K?w>r<*G=E+xqQu$ITgH|zx zG7@}6Drqp(D8dzx*~F4!kMxpJ9SUagoe47vl?|~PmNltp$JFUqC`-jEj6w?XX>OMb zc&Md6!049eW%h+KDHOy)ay+xL$Rdmez9$RGI4a=a`k|^+##2UzU>1vpj6c7rWU6VD zsaiG-D-+g8l2z1DU2?}LS8fwYMH!ViH3Fj~MUvLBRML3ZizsP?QjkbR984zAdZknn z!=;+3B$gXV#ao+&>d7TO4h@T#j!dywepB#eq2MDKqe@w)T$#pQ6>;kFm1UDErL`gj zI?pOfLAF5B3CXl$9aRU|WXM6hbq9*2HBdCt-?LN;G8zLJ6$c+xpfy{PP=B2&*0u6b zDOH5-;UspFaf^^DFGRjh(qyc398|GVI*m`?WTGhKdkV*DH=6tc8HI` z%BWQC>y;}qwR;u6=m#XTPJjF;DZaYh#xhb%siTIF7@?s3*uNE){R@s1A* ztGNm#h`_|xGxke~!h2r1YuQ07w%g%^lgyaOlqA4;j2iX7wOceS3e`MH(8y?L?t>giA`MMlaRzD1&%6egUANlRjtAwHKAl` zcBMVH%3kGCGS>o7Y|SB;5BJ-JpQqM#y@(kKK>lC8z{DvIrtl5aMJm&j+8!b|B>J1Js9{ITa`!6cWkiJ?d)F%{7yi`e9Z*d!n(cZHbT zjj>6;EHwuoPC3NM!axMh2B z*DracO66Fj@5W3`ytd9xZEnnGaF_Wnp@kLVzK|CFSA3l{wUpmjzJ_+H*Rl9p05GQ-0X708 z1B5gLAO(y(2Z}5kH%2w=m@fj(11L1l@7FMjx-3Qk#sB{yxp6gD1B*o}47*4Y5)vb% z#9>8nAxXs?sQaCl$60VY;ox#oYQNV#)x$}texLr3*R1u++NY^LG`N(`={iD^S?J+u zy5@b^-E1ulK|F|uqEUXghZe{QvVTC8ZQp*7 z9*Z_7K{$;ez5y`*bLk+^@|E}qLr@MD00VT8e=jgrYSL}OOu0?zne5%x-VPr4h};;Z zC~(ui03Ayh+oL(XYx%DzXE%vJ+4=-y!k5Fo&~0^&G8M9Af>7Z`gcYgk{6Ek11fvKGvbW;t-vjIF+-hPT?b znbMV}8P@9RXPmcZFnx`>k!}_Y`Vso!>ifE8R@+GpuA~DfhBem38ksLt1zZ^#SSU^m zK<8PM0ooMhowUD|mwCIs2$BUd=v#jZI9s_G0XptR#j+iCT_~-J?x4%AN0n~P-nsBy z-@j^?R8rpwmh^hn5=ZD+I^Xa4TDp6392@rWtq9E1nrEpob0@_J&)v4^HPlc^LitdH4|2~%Zeq1B|4OeG7UnL{UEZAuYW3XM{x zLUL9RT0E#1E;E@*e8NpgQa3-FHM*KJc{r#kL{=+wWCC!a0(zqn^MYX_+qol29)?cs znF6Oq12aazS6et@b#gYSang8o!||YV;f~4cSSQ?=CM5|;7V3jvK72$x8>+ej&!$Kr zn==`WOj7_@CnF`3%M)Vs5@V8*ab|MXzd03(mZM_RVnx#L0~F!S4s+#!g~s)T7^646 zr#5#-;)jAYm;j)t3@?T@l1nQvQJz65FW~gjBce>$=#W8)uF_hUh9}vmI2y|P6c7<7 z67O*oOo{0hh8PTqS_(s@I;Wfu`%g~+z2wDI86ae!VM-WoxX?~&YLOtUh&7K=AvDRh zmc0S_EQuJa9?&-ZXQOLNwt=}|DGc7Uq%+uGaV!*TE&D2>sGUN8s6zrSqM)LoV_*uz z5+PEQXfa~NiI*Tz683Ojf336f6)5};beaKiARq!-Nd5jg+FrL(=-1UK04S(v=opv+ zu|$XzC0dMFapEONl!Sc`lr`(3B*k8tE{581_ujKG6O?a81JrOcm$h^d5utey0Xj=M zq>!E@aA;}t06-RSdpR!qAMXMK794m8AcP1~5JL%+LK&1p1*B04b#iKYW_E6VVR31B zWpyo^%NL5Ja-~|UH<~RBCrFBBSdJIO^^MJ~?VVjoR#Z*j+dnuwIzBl)JHNQRf&?JK z6wR<4FNl(?sG4rVPSPwd%BpVmhvVt&;_Bw^;pye=BOcP(a-DG7zoUKZ%76rn{!ikt0Gk_3*gFsjN=Cx13*OT>@=jc(MnDS zy>&HE-blk$BLFaf1+pvxvYZYE=qbk$0A=LV;2DpYDrKZpwQJNO*4dQp*69a+AQ3@d z0Y+&VDn&evSg;I70N(RHR=SWr#si4L8~N|>|0;n0mIELB280l8_e6VXIbC%J(DlM^ zAFzy5sX*I&_V#9A1xroJ)RJMMb?i=xI{(mM4UN{a8)@oc884uk1T`e7g=2y?W>7Pe zx>*!VrerE*)2NtE(G*(d(KMHyW%MnFx6pcvZLox{rF1N+p=#FchSPLw7Utst*`a$( z$O5V>#zM57Y@~@mfHZ^1N)g}g{E%qC9Qg=@BtBh=Wq>DvN@PKKP^lc~L_lTopkD!% zD*!VeP=!L$H7G4fusKkrqzrzDDuYmxQ~+=s0JQ_Ef$anCJHQ_c*gOChlbm+9njr=z z3koa=q!2}EhOMXD*gidtS6xmWr$l*D-mv2*xYtnL4NY3kRTIxa@Lq59flbdsaS09%#Ru1iPF)) zO|GEd-^a?<--$Qoz&WCx?FuWcUBrqDx?j`4DKa=E1wGA+UqJrwC_2fRS4%-Iq*LR@s(Y*M;kaGKBI-MS{qsWO8mWa zaQwOa*?s)kX)Tug9S3N5#Ry?cjsWg*Q(YGXX4^37>3*jVqTZWzK)PZE=cQvgSN-*m z_N;C8LOlqY${E7A=sLuyRe+sL$IC4TiQ{mzqnY~ZE5R{?>9~NA`206!YeYKVox*3qPm?N#&Y~} zKqq=?HOcxK&|-y+87E zm;ag}dv^-74?Fg3;8{q=NyjXhn%KKgdS%$~@*$A?K1@7l+qS*=2h(J8f^cE8>pOi* zvb%jEcIRL9F}G@qw-Q(T66?&f=;Q?3%X4B~=HduO4vW1t7d9L`jt)k3kH0Plc;JJd?O-jSEyPvQ@|A71l7iMp0OX??o4dw4+YJ(bTsizys-97_#%Y+gJ{ z9j!fZxMSvWt#(&HBp`#fkI_(fT#W^T^^NiZc}s2)uFtCm}EEFD|W@M!XdBf zo9<|?Q^#-U&1fjmKab=QYrbtxv6D}I-}q<=<6wgyX2YrVUr`i~nsdT9+ng%^*-Ldl z*K@9|2QFQ%`Sj;6W!;zWE)ZT^;Os0uSPZf^>pW78ylAsQ9mAa6-J_h%0;kYvX{KPd zeyBox@WI@~N7YBwME}dN_MQRnU2IU52ZokJK)V0r_q88JSN4^?F`^OzS-5LQOtIQh z=A9=x)F3tC;8@NAr(DjFjY}mrEK%EH%*ezN=Ym~19W!3A&X~j)p0S!eyTSRh5gqAm zFx{NEsrRngeG;*U-g|l%x2(4B;@5-eiGYwJO0l?7)1xw|eSxhxdUU;PDdi+=vypXs z)*Z2(>9rFyog+&Yl6OffK05u$#}K9pL-Ebf)EaTp1)ed5Jgp2{n_!X&D8P(Gh`HRbB+$NmG&bWn@Ofbm=oX5_LFacYzGlcM7qlOkwFP^0p zAD(_zZS@DId4CjCf|V>D0{B21s7f9PJ`kKoh}BlaVL^fsO}FGN(Dd+#>%yj+`_XE2 zi&0E4cJxuvNPZ)*H9AMv%a*((VVjMt+q3RC>YY&mP0x`fb8sw~;A$`-5QYjvVZi2h z!W*At1|~QO|FDt?CYb;;oFov2iUlL7zBDMth|j(SLqE=OQxc(M)YdD02fm<1(8dM$ zm6c2|$pqkW0V7PnS82gDy%&OkBMN{CSi#2oS_&KQq>Hf1EEDyYqB zuEw0P=ldatUQ$^9;5Q{0p1s}*_yai|6-B--A{*>uCj%oIiD-gBjx&|*v`yeNU#Z3w zT)`Dw!IfGonLd)^7a&F7MG(-IVspu3f!+;gVS(p?5qrj-d!ooqA`gP&Ol3IjG=F+v zyLx`qgIzgRGQg<1k?{K4(@q-x{wmF%&g?GF4-V5VCK{1ZJhDoc=F!!tJ?f;%N!j!9 z^uH64QUSNZcYy#xpn)6*K!bs-yrITvL>Dezx_ss8ZL$kjwc%tmG`R zs0vk_($uLzozx}G>6RYrsj)K7hHL^%h>0;xX1h6P?ihg)ns?@h#n=*?vqsj&x>;|# z#qPB{+i#EA^LE-^v-j)G#zm4jaOO@I-hyyc_xl2}g0$;!*5uDNcY z-;kkV1X0)vVq2jf!Ja@jUOC~_q%0+=oLzyo%;X?j`O-H?y~c+@mjsh>lWnmYJ~!L# zGnw0Kr4VEI^Uc?P>g&|h!7?u5WC@LS)roAu2j)#rns>HF^ayrD6k=qIk>#2*u-{() zi?W)knKcBFO!nSMg!gw zRE3ksZ_ODSt~m*-Hs7QB=N<%QFctM5X%N@DP8~bt20&^`{^tUV|FNW`qR{5j)FH2C zO!;-NR+M{jZu^hY2yFpXg@+3`Zzce@)nH}P{P3sNfA}7`U8p4_)KgskK36XaK|MU* zP+$1ll?XkAOCz)gxzX4!XMV#THUi6J?P2W!oEN=l+=QEaV&`9IV(HLmk6x1=5PF>) zWh+K{eCoC%brAgfaO(RXpI6>`udMuV7eQ2U)SY; zrfdZGaetn>hAtVFrchrp@0Y%l#6{s+>^`pJ>Iu-&YA{w!oEmRvb;M7+fyek-8v*vD zY*;GJVmN=kldkOx;$O}bE_MFJAt zTn#T90fY@+w@3A~qDeQ5whQ%Yq?J{9*R-dn+y)3g{^HR*i$1L(C7IJr^K7>)BJ}GV z&)@q-&#K51xORmL>IW#BZEr`95+3aEWfZILN7loFr}$3koPpYEBqiEc8Iql?f1aon zF`+~2Julz>gsU~*{*|pUx4#CGL4&q$CiIh?yL#ij5xtxMgU>)qd%{${OSYf6)^6wo zpfYymBa18D4K*_KQG@{jm2pL_{V*h;_5oAr!566a-zQS7di~Mk*LejuCP%zQC7?J% zA^Pgqu8UZozi4-T^N7u0oqVyxQdRf+qp;C?+`Z130M$*5KiHbzEQWUyezVn`66sYh zCV1%?JS|RJ!v45YmlWWPxV!$aBNRN#{V877-UyyzGYcY>D<=I;kl-U9xKh$8uMm?w zI4L_S&Wa3gd#K*^D&K3HLxgMI&EVLYv69ihpM6~`{_=If*|Q%qYGEo|&}Px(05^4* zc;R=mM7(gA+FM@t3`B~-(Hdj6wnEk0S+>%y#4?tmZ7ad`jCmtjr7DII0GYy1DdA%9CB)=35I40?WFqtWMObhOL6rwHJ@2+q#u@`ab0lm0au%Tk-V9 zR3=j6eTUY&C+SBZoZpAf7w_Jmy8ZX>rCL!b38ePc!(k7{g)1L8Jq@cq)t$4UqO6Xk zaWCqR_5Q(A7;;gZtBFToI3eMQbfgprA zk5>~cy?0aK@d;FrLiW>|b5V-HATW*^)$i7u0Da{19ot)P7>#d@2 z0y@K>8>{GiWvkuE*mKSUMch^=p*lUFu;RhTpS)(Xk1p=syl-#E7(_VWz*=xco9ho_ zu{CV7ZPPY2e>ujVlr}wx3=gMvx=L79kqCPpxS0UFW`@N^71``M={WA$N=-=>gK_TD z7yrXT(^cTyrQ_vihIgUl8(FhR&TV7k+bvKR}#aWyc(9PB)g|G1~eTs?}H&!Kx=a@eD83NYa`b(DMBO9s+6% z*j$)BwEbYzpdJH;b!(4}%=nMVWgVi{6LWJj*c?A2H`h}Usaw;!2i&eN1Qs!1k3P4& z^HCBSC3pGBMHqhPo$Gq-vs?9|G}O-{68<3ng3SDdJ4W}hY3z2cZv2zCIe}0`xyq4y zTNb?g()sff_f}6|g*EN^)|I^)WUQ(tt8I{65aVn1Cpe)-N5yJHTBA=OslLBOK|LEv zv_^-w`;3#B@!PQH-kR3CbvBdVK!hbvH1p^DRX&F-O^d?+lc;yB+%Gyhv6uk$g|#w= z3&@)`j}kG_I%N z0)q4+PG6@-ZhGgp!&x+A0Y3zb<~{LS`@sv%)!%_bwktka1B;SoGRyItw6ahTw)Nz3 zhmf^s5(63V7EKq)Sljv)bj~6PuUk(8_F-5fM=C%ZxB*R*%&zqX;kZo2xtZDtiJva^1kKM4e2(gQ#a4^#|u-*0A#N6tS;%s}+VCYsGUEFX$uGG{)=3 ziQ#(*ete*4r&k)*yG66xLt?)v6()?A%-h{KJv-HALUTrM@!hg>w`@&W1@ym1w-uua z)0VUBfpD@~X0h1_v>mhFl~PY#5K+I5s_TPlpH4UN|1F#TKpzKm|BQba!?bL6htuWu zczwN4k)ezUlcr3YF>9`-c?%Y!ELpZ<)taoFyn>>VvPy!gn!1Lj77UJP6Ny4&Qnhh- z0@1n+o3?D*v8#j3M^{hZz|hFpq~rc6n3{EIZeeL6uES zGy3djve+Chk1r64#1g4Yu28Df8Zdt$k{LN)95f9BQj@eymN_Jll9*Z&D#)RL5)!2- zM71JdB-bWs*$M|Fkdhc#7EqEDS&=3dkb@-X+C5~e1W-T<8GBJwCf49HA4DM|NnN#C zRJc~;M21WO2j6H|NfNs1EJ|F#zBS}#j}NOe$iqKeVPDC)Y(D~Gd{IzG9!aE;wSg+~ zD58v{ts?2!3J)ZamRMO9QI=F$k@q7a!7z|S5ou(RM|H(I3{XZIRn(D0cEvoLqKG8Q zsIEju(v`5tcjQg2izWz(_@rDyHV8fRyo)7naS%-igSF!SZZUk&u+k*A2u@`^xxwXx ua!F>?2cTn^pnlMZ4U!)WV|BJO`3i8+e^p#BI(SBn8d`K=C*E!A!=n3AaNO5oPP612JqI07Uscvj6}8 zPe@M25N5(=YV}?uS(G(!&XYt-#^lTlm7!<_=i13Na0SzFiA;utU6t5ym1#hRJVc3f z;2VXc=b}UwluF_J6_vhF{+(M>o`3P^%${hJvwC$LzwIoW11zM(TGB)YJ#Pnv$M8 zYC(tQ6nXNc7WX)5wn@F5fo&syl9Lw-;-~tv2Ty>OWf|kj0Yb@kpv*21OLhv3E)b;b zr2Q$o$l>}Y)(`yL{?AZCKt)FjqjJ!r##r2qwnHOA;|jKN@p)QB{(kcWsc6{AtV zUtbv*)h~)?yat{pm!a=V+FO^-4T!Oa@7YdApbrm}yh&$40W=5&(8dB=g%b2%E7ujd zHSf=C5;+yeaVy+nv0w!H76vB}M$<=nh4z~!)mH!`9I=?hJJFtwezSMyvVmm=0#DVE z6Z4m3E2MQ&bNNz1Dk8t->DNN%&+a7zQX*u9t*%#lP+@f+5#H_0JAl^BW z(i`h{XBKJzizPr1JP`mFLE;R}8Hzk--W!`;_CCMx z!^`52KQb=OK8-#JK8xPI_Bwm_c795)MkQ9Y@-i$v-J>~$#9|~o|NUk0t22RrHPG;g zjN*oTt7&O6Z^*bHQEjkQ){mb$8~SprbzR{0F^oxyFt0e(@yiP5SX*vmDXQ{Iz#&l+ z)eO*b+n>|FP8nvA@Tuz1+oP&Jat? zmrzQbGmJ5J9fx{7vB4oOZS&x;cwvMkBmV_kQyIn+VMLTDB2EgCktK4Ph-NLsAVY{@ z#t`F-BPN(YOfrp_VGc3Rd}5)6#KyKDwz563lii3t>`xr%5aKXL6URD%ILYZmNr~um zCULfNiSu1XT;XcsTGtadx`VjOUBtZ}ARh84@r37y7ra2cv=Cb>$#Wy(x(Fm6hqf%(J={$scbHEGjc2%fim>**zCaUcW&KTc)QQS`P^Q5mF?#hom8Xh+XzxROk`P zszb^RazoTmV#sN#>_X-rbg&K({1V6mSy1`r2^R#MASno*y1#<*CteN+HVKlayf;`^ zE-Ao1cz%snm+b{i`AuI^mhah9PVh_!DD#6CS^>V52hGR$4UeDbQEmlbgWtI>SL;M$ zo&w-9rSpKJJqP0Hg4@HPj`a8sxb1G8BTN<6u79TOgjHF&l})kIiXR}r-tpku3>#OL z4!B*%mpRlbX_T*#^|n+S1F!=v5w!UXKoo!>C47Rj?|Pn$irU*!VnEg00YD=^Zb`<~ z*8ttetK{&yC17mG-XE~BwXjV6ZpH%aHlQ`$;mra^&jHM43>_zCzegQ6bV^%*&qMSF zbYX~9K{HgBgATY#(u}h%fk)|MS95yU z`tyQI-=^yt3;oNn$XNo=sl2v?EqT`*8;3g(;yum=xqVX%#=HT>5|d)z#W zdCb+)TvY(rk&a}GxUG_wA7-@|)kq+(+G@Q+Z@0F6gYa#i=L7ci{U5+$`q+U_k~GCl zNv6fko7j$Lg&5iFI{*ygdA-=h|2($w9!$Z`C$~(BNh@zzUR#zexQ5X{goPrnql6!s zB9)3Bn%%5@R|ajd zp9U`vb`(o~$RGC;lx$z}2|vI3K%3=+c>e!nXm>e88a2DMXZIry2g)sA2;l^HB%olf((~2 z#c^3Iu_tq@3?v@M`*n(X@8n9$GeE*)<4p6bt?^)7HWGRxdJc@BB!wiKFEYZTbHw=V zXhe~bR<0L(15d)W`RL`0xiu9@lv!28a(-H;Fc<;0e$lsNYMTH(d%MX#0!ABGLK>gO z3TwSqx^>2J9kFxg%&P*d)q zrTCy%bBIRKz}3<8c`g&~2h<G=0s2 z4gYrpVqYErV~hZ%+}^6b#9JxOze<%q3&aP6P{f@O5F)Tk9Op30aB0Z{h_(OO#KF!u zT4LjJD_T3WlWqLA&YE}Q&P}%(bIAn>#u6$_xJXf=#fTLrUV;}&yd+VoOu35r4gmPT zhk7iX?_Cp_=Ys(s4H_~`ZDa^Ay95w_0fb@kqB(wDH!z0AO)LSU@j1jv>w%p-Ko33g zkAKmJ0Mko=T9`{FN)QOf5-Lo%NKvB2h!rPZf)`4>BvGnNxeBLKdlDjRZGq@K!FEUm z1&hqK7gqVfUzi42KG$1Ag$l$hw=$^@d$CXr1D`Nxpy}VmvtSyvi?4H?-ArAgUoS|Q zxtOYt$zpT3>++%cm%_t3nvh;s{}PBKGGzyRhwlr}_(4c=wzI2u>Peh!>|#kDCV)Lh zkWKdrV$U}DKaF7F;1M8%Fd~Q|hBy*PB84(pFfewRon6O~O zfeR0m4EP8TB0`J=DVfN~LQXb09YLDWQ}y%Bet&1}&B7s6tOQH5jO+ z4kPt6&`1+2X{Lo%+Gxi_2c2}$O%J{F(a!*btYS55Sj#%rGsFfqvWd-XVVJFq@CBo6 zV~p*Lvx5mHF|(6h>}HBR?3I=@8M5TaQ=mwRG8L-SsMDZHi#8p)^Z)>XfI&dPz#$-^ zpkZL);OR49$cQl$rp%bLV9AO#8@BA&bKuB{GZ(Jhxbxu2i#H#>{P-gvA|a!oqM>78 zVqxRp0`dxj#o-AE5hg;E7;zFLNs*?C4Ao?*AxABB)I+{SkSDAG$d!qeZ)Hx)DEN^K z$W111G^MU-OC?)-(clHGCRFLkWEvR3A^d)`iSS{UN+(aFs4C%Q zUjL0kn%u(`bRJwwZ@|^Gam{O2CUHrsTqkiXbpT=wvBr!o z|C|0pb68Uhu;DL&3E%uQ@b!-%iSrqx2fqFtK!`p!!`Dp(fF|ky+;{i|=-0tFpS0A{ zN+-Q)RI64oTmMqE7ytyE3e8DyoW_z)RxGxHGcBhJkx;7$yLMLKIit8?c@Vguc~RiV zd}zF>{F(e1@IqmHK^)-%AtqwcQai;e#H++95!4bil5|oGlJ!#UA#TzfQC+aSaWtY= zu)U1$O(Jg-T0-D0av#d_0h#v|`%Ud;wc@L zqkB%6(?uy+=mn0Gc}`L1LJcl9+)YNhS;3RqJYzGjLcK2E|0sP*>>b&9!j+bFt|6{B z+oLx38i{x1SgOLeO7$xDjXHnO`B9}GRQZYC&;GQAfHZ^1iVz*=b?ghl#@HN$B)^6f zl>wFj#biOFp|~9A5-1@LS_LH)fY}L3DO6mH(g}mjLsf~G{Y6xUP(}9v)BrG(!F`Cf zBRvt>3jPiN7E>wxS}{r@1^W_J6exBUrgcZeP`VDrQm0}?8uN&rqK`eH(5UH{YJ1n( znb9_<>t8AM>lWz`+YfKwXmN4uS#mHC%JZ{0gh5!s6_KN(4ePcjvWjN5P?Ajkc_b8d}=QNkh+?;9`;(Gi~%3L&K>VQ>Sy)MV&s@ z;HFO07Hf=d$mrwvB)o5=TihBqy^pT#8N z&YAmIl6VyAI~~d5v&D#h_~8rY&%W1PD*p5p6u$fsu?9@m+Tx`R#dEAH_^}80NkcB* z(TmmzfDQ&n*wiOVd_sto$e+*cW~SOJYwD0dH&_clUa1Yx%*vOJx`zGozAAp ze1R&{r)L|6Ua}~z1ZmR=IIhjVaHmIcdbSZA=BjW6N zF7Zkw;PSZAltEe@J|q7>!1@VU%xBHC>%XmovYbF#8Nsq6)CDmI8oUEZ_~=RER~bjQ z)8l5X)4ot3+I;l2mx{KSQylIv8@))_VM#MY4uyr0cSEPmLea4FV0qa%cuWhZ{xU`K zM-z^%fO~_U3g9~h=MqeoWkDJsW*`?Gu?|lG9Y$0F)=67n`jDHvE z3w~4<|7hHOFFgi1>TZ4F`uCFe#xeU*-UbW;471hw>n zoNk6g#?#OS^!brSqAYk0z)Q|Yw6$Jwni|`%U1%!!nii}alRs1u5xb{U0WB=MFGiQd z3{>Yi{OhN%^jzr&i=+9NI49+aEWLu9t$$+< zyAKl#8UJJ8X@<7EZfm-OooeTe_R=<;u-Z?F+we1Y8i6XPgcx!^0{&ze)que&@rz?P zJ-f4OiFT`qA9LdQCkxt55||oSgy~D{3XterOAV~np-+!|c)L-oVlsv) ztwk4Wc6*%el5*XSwS#1N%r@I~xZ2T$bP=3=&6u`4O?xW$3?u0I`*5!9dg-hb4=~V! z-hn4>&g%CpM_H?%CRq!0)l}KQ>T?oq6ha8ZFS<&m7lT}HIhDx@D)l$&^8{~gh}ols z9CV3m_NYk^$1~|sBZbT84$*H81@j%ye&si0~}-)ckH|e*DW2;O=j^ny<+-J!dlbg;`|BzKpYdi9#8{YL zI=VbpW+TWLZm&O>4hryQi&mN#cG&@E%a)|s`J5&nwp}SO{*c%-;{MZLcRI#ZKJ5Vd z0fAKT?E&Cq8lxosZ$fE)v&oD4%0dVd?6k$sZsv#CZmz|iY55er&nO$VmdKXK_1pF- z%Qin-R~PuqjQrU;F)h&7>=J1@<2TcH4KZH5K>rQoG&SsHj^gOR*Z?~JRL+defRIu& zM*&_LXG_tHPb`VR!b%#WcBPA3B8}kYvo$?>bX87RSDB`lmyjB@fU0&N`@SwJ^eznd zN}h!;VTf4_X8c!DaIEL1u4TIJaM)!6P055JTd=g%{DC5b04uPxg4C~HSRmXpn24YF z8@v_D8okNU~1|6X^N=OdO-DLIM;Kgu#i zxKfZ5oJ5R4ozIi9WlniX{=Aa=-RNoiF2>5@e;N8X$g|pWyz91{BinX7J@vrlI62|> zjk5zR>s`mY?_{wucjx{-OFh%-cf}8l`nIQO$HBi&If=rfeB+pN=eO0 zuDU-@S<^ibOv{zJ^$P@DWm@CZO-1MSd$sE0ppemGmj1@a@n^tGq35*llF)b>c6XseZ!kLu?dAT?REnLrU0(ELYDW6Q>95XT=sGNw z?QQ)5efLG#^*hCsi=F&7-j$D`6lX;n3JDy{-;7H=Qo(k%BFV;o3+QkwGH1HPBQBqi zvo0GDS4%|dZfVvyA9HXCZ~)NZLfXnatEE*QYP-$!K$yEWM*%uzQVM)No~EUQn4te2rZvh7_j8L0g0WPei?)IF&FadDK2z1GZfUuAAyd*lAvJcKH29Pe zD!#7n?E1e!^=w-r*1(&YY&13QGb}5TU<>O^=Cs^35BlQT9R;1nBUC=Cda^8QGXv7T zX})68tj|=lrZ<%tT1JhmlMs#VzO2{%G(BGM`wY4zcYvUC?wyd;i%*`TsV{xB|(Vic8ArQy+Tns+bJWgpg*TjHgrtTujq|D zH1q?{`-k;4$Ab{pEPSqbU_YRjAgOS*gA^o^M93 zwyJK^T2*DnQY`Vo9pUBeeY*}=$1wx&G)H;-6ZDCSDGEzVUO)p+k^JfbsimI-;VO!4 znZsjBv==Wbo)F~k?ifW!M>lV9<_-3H4u@_ZrN*Eb8k!rS*ADjPo-WK2d7!q;kxY6E zN9Rf2G`X!6<>Pe)$*=_5b+Nkgr(@%a-_N6)JI~cpLh|LZrM8(Es|g;|$J`gu3D zRX1uU3e$-i?L)7P>)F4WD7TTe72S727Z-DUE7D0>-1fV&JNGyGDR9@-MEmkF^qh4j z>GiWrpVvQ#F&O_a>P}a%D?OsU9)$8)h_!P-o}-MAq~zUz^;q>(TB*sdP_&rBRkjnd zS8gt@V6vnP>?fMPm#MlWliN1JG_E_*Y1J=UBx_dJHf$)-G8CxP>NAH^+3kl$UL;z56Y1cYz7c`D{ljC!PX~<#iX5%hv7xlj z|NMiCpPG2Ng{KC3@~`aE*W{O^X8c&Zbcj95XuUx~s*=V(AtEG`!qHRH6cKAAbxF*Q z-CrN97i{fhTlftjpAqn$vxriO;bAh+r8#yT-exjI$U1yzU<09HvnpC!!?R5la zN5k2voE__0Oa^ENZ_Yt2bTjD8@QMKTN(>vUxk4`ZPaaz4;_kNO5&K!d;}h(udY>zj zpTAT!3D+c)NbsxxKUxb*Eg2w-8f3VoT010iSqX-%!2~=`$FPZ342Q9}4R5E^tC@Z| z>7L;g$IDD`3A|YjX0nDYcXu(*i=4d6N=CcN#^SPyR<966UiK2j*4K6#-aQB;c!sdW zFDzK~lF)d8L6_x)D`?KG>jS&H_I4f`L&tA@zjsev_E3+2ianfcc{O&SKRa#A0#(}y z^_>k(H$e$YL)cYg78D;eRJ{ZC*|m3lV|})q6++om5iunAf0sOiSHVu~kZQyidryu{ za+o)iyK~daNvSH2^CTW4D#Q7g0G_GaIK?|#o-0)d==t23!^4nC!T2|q+2s^2vhyol z>{qZTr^F6}Gy@iiAlUjviSaghBj!FTL6us-=zs{L%(#X%04A?JDvUr7oBsASUiAew zVY)hzzb!_G>7}~F*Y(W&g80!FlsiJkWTv@%fBGbVzv<`GWgB1%+zn<1Z zxN{m`{|N?%8dF+X2qWWy*i)8FBIPFIMQ4$W@^CPaA%U(+jOsNR39^`2DM6^K6!W4e z^oUprDGHB}Vj~bbpgLZ-Q0~tz4P&}8UBd!D9a%x={+1GpxZDqpq5$MS%N}FHHr3|F zpF>cxNN#y`B`MWM3{quF!#F5(= z#qn;#O^)6tuHrp=vw$;t#3`M)l(YDX<&NTb*c}t@542Weegkv}CEvih{#khx45KgI zGFmbAVO5p<8DY;moB`BQ73(8VuHSg6$%^E=b&D|hUV}Ie=h+bN?!zMHcmUNHhfVxh zLfGxD^TXBR>PrxMaM4`}H~3fH;l+^RDs8-u!)69Jqk2v0<$jv7A4hf`$8@CC7&ky% z#oNSLj52ti(l$NTOg}35Kgnk)_pv|+yLYMxe&siG6uDVIHqCw=&aZO6A-d3 zVta8iUBZY*Sj4zM7SkvISCPbC70&3OrZmA5<**>YqG|-3$b(qY!Wz(E5MYYD0?-bcI9{sg=CZ;uN@VqT^e`Urhi^wp1 ztp+hv8xwI7!F?3~98)XRNV`9>i|Kw~nH4G&U71{6CG%vpTGyB;)^YqHwSmH+cnQP2aVh_F zEc%{w^7QZQk3Xg!eeL-sQ}!IE*ff{^*nE$)f5{6+|;1MsAOCXl=UrFUr&+P`BO<( zGo(V4=2;!^Wwk_gzAhNm$TPDe7_+gBDmMaj$zHS@&}3Y}${e5#q4ijS)&+eK`o;Q* z8x4YW_@TaT2$WXgCG;p+OG)rN~ zM8#EbNI?o-Y3rKx1k>E;QW2vF^Q<1_B~cfEn`;8h{q+J6E=9C9Bj~_g3sIHzExu0? z(R$}`0fd?vQAw#rA`Yv#k-&pj_q@8A)_)(!*$b!P8nKoSgUm`l+V+ zeT2lb$l>)(seR?hl^6aV_<1YI9)-cudc91Y)#!dOiO5I44?M*lk7wQXVQ$X?cil(x z6#hVVbEO@yuLerQvwG;&%PQ{xedhO7(gL)<4YeE4N1jy~0`!4DTzNgqAiAr-5;J==(^%PjM8WrxymEVCuT=Nvv1%w7!+%ebBl!^_-JgY}J+`9h(%pv}o z01>9}jdIs`mH2&QC?v}~$ZtTQus{yaGfV84!(&81O1#b~z&{st5Kl4jTpm46k%=V2 zfWy~FiUf(*xeC}taFh-dGS6zUXZfyNA+0U2lP$pQ>>1!*11WFiUhrkY z!>U3>%jbL^%UqXnrVG@6pRo57AV3JrCUOUW*$hCIogCl@G+r+GPNGt^7K2qvby}}; z>Q#a=l&x|#NTxo0kVZ2y72=O_Lci9FuEAMrs<2%=DQ7GiGM3jU`)GOR;<_ zvkF^kt8B03*jy{LrMA{;-B!2H9de;A&ZWDj4)I6*ac}gkKFr7YbpOQX`-K3#hKjEE z%Eii6%FW7`%3ms|sBTjasHaq^p08e}zNvnsey;u?ri+DQl{hSHQ7M{4w>Vc^Dy|oI zh=;^8;x!S9Z^W1rLodJ?oQ=EjIG)DyKu6{n8GqyH_Xe9aTaNs)He2(3#4NIj zlZ%HxZS=B^txT|w3vkTX^DyD!?&+FJl*5pkoKu|n&T?m!v&Om6xj&bgE6lZ!zPDX!TkjI#LUfV4l)Kcpbk*k7 z3Tq{`RfXsQVKRVNR8Gdp%F9H$A1ExyxNn}*1&gYWr(d_D?^Yt{;oUyPq& z_h{2jk_<$a#F$WA%xb>RIiv)4l=IU8s9$vpnqrib^ z5Tp4}*a4ZOCKHGT!|Gqe65_WuEwO6#K;MXuFJbn|4&StN7C216S%q}Hh>3Zi9rLnd z^F~4iP753wjchx|O36WE4sWZY0#BP)E&kfZl?*yOj+w^Oi<9<7t2&<^@6jtQy0l8} zaQwl*tR3q-H^+3yyBtoC2L^Z8OhIp^)eKOt(Ta_6g!1F$WgQ%dMLs?%cW9|?5A4#v z>+UWk1ahE89jS5^qOW>yD7`b4vk$dugzGk!4tl_#cO5QcFfAZsSodA8VT(^&TLaKd zNx2jrY7@sB9DxM;47q%*QDZgp)d%ySGi&51l5Av)J&?6aE;^tS8tQ2D%9nO z4wMQZ!^Us(vUWqM)xAUjwL0x(#tRBtnU=?wscLl_xjWa)lUx>Un_sPf-7 zZ3RnoHJ?2?!0G)c#j3r$a$l}FU8T3F}0Pe*9fjcJ6^oM_X6ic!;8kxKh<@? z(>f4H(_@O3rsa1J?vtiNZY(sJUTs@2Dy+XYoh(!67~9*jo&r63woQYB()a*N9SqE> z+BvO`>9jr1IUG;Th#a6>X=kE4<^w}#Fi@N&C!$|kMsDV!HQ`f~lxRe#DH)wPTd_$-vxXL!M-AH` zGP6&D&sTH_*(t1JWD3Zu{3P^WAB+O8QHI`qPD@1_5`3^k45N@Jek~oA5-#sG=urUF z-F>1-lPi`y*DgCrkOVQL$fS-^sQOw#XKnw_}16X5qIAu~hVlGe}hm zyWwV2^NL6F=FEA6+1H?6vN_(G86|f2U+&tnxryUjZH4=wIi+ax(SNsI+{-INAWK!X zX>Pr}`9GPhs&e&<4QCcWR)EGr5OCugVE1a3X6kRIpZN={On_EuY$dlG?kjI6{qRyO zv#0yqD3IIv3`BBkW_FN|O$od6C7iyeQSc!|iad4ts7=IQmC9EDL%O(*n)g@X$oyL5 zXIx28tT zaDNZ042C(&#dSt2+p!Fxg2!fY%@XUrM@0riE=(jb_EXs_8T-|4B-2EBN(P9Ci3sW4 zA>r~}D>XitG`^6l2+2wf&=W#x%tID%J9OuJaYd7BsZi3unK~xNxG&VLWJZ=Z8ScxC z!(e5SshKY+DJc3`f&cxc$NdGQQG`~JqX~u+`i;PR+~--C;FDm79Jagr$nRW;6oK6r z>Gf9O3N%9n>&t}?sWJyJ6V))NI=C~s%(`z$;$*Q9)!s!^)Eq}t(||dnn2h zeBWaPO;~48XHe0uvHt5|a5q0&iK*hw3B9%`&vX*Zn^jwuZmQHJb5xMhKq@ z*8DT6lJADJR-HhYkg_q5e1J!lxQ@KjF!1T*XUKvC{G4^=-BR42a?X5TvoiluhCS+_ zq19k@xbVS1?K{}mwy+4r4Dca)hbLmdrR3q1KFOt-!{?~6VF_Q#1I{_Gs7#N3oI!q5 zu`=b#;_jRO#o+WS$L2`R_minwbZwJP@0?N_>lwmPu?>Y|)v#apu9}MS@4QoiLFb0M zzb&N1aX2*39oEAtlWBo~F+yyNVM|p!_R5XR?MzNIRP2$48DPXUm;bpi8y)unwb-R! zUQ5@pXFLqj4la#O_#&3e;kyb46+EHtnSx7s0XvsSyq;pChn8=?iN#jVR~q^3bW4bk zQek=J5*QnB>H#J`vcNTGLpKB~ep1o#Wb^Rkp@wM?ilU-CIcL1!8Z{%72=v8!>lHX3 zjV2VODt{gGOG+dh=>hf_s!*~2!Ty464V)PbefRU*7R6^RsTB55A_M=7)OYOSEfQc7(%H-FnG$7=rRh%I zGyV(DM+fefC1T1#Bt-beY>oY2;A;?1Ahov`($JeVU_Y;#Hz0a*B6IVJ&seLZ>HABC z!$fO9S?v}XP=}AaWJZ>|wUye(gVZ2}J>8eSFu5rj@0*Zfuc&PL(aV$yFO`TZdzQyh zBuM>&+XFujsNT2K4t@5m+Sy94TFv}<#v*SYK6_K9 z9$wWI9a9gHj3+Odlhn=La%*yMSkZodTalAO%iJ4-K%{9LYIX-6ql{kXaK6)S+B}ER zVHHb9z$dpBEtl7}xvPdx4gg4RI%*U*e z_kaVUiAJM%TkBFT+5YBN44Dc#Guq0{s>>95#?^R6K{O4td+=YHExlW>qdbKD#R|6>y*N|Vk>9RF@ObJtyb6Ayw|~a)!f)< zo#8~cd59^*Z4B|%*|Fc-QGjG;i|`hIxZ>Er)+Mn)Zm`q9$z4I~j`Q$H66UGTqMi)& zi+#0~8_50%_?8WCJ3!ywG@Yi`hH3nlrTT8g(|zWS({d`AD?8C^##03r_LvHlmLHwo z9oBZFKZCJ!eJf&h!*;~u;#xJ+YO5dPD_Y1!K$;NUSv-n<}AlY4uT6)c|(Wl$B z8ZFUgdAKu=v1|4Xh$4+XSfR$R_^%hmKMoD8jv5uf7g-tS$F{ttXS`?2($8Z*+^yS*MmiFv(G9; z46D!_nahhFmAvDVe6yVBD^x!S(v1BvfbrDH>-dRRz_{j-u`@zLgWq>#sb{;t_&tw>~^Vco4C(>szOb9-~W&i(2HAYJ! zh?3VIA%-D^fjO=QAI!~53btlymrc=dkQ%J{L!&tbVeT|kyp!y1gW$gN4TRGIhy;tiGx5fJ-jq3$`#zoWsG(1-^C^7ruo*0Ler{Kr<(Fd z^mx1Mjm0^gi26Jdd(wG=X{)^2xDf~54bJq&xqOvM$StW$hge*B*{K~`O+U`gk7Nc+ zee_j$AN{hozRP5)YSo}n*6bb4wo{}`kD64KF8?{w0w$j^PqPFq~|TCLKc=D6}Yfh zS)n{~A`QUo!1tr{f{?&4?jG<0c&{aiy`t;#N;o&plZt?A7f=UN16 zs7aoj?B8Q=H_;AW<7Id~dqMa^|0t(OQegp?rGDx7fE7M|E$I-7txOx; zDqcz-OxrW2&zFHN3Cqxrda|hrwu?uOYWn6$87o4cp*KNWQ7?Hzr(Acf=&MRzhvN*) z^gqP7I7-Z!blY`#3)HK+p`AdRc4)Og!J2=%2;F$D27^-RH|B^To5RQpl|}nEWruJ| z+n;neFAi*>VnjloakTE-NOjeT1EE~Uem$N!zoDflMpCj#w z1dqJe*H&g>_jI)W^f>o=s50l-U@ska=0rz>3!{Wtvi?`g8IaXJtI* z(4yH1>a6XzkZhfu3&fkhurvqvZsXObTt&)M$3s-bGNXDnMtcK}@Fv$|M6?^hHEHc4KXDeQkW~g}yfBty)c8aD`-^bW?c~H`r~TcAX&$vBHdOrq z`^%k_ol#|(vJ;YY!6yLrq?!FZh*7Vw?_-k(^VRq+V?XJ7jN|N53;$Nv!)bHup|%D> zU_^fY=CjD(B!?yjDD>*|T9-O}Uz7_gEf?yFe{DPr#l~z5B(ll=v-1raw+wi_6U-A`|ak$uhaUNzgcHhDk6~rQKG(P%QyhX#ZoW7`F=v{ep{IwotFC4O^KbI zm)cWw@M8?7NSwHv2O=$ZF}V)E^8^~msaQ_AoOPr?$_uW;amOwUCY;JaJ+pugf&b!nR^Dgb>%H3* zGMV(z69}QX=vxb*^L^jEGc+3A3RJRfW3>0)9L(ALV!S7!%=sr;Y1AW*cF~-#hf^?{ zRVF7W(Q9J~zAVa}9uER@my=fmPm%_-X<)$}+RHCJ1Tsinb|)!jN3mEzBKfo+7#UaO zh^TAYMvGeKsOw7bMn1xgzv+U{<-P9nn-{$><8nT=!O;lpkVl{8fiqhEIrmI$W2ns8R5~H{q}btDIx@2D;jyHB&Td z5GY&Hm)FfpTeMAQm8S`bRiuCABAO5_i(Pu}P z=A-Y`*1TP?ac*KjJ6;QwPQRmm0|pW8xB{6H?GO zaA;R6oj5s4$S;4J0YlMATLPG(mdmQEKynvJW>U~eSYxHaY)dN)A$k#N6Gb)(cb%={ zquh+Q<_)MGN}FCtdX=fAXpuqnXJj+vmLvEtEdTVoH?FCmW_CTu00n19kEHeshH|qJ z%t8$%442@fLqG4=hU4P4b7GYG(uLq=jk`N}n0E-Gm7w;iBHVESnOmG}suMrn z(mSNjHre0XEY@h0-OZJn-Q2Cz@P@V*xIJ(aQLO+{x|QAcxN7IQ+H>Zki*zUl^KXpSQnt}9?r@$U884NU}JE|p4adsLEkVA(Lzlo+27 z>gwiz3o5C}XW{>Y%b5Y7S$I+fD8p=;)z=l-3=>~4CO=F8cn630%!OFbHCXbF)j_i5 z5_&G5faqKy{0zU&*0osqu<%8B^$Vd%$Xzw_%P*IoAVZ)$c_$r%Kkz_CVg!ZZva)7g z3^X*@)Tnjy8LTe(o&|zEe2<02^Jj-in5hQa%y(7m`Oj}rNkm4IzmOybL)rl1+&rrh zWClC8LT|ouIGHQQ@hh}8m{nbTo$&D8Lzxp}Btc9Bytcs5`ps|m|G!NUSDT|lJplOP z>0R#t^nSGkn0_>^TXZFC0R$KT1iu2qxisdE**LsMAo54B8hi?h?KXbDSK8eG57-ao z-U$&aScOe@ZB?@(zwdHw?*x=g^x`6x}Ag^i$5yO9kWv=M*D0q}YYb$qFDtGv&syY+m zew!L@IJxB@Js#i%%cc*!e#WERajtGEYq(czAfR_vva)`&-uv>3|K@^si?Ozqko^z0 zHJbpT9cu28Y-YLS(FV_4amR!@T! zTLYSH$~sA%Y&_-@#7!Dj5jJ6~AuGgciRw4SX;N4{arIgQ(vn$2g!QI1Oh#gBgsASb zMj0-qHO6FlS>uem6#**j_&w~Fe145`k z2&NX1OE3Y6zL9&4jtwh#;dcVEY#F*%?X+sdFT^r&cKhJe(*p|0S8##vGpXP~Hyn`z zE?fQn+~i0^VyzSH#Siwy)=~Ja?LKeXebT3Q3BFk=MHz4e$J3SS9`%X&3PXl2K$ z4DW;Bym1X{a;=d--g<9by75Y7g01r1|_5bMdOIhv#2G`=mFfH3Dj!j!yjLL0mqfR~EoDO=8kiR=GvmBOV+neXanM*sk za^v1kD|lq!3CD|fyZE%5Z+rOh7a%ZI(SigE5h^Ta;qW3viV`iRc(EN6Cmun9L`i)i zxuO1%f+!U!7iq|T{Q4^qLZ#6eOct9{G9HgFh)B>WLOp$hQb~JfWE^5*YG!U>*_iwo z%>hV(l#V*~#l(S7B$h~JvHOc!LBxSdRrl2zEoo!EshN4Gg=HC5);6}iPGAQBg1~u0 zpfETBiRuZu3m7a8Pat-Y)NucjDby~}=nN*S%WMvp#}^1iVo6t}GP$DbN|jop%}3XW zoT0iF80{S#<2C2x?BeR??&0a>?E?VT?hl4QVQ>Tzg~niUczpvyBV&`E_tF#;@HDSp zD=fv1a!Tj3IsPeri}?y}eD$!$7r-!a2Hqr>H3Bee_VPS@>RT0N-L}S&cQQcmnH(7HM4f@RA$dW%0E?Xz&G72 z7Jhum=WcdBZNZeEr(=3XTQp)HRYXVM_{~<}zSXXDXQ@U4N=pS8HCCu;+T^>&X7q0 zS(ahoy$W0&0CKRas-a>qq!4hwE7wF7nM56x;>K~4f<#;;;6xH6f%LmDO{const{isAuthenticated:t}=a();if(!t.value)return o("/login")});export{n as default}; diff --git a/TerraformRegistry/web/_nuxt/B9sIrZpC.js b/TerraformRegistry/web/_nuxt/B9sIrZpC.js deleted file mode 100644 index 777b602..0000000 --- a/TerraformRegistry/web/_nuxt/B9sIrZpC.js +++ /dev/null @@ -1 +0,0 @@ -import R from"./DZhRnb1V.js";import{u as E,b as O,t as j,c as V,d as H,P as Q,_ as J,a as K}from"./CyQxyuxc.js";import{a as W,_ as X}from"./BLEGckhC.js";import{p as Y,q as Z,s as G,j as b,o as i,w as d,v as M,k as q,l as s,x as C,y as ee,c as p,t as l,e as te,f as se,r as k,z as ae,a as e,b as c,A as re,d as y,F as N,B as U,m as ne}from"./DfbLerQ4.js";import"./CDgII3bh.js";const ie={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"}},oe={__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(x){const r=x,L=Y(),g=Z(),{orientation:v,size:z}=E(r),{isLeading:_,isTrailing:f,leadingIconName:h,trailingIconName:w}=O(r),m=G(()=>{var u;return j({extend:j(ie),...((u=g.ui)==null?void 0:u.badge)||{}})({color:r.color,variant:r.variant,size:z.value||r.size,square:r.square||!L.default&&!r.label,buttonGroup:v.value})});return(u,$)=>{var I;return i(),b(s(Q),{as:x.as,class:C(m.value.base({class:[(I=r.ui)==null?void 0:I.base,r.class]}))},{default:d(()=>[M(u.$slots,"leading",{},()=>{var a,t,o;return[s(_)&&s(h)?(i(),b(V,{key:0,name:s(h),class:C(m.value.leadingIcon({class:(a=r.ui)==null?void 0:a.leadingIcon}))},null,8,["name","class"])):x.avatar?(i(),b(H,ee({key:1,size:((t=r.ui)==null?void 0:t.leadingAvatarSize)||m.value.leadingAvatarSize()},x.avatar,{class:m.value.leadingAvatar({class:(o=r.ui)==null?void 0:o.leadingAvatar})}),null,16,["size","class"])):q("",!0)]}),M(u.$slots,"default",{},()=>{var a;return[x.label!==void 0&&x.label!==null?(i(),p("span",{key:0,class:C(m.value.label({class:(a=r.ui)==null?void 0:a.label}))},l(x.label),3)):q("",!0)]}),M(u.$slots,"trailing",{},()=>{var a;return[s(f)&&s(w)?(i(),b(V,{key:0,name:s(w),class:C(m.value.trailingIcon({class:(a=r.ui)==null?void 0:a.trailingIcon}))},null,8,["name","class"])):q("",!0)]})]),_:3},8,["as","class"])}}},le={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},ce={class:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700"},de={class:"max-w-7xl mx-auto px-4 py-6"},ue={class:"flex justify-between items-center"},ge={class:"flex items-center space-x-4"},xe={class:"w-12 h-12 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-lg"},fe={class:"max-w-7xl mx-auto px-4 py-8"},me={class:"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"},ye={class:"flex items-center space-x-3"},pe={class:"w-8 h-8 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center"},ve={class:"flex flex-col sm:flex-row items-stretch sm:items-center gap-3 w-full sm:w-auto"},be={key:1,class:"flex flex-col justify-center items-center py-16"},_e={key:2,class:"text-center py-16"},he={class:"w-20 h-20 mx-auto mb-6 bg-gray-100 dark:bg-gray-800 rounded-2xl flex items-center justify-center"},we={class:"text-gray-600 dark:text-gray-400"},ke={key:3,class:"overflow-hidden"},ze={class:"overflow-x-auto"},qe={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},Ie={class:"bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700"},Se={class:"px-6 py-4"},Ae={class:"flex items-center"},Ce={class:"w-10 h-10 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-lg flex items-center justify-center mr-4"},Le={class:"text-white text-sm font-bold"},Me={class:"text-sm font-semibold text-gray-900 dark:text-white"},$e={class:"text-sm text-gray-500 dark:text-gray-400"},Be={class:"px-6 py-4"},je={class:"px-6 py-4"},Ve=["title"],Ne={class:"px-6 py-4"},Ue={class:"text-sm text-gray-600 dark:text-gray-400"},De={class:"px-6 py-4"},Ge={class:"flex flex-wrap gap-1 max-w-32"},Pe={class:"px-6 py-4 text-right"},Te={class:"flex flex-col sm:flex-row justify-between items-center gap-4 bg-gray-50 dark:bg-gray-800 px-6 py-4 rounded-b-lg"},Fe={class:"flex items-center space-x-2"},Re={class:"text-sm text-gray-600 dark:text-gray-400"},D=10,Ke=te({__name:"modules",setup(x){const{logout:r,getAuthHeaders:L}=se(),g=k([]),v=k(!1),z=k(!1),_=k(""),f=k(""),h=k(0),w=G(()=>{if(!f.value)return g.value;const a=f.value.toLowerCase();return g.value.filter(t=>t.name.toLowerCase().includes(a)||t.namespace.toLowerCase().includes(a)||t.provider.toLowerCase().includes(a)||t.description.toLowerCase().includes(a))}),m=a=>new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}),u=async(a=0,t=!1)=>{try{t?z.value=!0:v.value=!0,_.value="";const o=await $fetch(`/v1/modules?offset=${a}&limit=${D}`,{headers:L()});t?g.value.push(...o.modules):g.value=o.modules,h.value=a+D}catch(o){_.value=o.message||"Failed to fetch modules",console.error("Error fetching modules:",o)}finally{v.value=!1,z.value=!1}},$=()=>{h.value=0,u(0,!1)},I=()=>{u(h.value,!0)};return ae(()=>{u()}),(a,t)=>{const o=R,S=J,P=X,T=W,A=oe,F=K;return i(),p("div",le,[e("div",ce,[e("div",de,[e("div",ue,[e("div",ge,[e("div",xe,[c(o,{name:"material-symbols:engineering",class:"text-xl text-white"})]),t[1]||(t[1]=e("div",null,[e("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white"}," Terraform Modules "),e("p",{class:"text-gray-600 dark:text-gray-400 mt-1"}," Manage and browse your infrastructure modules ")],-1))]),c(S,{onClick:s(r),variant:"outline",color:"error",size:"lg"},{default:d(()=>t[2]||(t[2]=[y(" Logout ")])),_:1,__:[2]},8,["onClick"])])])]),e("div",fe,[c(F,{class:"shadow-lg"},re({header:d(()=>[e("div",me,[e("div",ye,[e("div",pe,[c(o,{name:"material-symbols:package-2",class:"text-blue-600 dark:text-blue-400"})]),t[3]||(t[3]=e("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white"}," Module Registry ",-1))]),e("div",ve,[c(P,{modelValue:s(f),"onUpdate:modelValue":t[0]||(t[0]=n=>ne(f)?f.value=n:null),placeholder:"Search modules...",size:"md",class:"w-full sm:w-72"},null,8,["modelValue"]),c(S,{onClick:$,loading:s(v),variant:"outline",size:"md"},{default:d(()=>t[4]||(t[4]=[y(" Refresh ")])),_:1,__:[4]},8,["loading"])])])]),default:d(()=>[s(_)?(i(),b(T,{key:0,color:"error",variant:"soft",title:s(_),class:"mb-6"},null,8,["title"])):q("",!0),s(v)&&!s(g).length?(i(),p("div",be,[c(o,{name:"material-symbols:refresh",class:"animate-spin text-4xl mb-4 text-blue-500"}),t[5]||(t[5]=e("p",{class:"text-gray-600 dark:text-gray-400 text-lg"}," Loading modules... ",-1))])):!s(w).length&&!s(v)?(i(),p("div",_e,[e("div",he,[c(o,{name:"material-symbols:package-2",class:"text-4xl text-gray-400"})]),t[6]||(t[6]=e("h3",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-2"}," No modules found ",-1)),e("p",we,l(s(f)?"Try adjusting your search terms":"Get started by adding your first module"),1)])):(i(),p("div",ke,[e("div",ze,[e("table",qe,[t[8]||(t[8]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Module "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Provider "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Description "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Published "),e("th",{class:"px-6 py-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Versions "),e("th",{class:"px-6 py-4 text-right text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-wider"}," Actions ")])],-1)),e("tbody",Ie,[(i(!0),p(N,null,U(s(w),n=>(i(),p("tr",{key:n.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"},[e("td",Se,[e("div",Ae,[e("div",Ce,[e("div",Le,l(n.name.charAt(0).toUpperCase()),1)]),e("div",null,[e("div",Me,l(n.name),1),e("div",$e,l(n.namespace),1),c(A,{variant:"subtle",size:"xs",class:"mt-1"},{default:d(()=>[y(" v"+l(n.version),1)]),_:2},1024)])])]),e("td",Be,[c(A,{variant:"outline",color:"primary"},{default:d(()=>[y(l(n.provider),1)]),_:2},1024)]),e("td",je,[e("p",{class:"text-sm text-gray-900 dark:text-white max-w-xs",title:n.description},l(n.description||"No description available"),9,Ve)]),e("td",Ne,[e("div",Ue,l(m(n.published_at)),1)]),e("td",De,[e("div",Ge,[(i(!0),p(N,null,U(n.versions.slice(0,3),B=>(i(),b(A,{key:B,variant:"outline",size:"xs",color:"neutral"},{default:d(()=>[y(l(B),1)]),_:2},1024))),128)),n.versions.length>3?(i(),b(A,{key:0,variant:"outline",size:"xs",color:"neutral"},{default:d(()=>[y(" +"+l(n.versions.length-3),1)]),_:2},1024)):q("",!0)])]),e("td",Pe,[c(S,{to:n.download_url,external:"",target:"_blank",variant:"ghost",size:"sm",color:"primary"},{default:d(()=>t[7]||(t[7]=[y(" ⬇ Download ")])),_:2,__:[7]},1032,["to"])])]))),128))])])])]))]),_:2},[s(g).length>0?{name:"footer",fn:d(()=>[e("div",Te,[e("div",Fe,[t[9]||(t[9]=e("div",{class:"w-2 h-2 bg-green-500 rounded-full"},null,-1)),e("p",Re," Showing "+l(s(w).length)+" of "+l(s(g).length)+" modules ",1)]),c(S,{onClick:I,loading:s(z),variant:"outline",size:"sm"},{default:d(()=>t[10]||(t[10]=[y(" Load More Modules ")])),_:1,__:[10]},8,["loading"])])]),key:"0"}:void 0]),1024)])])}}});export{Ke as default}; 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/BLEGckhC.js b/TerraformRegistry/web/_nuxt/BLEGckhC.js deleted file mode 100644 index ec12f7b..0000000 --- a/TerraformRegistry/web/_nuxt/BLEGckhC.js +++ /dev/null @@ -1 +0,0 @@ -import{e as fe,u as ve,b as me,t as j,c as T,d as ie,P as ae,l as pe,g as ye,f as be,_ as L}from"./CyQxyuxc.js";import{C as X,p as re,D as he,q as ne,s as x,r as se,z as xe,j as f,o as s,w as le,a as oe,v as p,c as b,k as d,y as z,l as r,x as c,m as ze,E as qe,G as Ie,H as we,d as Z,t as _,F as ee,B as te}from"./DfbLerQ4.js";const Se={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"}},ke=["id","type","value","name","placeholder","disabled","required","autocomplete"],Pe=Object.assign({inheritAttrs:!1},{__name:"Input",props:X({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:X(["update:modelValue","blur","change"],["update:modelValue"]),setup(e,{expose:l,emit:a}){const i=e,o=a,v=re(),[q,n]=he(e,"modelValue"),u=ne(),{emitFormBlur:S,emitFormInput:k,emitFormChange:C,size:$,color:N,id:B,name:A,highlight:M,disabled:V,emitFormFocus:I,ariaAttrs:g}=fe(i,{}),{orientation:m,size:F}=ve(i),{isLeading:D,isTrailing:O,leadingIconName:R,trailingIconName:E}=me(i),G=x(()=>F.value||$.value),y=x(()=>{var t;return j({extend:j(Se),...((t=u.ui)==null?void 0:t.input)||{}})({type:i.type,color:N.value,variant:i.variant,size:G==null?void 0:G.value,loading:i.loading,highlight:M.value,leading:D.value||!!i.avatar||!!v.leading,trailing:O.value||!!v.trailing,buttonGroup:m.value})}),P=se(null);function Y(t){n.trim&&(t=(t==null?void 0:t.trim())??null),(n.number||i.type==="number")&&(t=pe(t)),n.nullify&&(t||(t=null)),q.value=t,k()}function ce(t){n.lazy||Y(t.target.value)}function ue(t){const w=t.target.value;n.lazy&&Y(w),n.trim&&(t.target.value=w.trim()),C(),o("change",t)}function ge(t){S(),o("blur",t)}function de(){var t;i.autofocus&&((t=P.value)==null||t.focus())}return xe(()=>{setTimeout(()=>{de()},i.autofocusDelay)}),l({inputRef:P}),(t,w)=>{var H;return s(),f(r(ae),{as:e.as,class:c(y.value.root({class:[(H=i.ui)==null?void 0:H.root,i.class]}))},{default:le(()=>{var K,J,Q;return[oe("input",z({id:r(B),ref_key:"inputRef",ref:P,type:e.type,value:r(q),name:r(A),placeholder:e.placeholder,class:y.value.base({class:(K=i.ui)==null?void 0:K.base}),disabled:r(V),required:e.required,autocomplete:e.autocomplete},{...t.$attrs,...r(g)},{onInput:ce,onBlur:ge,onChange:ue,onFocus:w[0]||(w[0]=(...h)=>r(I)&&r(I)(...h))}),null,16,ke),p(t.$slots,"default"),r(D)||e.avatar||v.leading?(s(),b("span",{key:0,class:c(y.value.leading({class:(J=i.ui)==null?void 0:J.leading}))},[p(t.$slots,"leading",{},()=>{var h,U,W;return[r(D)&&r(R)?(s(),f(T,{key:0,name:r(R),class:c(y.value.leadingIcon({class:(h=i.ui)==null?void 0:h.leadingIcon}))},null,8,["name","class"])):e.avatar?(s(),f(ie,z({key:1,size:((U=i.ui)==null?void 0:U.leadingAvatarSize)||y.value.leadingAvatarSize()},e.avatar,{class:y.value.leadingAvatar({class:(W=i.ui)==null?void 0:W.leadingAvatar})}),null,16,["size","class"])):d("",!0)]})],2)):d("",!0),r(O)||v.trailing?(s(),b("span",{key:1,class:c(y.value.trailing({class:(Q=i.ui)==null?void 0:Q.trailing}))},[p(t.$slots,"trailing",{},()=>{var h;return[r(E)?(s(),f(T,{key:0,name:r(E),class:c(y.value.trailingIcon({class:(h=i.ui)==null?void 0:h.trailingIcon}))},null,8,["name","class"])):d("",!0)]})],2)):d("",!0)]}),_:3},8,["as","class"])}}});function Ce(e){return(l,a)=>$e(l,a,r(e))}function $e(e,l,a){return ye(a,`messages.${e}`,e).replace(/\{(\w+)\}/g,(o,v)=>`${(l==null?void 0:l[v])??`{${v}}`}`)}function Ne(e){const l=x(()=>r(e).name),a=x(()=>r(e).code),i=x(()=>r(e).dir),o=ze(e)?e:se(e);return{lang:l,code:a,dir:i,locale:o,t:Ce(e)}}function Be(e){return qe(e,{dir:"ltr"})}const Ae=Be({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"}}}),Me=Symbol.for("nuxt-ui.locale-context"),Ve=e=>{const l=e||Ie(we(Me));return Ne(x(()=>l.value||Ae))},Fe=be(Ve),je={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"}},Le={__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(e,{emit:l}){const a=e,i=l,o=re(),{t:v}=Fe(),q=ne(),n=x(()=>{var u;return j({extend:j(je),...((u=q.ui)==null?void 0:u.alert)||{}})({color:a.color,variant:a.variant,orientation:a.orientation,title:!!a.title||!!o.title})});return(u,S)=>{var k;return s(),f(r(ae),{as:e.as,"data-orientation":e.orientation,class:c(n.value.root({class:[(k=a.ui)==null?void 0:k.root,a.class]}))},{default:le(()=>{var C,$,N,B,A,M,V,I;return[p(u.$slots,"leading",{},()=>{var g,m,F;return[e.avatar?(s(),f(ie,z({key:0,size:((g=a.ui)==null?void 0:g.avatarSize)||n.value.avatarSize()},e.avatar,{class:n.value.avatar({class:(m=a.ui)==null?void 0:m.avatar})}),null,16,["size","class"])):e.icon?(s(),f(T,{key:1,name:e.icon,class:c(n.value.icon({class:(F=a.ui)==null?void 0:F.icon}))},null,8,["name","class"])):d("",!0)]}),oe("div",{class:c(n.value.wrapper({class:(C=a.ui)==null?void 0:C.wrapper}))},[e.title||o.title?(s(),b("div",{key:0,class:c(n.value.title({class:($=a.ui)==null?void 0:$.title}))},[p(u.$slots,"title",{},()=>[Z(_(e.title),1)])],2)):d("",!0),e.description||o.description?(s(),b("div",{key:1,class:c(n.value.description({class:(N=a.ui)==null?void 0:N.description}))},[p(u.$slots,"description",{},()=>[Z(_(e.description),1)])],2)):d("",!0),e.orientation==="vertical"&&((B=e.actions)!=null&&B.length||o.actions)?(s(),b("div",{key:2,class:c(n.value.actions({class:(A=a.ui)==null?void 0:A.actions}))},[p(u.$slots,"actions",{},()=>[(s(!0),b(ee,null,te(e.actions,(g,m)=>(s(),f(L,z({key:m,size:"xs"},{ref_for:!0},g),null,16))),128))])],2)):d("",!0)],2),e.orientation==="horizontal"&&((M=e.actions)!=null&&M.length||o.actions)||e.close?(s(),b("div",{key:0,class:c(n.value.actions({class:(V=a.ui)==null?void 0:V.actions,orientation:"horizontal"}))},[e.orientation==="horizontal"&&((I=e.actions)!=null&&I.length||o.actions)?p(u.$slots,"actions",{key:0},()=>[(s(!0),b(ee,null,te(e.actions,(g,m)=>(s(),f(L,z({key:m,size:"xs"},{ref_for:!0},g),null,16))),128))]):d("",!0),p(u.$slots,"close",{ui:n.value},()=>{var g;return[e.close?(s(),f(L,z({key:0,icon:e.closeIcon||r(q).ui.icons.close,size:"md",color:"neutral",variant:"link","aria-label":r(v)("alert.close")},typeof e.close=="object"?e.close:{},{class:n.value.close({class:(g=a.ui)==null?void 0:g.close}),onClick:S[0]||(S[0]=m=>i("update:open",!1))}),null,16,["icon","aria-label","class"])):d("",!0)]})],2)):d("",!0)]}),_:3},8,["as","data-orientation","class"])}}};export{Pe as _,Le as a}; 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/BvVBPIAF.js b/TerraformRegistry/web/_nuxt/BvVBPIAF.js deleted file mode 100644 index 12c53bb..0000000 --- a/TerraformRegistry/web/_nuxt/BvVBPIAF.js +++ /dev/null @@ -1 +0,0 @@ -import l from"./DZhRnb1V.js";import{_ as d,a as m}from"./CyQxyuxc.js";import{e as c,f as _,n as f,c as u,o as x,a as e,b as o,w as n,d as g}from"./DfbLerQ4.js";import"./CDgII3bh.js";const p={class:"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center"},b={class:"max-w-md w-full mx-4 fade-in"},h={class:"text-center p-8"},w={class:"w-20 h-20 mx-auto mb-6 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-2xl flex items-center justify-center shadow-lg slide-in"},T=c({__name:"index",setup(y){const{isAuthenticated:s}=_();return s.value&&f("/modules"),(v,t)=>{const a=l,i=d,r=m;return x(),u("div",p,[e("div",b,[o(r,null,{default:n(()=>[e("div",h,[e("div",w,[o(a,{name:"material-symbols:engineering",class:"text-3xl text-white"})]),t[1]||(t[1]=e("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white mb-3"}," Terraform Registry ",-1)),o(i,{to:"/login",size:"lg",class:"w-full",color:"primary",variant:"solid"},{default:n(()=>t[0]||(t[0]=[g(" Sign In to Continue ")])),_:1,__:[0]})])]),_:1})])])}}});export{T as default}; 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/CDgII3bh.js b/TerraformRegistry/web/_nuxt/CDgII3bh.js deleted file mode 100644 index ec61a8c..0000000 --- a/TerraformRegistry/web/_nuxt/CDgII3bh.js +++ /dev/null @@ -1 +0,0 @@ -import{e as T,g as _,a4 as j,r as N,a5 as A,z as B,a6 as E,a7 as U,a8 as I,a9 as F,K as L,h as P,aa as H,ab as k,ac as V,s as p,ad as O,ae as z,af as D,n as M,ag as W,ah as $,ai as G}from"./DfbLerQ4.js";const K=(...t)=>t.find(u=>u!==void 0);function Q(t){const u=t.componentName||"NuxtLink";function h(e){return typeof e=="string"&&e.startsWith("#")}function R(e,r,b){const a=b??t.trailingSlash;if(!e||a!=="append"&&a!=="remove")return e;if(typeof e=="string")return C(e,a);const o="path"in e&&e.path!==void 0?e.path:r(e).path;return{...e,name:void 0,path:C(o,a)}}function q(e){const r=_(),b=D(),a=p(()=>!!e.target&&e.target!=="_self"),o=p(()=>{const f=e.to||e.href||"";return typeof f=="string"&&O(f,{acceptRelative:!0})}),x=P("RouterLink"),g=x&&typeof x!="string"?x.useLink:void 0,d=p(()=>{if(e.external)return!0;const f=e.to||e.href||"";return typeof f=="object"?!1:f===""||o.value}),l=p(()=>{const f=e.to||e.href||"";return d.value?f:R(f,r.resolve,e.trailingSlash)}),c=d.value||g==null?void 0:g({...e,to:l}),y=p(()=>{var S;const f=e.trailingSlash??t.trailingSlash;if(!l.value||o.value||h(l.value))return l.value;if(d.value){const m=typeof l.value=="object"&&"path"in l.value?k(l.value):l.value,n=typeof m=="object"?r.resolve(m).href:m;return C(n,f)}return typeof l.value=="object"?((S=r.resolve(l.value))==null?void 0:S.href)??null:C(z(b.app.baseURL,l.value),f)});return{to:l,hasTarget:a,isAbsoluteUrl:o,isExternal:d,href:y,isActive:(c==null?void 0:c.isActive)??p(()=>l.value===r.currentRoute.value.path),isExactActive:(c==null?void 0:c.isExactActive)??p(()=>l.value===r.currentRoute.value.path),route:(c==null?void 0:c.route)??p(()=>r.resolve(l.value)),async navigate(f){await M(y.value,{replace:e.replace,external:d.value||a.value})}}}return T({name:u,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:q,setup(e,{slots:r}){const b=_(),{to:a,href:o,navigate:x,isExternal:g,hasTarget:d,isAbsoluteUrl:l}=q(e),c=j(!1),y=N(null),f=n=>{var s;y.value=e.custom?(s=n==null?void 0:n.$el)==null?void 0:s.nextElementSibling:n==null?void 0:n.$el};function S(n){var s,i;return!c.value&&(typeof e.prefetchOn=="string"?e.prefetchOn===n:((s=e.prefetchOn)==null?void 0:s[n])??((i=t.prefetchOn)==null?void 0:i[n]))&&(e.prefetch??t.prefetch)!==!1&&e.noPrefetch!==!0&&e.target!=="_blank"&&!Y()}async function m(n=A()){if(c.value)return;c.value=!0;const s=typeof a.value=="string"?a.value:g.value?k(a.value):b.resolve(a.value).fullPath,i=g.value?new URL(s,window.location.href).href:s;await Promise.all([n.hooks.callHook("link:prefetch",i).catch(()=>{}),!g.value&&!d.value&&V(a.value,b).catch(()=>{})])}if(S("visibility")){const n=A();let s,i=null;B(()=>{const v=J();E(()=>{s=U(()=>{var w;(w=y==null?void 0:y.value)!=null&&w.tagName&&(i=v.observe(y.value,async()=>{i==null||i(),i=null,await m(n)}))})})}),I(()=>{s&&F(s),i==null||i(),i=null})}return()=>{var i;if(!g.value&&!d.value&&!h(a.value)){const v={ref:f,to:a.value,activeClass:e.activeClass||t.activeClass,exactActiveClass:e.exactActiveClass||t.exactActiveClass,replace:e.replace,ariaCurrentValue:e.ariaCurrentValue,custom:e.custom};return e.custom||(S("interaction")&&(v.onPointerenter=m.bind(null,void 0),v.onFocus=m.bind(null,void 0)),c.value&&(v.class=e.prefetchedClass||t.prefetchedClass),v.rel=e.rel||void 0),L(P("RouterLink"),v,r.default)}const n=e.target||null,s=K(e.noRel?"":e.rel,t.externalRelAttribute,l.value||d.value?"noopener noreferrer":"")||null;return e.custom?r.default?r.default({href:o.value,navigate:x,prefetch:m,get route(){if(!o.value)return;const v=new URL(o.value,window.location.href);return{path:v.pathname,fullPath:v.pathname,get query(){return H(v.search)},hash:v.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:o.value}},rel:s,target:n,isExternal:g.value||d.value,isActive:!1,isExactActive:!1}):null:L("a",{ref:y,href:o.value||null,rel:s,target:n},(i=r.default)==null?void 0:i.call(r))}}})}const ee=Q(G);function C(t,u){const h=u==="append"?W:$;return O(t)&&!t.startsWith("http")?t:h(t,!0)}function J(){const t=A();if(t._observer)return t._observer;let u=null;const h=new Map,R=(e,r)=>(u||(u=new IntersectionObserver(b=>{for(const a of b){const o=h.get(a.target);(a.isIntersecting||a.intersectionRatio>0)&&o&&o()}})),h.set(e,r),u.observe(e),()=>{h.delete(e),u==null||u.unobserve(e),h.size===0&&(u==null||u.disconnect(),u=null)});return t._observer={observe:R}}const X=/2g/;function Y(){const t=navigator.connection;return!!(t&&(t.saveData||X.test(t.effectiveType)))}export{ee as _}; 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/CjNMrKxF.js b/TerraformRegistry/web/_nuxt/CjNMrKxF.js deleted file mode 100644 index 0118f4b..0000000 --- a/TerraformRegistry/web/_nuxt/CjNMrKxF.js +++ /dev/null @@ -1 +0,0 @@ -import{e as r,c as a,v as o,o as t}from"./DfbLerQ4.js";const s={class:"min-h-screen bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-900 dark:to-gray-800"},l=r({__name:"default",setup(n){return(e,c)=>(t(),a("div",s,[o(e.$slots,"default")]))}});export{l as default}; diff --git a/TerraformRegistry/web/_nuxt/CwuZat6W.js b/TerraformRegistry/web/_nuxt/CwuZat6W.js deleted file mode 100644 index 52a2f99..0000000 --- a/TerraformRegistry/web/_nuxt/CwuZat6W.js +++ /dev/null @@ -1 +0,0 @@ -import A from"./DZhRnb1V.js";import{_ as U,a as V}from"./BLEGckhC.js";import{_ as B,a as I}from"./CyQxyuxc.js";import{e as P,f as c,g as T,r as m,n as C,c as N,a as t,b as s,w as l,h as $,o as u,i as j,j as z,k as R,l as a,m as S,d as _}from"./DfbLerQ4.js";import"./CDgII3bh.js";const q={class:"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center px-4"},E={class:"max-w-md w-full fade-in"},F={class:"text-center mb-8 slide-in"},G={class:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-lg"},L={class:"p-6"},H={class:"text-center mt-6"},Q=P({__name:"login",setup(M){const{login:f}=c(),p=T(),o=m(""),r=m(!1),n=m(""),g=async()=>{if(!o.value.trim()){n.value="Please enter a valid API token";return}r.value=!0,n.value="";try{await new Promise(i=>setTimeout(i,500)),f(o.value.trim()),await p.push("/modules")}catch{n.value="An error occurred. Please try again."}finally{r.value=!1}},{isAuthenticated:x}=c();return x.value&&C("/modules"),(i,e)=>{const v=A,y=U,b=$("UFormGroup"),k=V,d=B,w=I;return u(),N("div",q,[t("div",E,[t("div",F,[t("div",G,[s(v,{name:"material-symbols:lock",class:"text-2xl text-white"})]),e[1]||(e[1]=t("h1",{class:"text-3xl font-bold text-gray-900 dark:text-white mb-2"}," Welcome ",-1)),e[2]||(e[2]=t("p",{class:"text-gray-600 dark:text-gray-400"}," Sign in to access your Terraform Registry ",-1))]),s(w,null,{default:l(()=>[t("div",L,[t("form",{onSubmit:j(g,["prevent"]),class:"space-y-6"},[s(b,{label:"API Token",name:"token",required:""},{default:l(()=>[s(y,{modelValue:a(o),"onUpdate:modelValue":e[0]||(e[0]=h=>S(o)?o.value=h:null),type:"password",placeholder:"Enter your API token",size:"lg",required:"",loading:a(r),class:"w-full"},null,8,["modelValue","loading"])]),_:1}),a(n)?(u(),z(k,{key:0,color:"error",variant:"soft",title:a(n),class:"mb-4"},null,8,["title"])):R("",!0),s(d,{type:"submit",loading:a(r),disabled:!a(o).trim(),class:"w-full",size:"lg",color:"primary"},{default:l(()=>e[3]||(e[3]=[_(" Sign In ")])),_:1,__:[3]},8,["loading","disabled"])],32)])]),_:1}),t("div",H,[s(d,{to:"/",variant:"ghost",color:"neutral",size:"sm"},{default:l(()=>e[4]||(e[4]=[_(" ← Back to Home ")])),_:1,__:[4]})])])])}}});export{Q as default}; diff --git a/TerraformRegistry/web/_nuxt/CyQxyuxc.js b/TerraformRegistry/web/_nuxt/CyQxyuxc.js deleted file mode 100644 index 3bf58e3..0000000 --- a/TerraformRegistry/web/_nuxt/CyQxyuxc.js +++ /dev/null @@ -1 +0,0 @@ -import{F as Ar,e as rr,I as Ir,y as D,J as Pr,K as Se,L as jr,G as tr,s as P,M as ke,N as Or,q as ye,O as pe,H as Y,P as Mr,Q as Gr,R as Vr,m as ze,S as We,l as N,T as Br,r as Ne,U as Nr,V as nr,W as $r,X as Tr,Y as sr,j as L,o as G,Z as $e,$ as Rr,a0 as Er,w as Z,a1 as Lr,v as H,c as ge,x as W,t as ar,a2 as Kr,a3 as Wr,E as ir,p as or,b as Dr,k as oe}from"./DfbLerQ4.js";import Hr from"./DZhRnb1V.js";import{_ as Jr}from"./CDgII3bh.js";function lr(e){return e?e.flatMap(r=>r.type===Ar?lr(r.children):[r]):[]}const cr=rr({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:r,slots:t}){return()=>{var o;if(!t.default)return null;const s=lr(t.default()),n=s.findIndex(d=>d.type!==Ir);if(n===-1)return s;const a=s[n];(o=a.props)==null||delete o.ref;const i=a.props?D(r,a.props):r,l=Pr({...a,props:{}},i);return s.length===1?l:(s[n]=l,s)}}}),Fr=["area","img","input"],Te=rr({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:r,slots:t}){const s=e.asChild?"template":e.as;return typeof s=="string"&&Fr.includes(s)?()=>Se(s,r):s!=="template"?()=>Se(e.as,r,{default:t.default}):()=>Se(cr,r,{default:t.default})}});function Re(e){const r=jr(),t=Object.keys((r==null?void 0:r.type.props)??{}).reduce((n,a)=>{const i=(r==null?void 0:r.type.props[a]).default;return i!==void 0&&(n[a]=i),n},{}),s=tr(e);return P(()=>{const n=ke(s.value),a={},i=(r==null?void 0:r.vnode.props)??{};return Object.keys(i).forEach(l=>{a[Or(l)]=i[l]}),Object.keys({...t,...a}).reduce((l,o)=>{var b;const d=(b=n[o])==null?void 0:b.value;return d!==void 0&&(l[o]=d),l},{})})}function Qr(e){const r=ye(),t=P(()=>pe(e)),s=P(()=>t.value.icon&&t.value.leading||t.value.icon&&!t.value.trailing||t.value.loading&&!t.value.trailing||!!t.value.leadingIcon),n=P(()=>t.value.icon&&t.value.trailing||t.value.loading&&t.value.trailing||!!t.value.trailingIcon),a=P(()=>t.value.loading?t.value.loadingIcon||r.ui.icons.loading:t.value.leadingIcon||t.value.icon),i=P(()=>t.value.loading&&!s.value?t.value.loadingIcon||r.ui.icons.loading:t.value.trailingIcon||t.value.icon);return{isLeading:s,isTrailing:n,leadingIconName:a,trailingIconName:i}}const Ur=Symbol("nuxt-ui.button-group");function Xr(e){const r=Y(Ur,void 0);return{orientation:P(()=>r==null?void 0:r.value.orientation),size:P(()=>(e==null?void 0:e.size)??(r==null?void 0:r.value.size))}}function Yr(e){return Gr()?(Vr(e),!0):!1}function yn(e){let r=0,t,s;const n=()=>{r-=1,s&&r<=0&&(s.stop(),t=void 0,s=void 0)};return(...a)=>(r+=1,s||(s=Mr(!0),t=s.run(()=>e(...a))),Yr(n),t)}function Zr(e){if(!ze(e))return We(e);const r=new Proxy({},{get(t,s,n){return N(Reflect.get(e.value,s,n))},set(t,s,n){return ze(e.value[s])&&!ze(n)?e.value[s].value=n:e.value[s]=n,!0},deleteProperty(t,s){return Reflect.deleteProperty(e.value,s)},has(t,s){return Reflect.has(e.value,s)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return We(r)}function ur(e){return Zr(P(e))}function _r(e,...r){const t=r.flat(),s=t[0];return ur(()=>Object.fromEntries(typeof s=="function"?Object.entries(ke(e)).filter(([n,a])=>!s(pe(a),n)):Object.entries(ke(e)).filter(n=>!t.includes(n[0]))))}typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ae=()=>{};function et(...e){if(e.length!==1)return tr(...e);const r=e[0];return typeof r=="function"?Br(Nr(()=>({get:r,set:Ae}))):Ne(r)}function dr(e,...r){const t=r.flat(),s=t[0];return ur(()=>Object.fromEntries(typeof s=="function"?Object.entries(ke(e)).filter(([n,a])=>s(pe(a),n)):t.map(n=>[n,et(e,n)])))}function rt(e,r){function t(...s){return new Promise((n,a)=>{Promise.resolve(e(()=>r.apply(this,s),{fn:r,thisArg:this,args:s})).then(n).catch(a)})}return t}function tt(e,r={}){let t,s,n=Ae;const a=o=>{clearTimeout(o),n(),n=Ae};let i;return o=>{const d=pe(e),b=pe(r.maxWait);return t&&a(t),d<=0||b!==void 0&&b<=0?(s&&(a(s),s=null),Promise.resolve(o())):new Promise((z,I)=>{n=r.rejectOnCancel?I:z,i=o,b&&!s&&(s=setTimeout(()=>{t&&a(t),s=null,z(i())},b)),t=setTimeout(()=>{s&&a(s),s=null,z(o())},d)})}}function nt(e,r=200,t={}){return rt(tt(r,t),e)}const st=Symbol("nuxt-ui.form-options"),at=Symbol("nuxt-ui.form-events"),De=Symbol("nuxt-ui.form-field"),it=Symbol("nuxt-ui.input-id"),ot=Symbol("nuxt-ui.form-inputs"),lt=Symbol("nuxt-ui.form-loading");function mn(e,r){const t=Y(st,void 0),s=Y(at,void 0),n=Y(De,void 0),a=Y(ot,void 0),i=Y(it,void 0);nr(De,void 0),n&&i&&((r==null?void 0:r.bind)===!1?i.value=void 0:e!=null&&e.id&&(i.value=e==null?void 0:e.id),a&&n.value.name&&i.value&&(a.value[n.value.name]={id:i.value,pattern:n.value.errorPattern}));function l(I,j,k){s&&n&&j&&s.emit({type:I,name:j,eager:k})}function o(){l("blur",n==null?void 0:n.value.name)}function d(){l("focus",n==null?void 0:n.value.name)}function b(){l("change",n==null?void 0:n.value.name)}const z=nt(()=>{l("input",n==null?void 0:n.value.name,n==null?void 0:n.value.eagerValidation)},(n==null?void 0:n.value.validateOnInputDelay)??(t==null?void 0:t.value.validateOnInputDelay)??0);return{id:P(()=>(e==null?void 0:e.id)??(i==null?void 0:i.value)),name:P(()=>(e==null?void 0:e.name)??(n==null?void 0:n.value.name)),size:P(()=>(e==null?void 0:e.size)??(n==null?void 0:n.value.size)),color:P(()=>n!=null&&n.value.error?"error":e==null?void 0:e.color),highlight:P(()=>n!=null&&n.value.error?!0:e==null?void 0:e.highlight),disabled:P(()=>(t==null?void 0:t.value.disabled)||(e==null?void 0:e.disabled)),emitFormBlur:o,emitFormInput:z,emitFormChange:b,emitFormFocus:d,ariaAttrs:P(()=>n!=null&&n.value?{"aria-describedby":(["error","hint","description","help"].filter(j=>{var k;return(k=n==null?void 0:n.value)==null?void 0:k[j]}).map(j=>`${n==null?void 0:n.value.ariaId}-${j}`)||[]).join(" "),"aria-invalid":!!(n!=null&&n.value.error)}:void 0)}}function ct(e,r){const t=Ie(e),s=Ie(r);return fr(t,s)}function fr(e,r){var n,a;const t=[],s=new Set([...Object.keys(e.props||{}),...Object.keys(r.props||{})]);if(e.props&&r.props)for(const i of s){const l=e.props[i],o=r.props[i];l&&o?t.push(...fr((n=e.props)==null?void 0:n[i],(a=r.props)==null?void 0:a[i])):(l||o)&&t.push(new He((o||l).key,l?"removed":"added",o,l))}return s.size===0&&e.hash!==r.hash&&t.push(new He((r||e).key,"changed",r,e)),t}function Ie(e,r=""){if(e&&typeof e!="object")return new Je(r,e,$r(e));const t={},s=[];for(const n in e)t[n]=Ie(e[n],r?`${r}.${n}`:n),s.push(t[n].hash);return new Je(r,e,`{${s.join(":")}}`,t)}class He{constructor(r,t,s,n){this.key=r,this.type=t,this.newValue=s,this.oldValue=n}toString(){return this.toJSON()}toJSON(){var r;switch(this.type){case"added":return`Added \`${this.key}\``;case"removed":return`Removed \`${this.key}\``;case"changed":return`Changed \`${this.key}\` from \`${((r=this.oldValue)==null?void 0:r.toString())||"-"}\` to \`${this.newValue.toString()}\``}}}class Je{constructor(r,t,s,n){this.key=r,this.value=t,this.hash=s,this.props=n}toString(){return this.props?`{${Object.keys(this.props).join(",")}}`:JSON.stringify(this.value)}toJSON(){const r=this.key||".";return this.props?`${r}({${Object.keys(this.props).join(",")}})`:`${r}(${this.value})`}}function ut(e,r){const t={...e};for(const s of r)delete t[s];return t}function hn(e,r,t){typeof r=="string"&&(r=r.split(".").map(n=>{const a=Number(n);return Number.isNaN(a)?n:a}));let s=e;for(const n of r){if(s==null)return t;s=s[n]}return s!==void 0?s:t}function xn(e){const r=Number.parseFloat(e);return Number.isNaN(r)?e:r}var Fe=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,E=e=>!e||typeof e!="object"||Object.keys(e).length===0,dt=(e,r)=>JSON.stringify(e)===JSON.stringify(r);function br(e,r){e.forEach(function(t){Array.isArray(t)?br(t,r):r.push(t)})}function gr(e){let r=[];return br(e,r),r}var pr=(...e)=>gr(e).filter(Boolean),Ee=(e,r)=>{let t={},s=Object.keys(e),n=Object.keys(r);for(let a of s)if(n.includes(a)){let i=e[a],l=r[a];Array.isArray(i)||Array.isArray(l)?t[a]=pr(l,i):typeof i=="object"&&typeof l=="object"?t[a]=Ee(i,l):t[a]=l+" "+i}else t[a]=e[a];for(let a of n)s.includes(a)||(t[a]=r[a]);return t},Qe=e=>!e||typeof e!="string"?e:e.replace(/\s+/g," ").trim();const Le="-",ft=e=>{const r=gt(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:s}=e;return{getClassGroupId:i=>{const l=i.split(Le);return l[0]===""&&l.length!==1&&l.shift(),vr(l,r)||bt(i)},getConflictingClassGroupIds:(i,l)=>{const o=t[i]||[];return l&&s[i]?[...o,...s[i]]:o}}},vr=(e,r)=>{var i;if(e.length===0)return r.classGroupId;const t=e[0],s=r.nextPart.get(t),n=s?vr(e.slice(1),s):void 0;if(n)return n;if(r.validators.length===0)return;const a=e.join(Le);return(i=r.validators.find(({validator:l})=>l(a)))==null?void 0:i.classGroupId},Ue=/^\[(.+)\]$/,bt=e=>{if(Ue.test(e)){const r=Ue.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},gt=e=>{const{theme:r,classGroups:t}=e,s={nextPart:new Map,validators:[]};for(const n in t)Pe(t[n],s,n,r);return s},Pe=(e,r,t,s)=>{e.forEach(n=>{if(typeof n=="string"){const a=n===""?r:Xe(r,n);a.classGroupId=t;return}if(typeof n=="function"){if(pt(n)){Pe(n(s),r,t,s);return}r.validators.push({validator:n,classGroupId:t});return}Object.entries(n).forEach(([a,i])=>{Pe(i,Xe(r,a),t,s)})})},Xe=(e,r)=>{let t=e;return r.split(Le).forEach(s=>{t.nextPart.has(s)||t.nextPart.set(s,{nextPart:new Map,validators:[]}),t=t.nextPart.get(s)}),t},pt=e=>e.isThemeGetter,vt=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,s=new Map;const n=(a,i)=>{t.set(a,i),r++,r>e&&(r=0,s=t,t=new Map)};return{get(a){let i=t.get(a);if(i!==void 0)return i;if((i=s.get(a))!==void 0)return n(a,i),i},set(a,i){t.has(a)?t.set(a,i):n(a,i)}}},je="!",Oe=":",yt=Oe.length,mt=e=>{const{prefix:r,experimentalParseClassName:t}=e;let s=n=>{const a=[];let i=0,l=0,o=0,d;for(let k=0;ko?d-o:void 0;return{modifiers:a,hasImportantModifier:I,baseClassName:z,maybePostfixModifierPosition:j}};if(r){const n=r+Oe,a=s;s=i=>i.startsWith(n)?a(i.substring(n.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:i,maybePostfixModifierPosition:void 0}}if(t){const n=s;s=a=>t({className:a,parseClassName:n})}return s},ht=e=>e.endsWith(je)?e.substring(0,e.length-1):e.startsWith(je)?e.substring(1):e,xt=e=>{const r=Object.fromEntries(e.orderSensitiveModifiers.map(s=>[s,!0]));return s=>{if(s.length<=1)return s;const n=[];let a=[];return s.forEach(i=>{i[0]==="["||r[i]?(n.push(...a.sort(),i),a=[]):a.push(i)}),n.push(...a.sort()),n}},wt=e=>({cache:vt(e.cacheSize),parseClassName:mt(e),sortModifiers:xt(e),...ft(e)}),kt=/\s+/,St=(e,r)=>{const{parseClassName:t,getClassGroupId:s,getConflictingClassGroupIds:n,sortModifiers:a}=r,i=[],l=e.trim().split(kt);let o="";for(let d=l.length-1;d>=0;d-=1){const b=l[d],{isExternal:z,modifiers:I,hasImportantModifier:j,baseClassName:k,maybePostfixModifierPosition:q}=t(b);if(z){o=b+(o.length>0?" "+o:o);continue}let A=!!q,$=s(A?k.substring(0,q):k);if(!$){if(!A){o=b+(o.length>0?" "+o:o);continue}if($=s(k),!$){o=b+(o.length>0?" "+o:o);continue}A=!1}const v=a(I).join(":"),T=j?v+je:v,K=T+$;if(i.includes(K))continue;i.push(K);const V=n($,A);for(let g=0;g0?" "+o:o)}return o};function zt(){let e=0,r,t,s="";for(;e{if(typeof e=="string")return e;let r,t="";for(let s=0;sz(b),e());return t=wt(d),s=t.cache.get,n=t.cache.set,a=l,l(o)}function l(o){const d=s(o);if(d)return d;const b=St(o,t);return n(o,b),b}return function(){return a(zt.apply(null,arguments))}}const M=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},mr=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,hr=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ct=/^\d+\/\d+$/,qt=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,At=/\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$/,It=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Pt=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,jt=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ie=e=>Ct.test(e),x=e=>!!e&&!Number.isNaN(Number(e)),re=e=>!!e&&Number.isInteger(Number(e)),Ye=e=>e.endsWith("%")&&x(e.slice(0,-1)),X=e=>qt.test(e),Ot=()=>!0,Mt=e=>At.test(e)&&!It.test(e),Ke=()=>!1,Gt=e=>Pt.test(e),Vt=e=>jt.test(e),Bt=e=>!c(e)&&!u(e),Nt=e=>le(e,kr,Ke),c=e=>mr.test(e),te=e=>le(e,Sr,Mt),Ce=e=>le(e,Ft,x),$t=e=>le(e,xr,Ke),Tt=e=>le(e,wr,Vt),Rt=e=>le(e,Ke,Gt),u=e=>hr.test(e),he=e=>ce(e,Sr),Et=e=>ce(e,Qt),Lt=e=>ce(e,xr),Kt=e=>ce(e,kr),Wt=e=>ce(e,wr),Dt=e=>ce(e,Ut,!0),le=(e,r,t)=>{const s=mr.exec(e);return s?s[1]?r(s[1]):t(s[2]):!1},ce=(e,r,t=!1)=>{const s=hr.exec(e);return s?s[1]?r(s[1]):t:!1},xr=e=>e==="position",Ht=new Set(["image","url"]),wr=e=>Ht.has(e),Jt=new Set(["length","size","percentage"]),kr=e=>Jt.has(e),Sr=e=>e==="length",Ft=e=>e==="number",Qt=e=>e==="family-name",Ut=e=>e==="shadow",Ge=()=>{const e=M("color"),r=M("font"),t=M("text"),s=M("font-weight"),n=M("tracking"),a=M("leading"),i=M("breakpoint"),l=M("container"),o=M("spacing"),d=M("radius"),b=M("shadow"),z=M("inset-shadow"),I=M("drop-shadow"),j=M("blur"),k=M("perspective"),q=M("aspect"),A=M("ease"),$=M("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],K=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto","contain","none"],g=()=>[u,c,o],B=()=>[ie,"full","auto",...g()],ue=()=>[re,"none","subgrid",u,c],de=()=>["auto",{span:["full",re,u,c]},u,c],ne=()=>[re,"auto",u,c],me=()=>["auto","min","max","fr",u,c],h=()=>["start","end","center","between","around","evenly","stretch","baseline"],y=()=>["start","end","center","stretch"],p=()=>["auto",...g()],w=()=>[ie,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...g()],f=()=>[e,u,c],C=()=>[Ye,te],m=()=>["","none","full",d,u,c],S=()=>["",x,he,te],O=()=>["solid","dashed","dotted","double"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],R=()=>["","none",j,u,c],ee=()=>["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",u,c],Q=()=>["none",x,u,c],U=()=>["none",x,u,c],se=()=>[x,u,c],ae=()=>[ie,"full",...g()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[X],breakpoint:[X],color:[Ot],container:[X],"drop-shadow":[X],ease:["in","out","in-out"],font:[Bt],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[X],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[X],shadow:[X],spacing:["px",x],text:[X],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ie,c,u,q]}],container:["container"],columns:[{columns:[x,c,u,l]}],"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:[...T(),c,u]}],overflow:[{overflow:K()}],"overflow-x":[{"overflow-x":K()}],"overflow-y":[{"overflow-y":K()}],overscroll:[{overscroll:V()}],"overscroll-x":[{"overscroll-x":V()}],"overscroll-y":[{"overscroll-y":V()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:B()}],"inset-x":[{"inset-x":B()}],"inset-y":[{"inset-y":B()}],start:[{start:B()}],end:[{end:B()}],top:[{top:B()}],right:[{right:B()}],bottom:[{bottom:B()}],left:[{left:B()}],visibility:["visible","invisible","collapse"],z:[{z:[re,"auto",u,c]}],basis:[{basis:[ie,"full","auto",l,...g()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[x,ie,"auto","initial","none",c]}],grow:[{grow:["",x,u,c]}],shrink:[{shrink:["",x,u,c]}],order:[{order:[re,"first","last","none",u,c]}],"grid-cols":[{"grid-cols":ue()}],"col-start-end":[{col:de()}],"col-start":[{"col-start":ne()}],"col-end":[{"col-end":ne()}],"grid-rows":[{"grid-rows":ue()}],"row-start-end":[{row:de()}],"row-start":[{"row-start":ne()}],"row-end":[{"row-end":ne()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":me()}],"auto-rows":[{"auto-rows":me()}],gap:[{gap:g()}],"gap-x":[{"gap-x":g()}],"gap-y":[{"gap-y":g()}],"justify-content":[{justify:[...h(),"normal"]}],"justify-items":[{"justify-items":[...y(),"normal"]}],"justify-self":[{"justify-self":["auto",...y()]}],"align-content":[{content:["normal",...h()]}],"align-items":[{items:[...y(),"baseline"]}],"align-self":[{self:["auto",...y(),"baseline"]}],"place-content":[{"place-content":h()}],"place-items":[{"place-items":[...y(),"baseline"]}],"place-self":[{"place-self":["auto",...y()]}],p:[{p:g()}],px:[{px:g()}],py:[{py:g()}],ps:[{ps:g()}],pe:[{pe:g()}],pt:[{pt:g()}],pr:[{pr:g()}],pb:[{pb:g()}],pl:[{pl:g()}],m:[{m:p()}],mx:[{mx:p()}],my:[{my:p()}],ms:[{ms:p()}],me:[{me:p()}],mt:[{mt:p()}],mr:[{mr:p()}],mb:[{mb:p()}],ml:[{ml:p()}],"space-x":[{"space-x":g()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":g()}],"space-y-reverse":["space-y-reverse"],size:[{size:w()}],w:[{w:[l,"screen",...w()]}],"min-w":[{"min-w":[l,"screen","none",...w()]}],"max-w":[{"max-w":[l,"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",t,he,te]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[s,u,Ce]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Ye,c]}],"font-family":[{font:[Et,c,r]}],"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:[n,u,c]}],"line-clamp":[{"line-clamp":[x,"none",u,Ce]}],leading:[{leading:[a,...g()]}],"list-image":[{"list-image":["none",u,c]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",u,c]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:f()}],"text-color":[{text:f()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...O(),"wavy"]}],"text-decoration-thickness":[{decoration:[x,"from-font","auto",u,te]}],"text-decoration-color":[{decoration:f()}],"underline-offset":[{"underline-offset":[x,"auto",u,c]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:g()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",u,c]}],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",u,c]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...T(),Lt,$t]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","space","round"]}]}],"bg-size":[{bg:["auto","cover","contain",Kt,Nt]}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},re,u,c],radial:["",u,c],conic:[re,u,c]},Wt,Tt]}],"bg-color":[{bg:f()}],"gradient-from-pos":[{from:C()}],"gradient-via-pos":[{via:C()}],"gradient-to-pos":[{to:C()}],"gradient-from":[{from:f()}],"gradient-via":[{via:f()}],"gradient-to":[{to:f()}],rounded:[{rounded:m()}],"rounded-s":[{"rounded-s":m()}],"rounded-e":[{"rounded-e":m()}],"rounded-t":[{"rounded-t":m()}],"rounded-r":[{"rounded-r":m()}],"rounded-b":[{"rounded-b":m()}],"rounded-l":[{"rounded-l":m()}],"rounded-ss":[{"rounded-ss":m()}],"rounded-se":[{"rounded-se":m()}],"rounded-ee":[{"rounded-ee":m()}],"rounded-es":[{"rounded-es":m()}],"rounded-tl":[{"rounded-tl":m()}],"rounded-tr":[{"rounded-tr":m()}],"rounded-br":[{"rounded-br":m()}],"rounded-bl":[{"rounded-bl":m()}],"border-w":[{border:S()}],"border-w-x":[{"border-x":S()}],"border-w-y":[{"border-y":S()}],"border-w-s":[{"border-s":S()}],"border-w-e":[{"border-e":S()}],"border-w-t":[{"border-t":S()}],"border-w-r":[{"border-r":S()}],"border-w-b":[{"border-b":S()}],"border-w-l":[{"border-l":S()}],"divide-x":[{"divide-x":S()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":S()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...O(),"hidden","none"]}],"divide-style":[{divide:[...O(),"hidden","none"]}],"border-color":[{border:f()}],"border-color-x":[{"border-x":f()}],"border-color-y":[{"border-y":f()}],"border-color-s":[{"border-s":f()}],"border-color-e":[{"border-e":f()}],"border-color-t":[{"border-t":f()}],"border-color-r":[{"border-r":f()}],"border-color-b":[{"border-b":f()}],"border-color-l":[{"border-l":f()}],"divide-color":[{divide:f()}],"outline-style":[{outline:[...O(),"none","hidden"]}],"outline-offset":[{"outline-offset":[x,u,c]}],"outline-w":[{outline:["",x,he,te]}],"outline-color":[{outline:[e]}],shadow:[{shadow:["","none",b,Dt,Rt]}],"shadow-color":[{shadow:f()}],"inset-shadow":[{"inset-shadow":["none",u,c,z]}],"inset-shadow-color":[{"inset-shadow":f()}],"ring-w":[{ring:S()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:f()}],"ring-offset-w":[{"ring-offset":[x,te]}],"ring-offset-color":[{"ring-offset":f()}],"inset-ring-w":[{"inset-ring":S()}],"inset-ring-color":[{"inset-ring":f()}],opacity:[{opacity:[x,u,c]}],"mix-blend":[{"mix-blend":[...J(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none",u,c]}],blur:[{blur:R()}],brightness:[{brightness:[x,u,c]}],contrast:[{contrast:[x,u,c]}],"drop-shadow":[{"drop-shadow":["","none",I,u,c]}],grayscale:[{grayscale:["",x,u,c]}],"hue-rotate":[{"hue-rotate":[x,u,c]}],invert:[{invert:["",x,u,c]}],saturate:[{saturate:[x,u,c]}],sepia:[{sepia:["",x,u,c]}],"backdrop-filter":[{"backdrop-filter":["","none",u,c]}],"backdrop-blur":[{"backdrop-blur":R()}],"backdrop-brightness":[{"backdrop-brightness":[x,u,c]}],"backdrop-contrast":[{"backdrop-contrast":[x,u,c]}],"backdrop-grayscale":[{"backdrop-grayscale":["",x,u,c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[x,u,c]}],"backdrop-invert":[{"backdrop-invert":["",x,u,c]}],"backdrop-opacity":[{"backdrop-opacity":[x,u,c]}],"backdrop-saturate":[{"backdrop-saturate":[x,u,c]}],"backdrop-sepia":[{"backdrop-sepia":["",x,u,c]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":g()}],"border-spacing-x":[{"border-spacing-x":g()}],"border-spacing-y":[{"border-spacing-y":g()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",u,c]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[x,"initial",u,c]}],ease:[{ease:["linear","initial",A,u,c]}],delay:[{delay:[x,u,c]}],animate:[{animate:["none",$,u,c]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[k,u,c]}],"perspective-origin":[{"perspective-origin":ee()}],rotate:[{rotate:Q()}],"rotate-x":[{"rotate-x":Q()}],"rotate-y":[{"rotate-y":Q()}],"rotate-z":[{"rotate-z":Q()}],scale:[{scale:U()}],"scale-x":[{"scale-x":U()}],"scale-y":[{"scale-y":U()}],"scale-z":[{"scale-z":U()}],"scale-3d":["scale-3d"],skew:[{skew:se()}],"skew-x":[{"skew-x":se()}],"skew-y":[{"skew-y":se()}],transform:[{transform:[u,c,"","none","gpu","cpu"]}],"transform-origin":[{origin:ee()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:ae()}],"translate-x":[{"translate-x":ae()}],"translate-y":[{"translate-y":ae()}],"translate-z":[{"translate-z":ae()}],"translate-none":["translate-none"],accent:[{accent:f()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:f()}],"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",u,c]}],"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":g()}],"scroll-mx":[{"scroll-mx":g()}],"scroll-my":[{"scroll-my":g()}],"scroll-ms":[{"scroll-ms":g()}],"scroll-me":[{"scroll-me":g()}],"scroll-mt":[{"scroll-mt":g()}],"scroll-mr":[{"scroll-mr":g()}],"scroll-mb":[{"scroll-mb":g()}],"scroll-ml":[{"scroll-ml":g()}],"scroll-p":[{"scroll-p":g()}],"scroll-px":[{"scroll-px":g()}],"scroll-py":[{"scroll-py":g()}],"scroll-ps":[{"scroll-ps":g()}],"scroll-pe":[{"scroll-pe":g()}],"scroll-pt":[{"scroll-pt":g()}],"scroll-pr":[{"scroll-pr":g()}],"scroll-pb":[{"scroll-pb":g()}],"scroll-pl":[{"scroll-pl":g()}],"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",u,c]}],fill:[{fill:["none",...f()]}],"stroke-w":[{stroke:[x,he,te,Ce]}],stroke:[{stroke:["none",...f()]}],"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","*","**"]}},Xt=(e,{cacheSize:r,prefix:t,experimentalParseClassName:s,extend:n={},override:a={}})=>(be(e,"cacheSize",r),be(e,"prefix",t),be(e,"experimentalParseClassName",s),xe(e.theme,a.theme),xe(e.classGroups,a.classGroups),xe(e.conflictingClassGroups,a.conflictingClassGroups),xe(e.conflictingClassGroupModifiers,a.conflictingClassGroupModifiers),be(e,"orderSensitiveModifiers",a.orderSensitiveModifiers),we(e.theme,n.theme),we(e.classGroups,n.classGroups),we(e.conflictingClassGroups,n.conflictingClassGroups),we(e.conflictingClassGroupModifiers,n.conflictingClassGroupModifiers),zr(e,n,"orderSensitiveModifiers"),e),be=(e,r,t)=>{t!==void 0&&(e[r]=t)},xe=(e,r)=>{if(r)for(const t in r)be(e,t,r[t])},we=(e,r)=>{if(r)for(const t in r)zr(e,r,t)},zr=(e,r,t)=>{const s=r[t];s!==void 0&&(e[t]=e[t]?e[t].concat(s):s)},Yt=(e,...r)=>typeof e=="function"?Me(Ge,e,...r):Me(()=>Xt(Ge(),e),...r),Zt=Me(Ge);var _t={twMerge:!0,twMergeConfig:{},responsiveVariants:!1},Cr=e=>e||void 0,ve=(...e)=>Cr(gr(e).filter(Boolean).join(" ")),qe=null,F={},Ve=!1,fe=(...e)=>r=>r.twMerge?((!qe||Ve)&&(Ve=!1,qe=E(F)?Zt:Yt({...F,extend:{theme:F.theme,classGroups:F.classGroups,conflictingClassGroupModifiers:F.conflictingClassGroupModifiers,conflictingClassGroups:F.conflictingClassGroups,...F.extend}})),Cr(qe(ve(e)))):ve(e),Ze=(e,r)=>{for(let t in r)e.hasOwnProperty(t)?e[t]=ve(e[t],r[t]):e[t]=r[t];return e},en=(e,r)=>{let{extend:t=null,slots:s={},variants:n={},compoundVariants:a=[],compoundSlots:i=[],defaultVariants:l={}}=e,o={..._t,...r},d=t!=null&&t.base?ve(t.base,e==null?void 0:e.base):e==null?void 0:e.base,b=t!=null&&t.variants&&!E(t.variants)?Ee(n,t.variants):n,z=t!=null&&t.defaultVariants&&!E(t.defaultVariants)?{...t.defaultVariants,...l}:l;!E(o.twMergeConfig)&&!dt(o.twMergeConfig,F)&&(Ve=!0,F=o.twMergeConfig);let I=E(t==null?void 0:t.slots),j=E(s)?{}:{base:ve(e==null?void 0:e.base,I&&(t==null?void 0:t.base)),...s},k=I?j:Ze({...t==null?void 0:t.slots},E(j)?{base:e==null?void 0:e.base}:j),q=E(t==null?void 0:t.compoundVariants)?a:pr(t==null?void 0:t.compoundVariants,a),A=v=>{if(E(b)&&E(s)&&I)return fe(d,v==null?void 0:v.class,v==null?void 0:v.className)(o);if(q&&!Array.isArray(q))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof q}`);if(i&&!Array.isArray(i))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof i}`);let T=(h,y,p=[],w)=>{let f=p;if(typeof y=="string")f=f.concat(Qe(y).split(" ").map(C=>`${h}:${C}`));else if(Array.isArray(y))f=f.concat(y.reduce((C,m)=>C.concat(`${h}:${m}`),[]));else if(typeof y=="object"&&typeof w=="string"){for(let C in y)if(y.hasOwnProperty(C)&&C===w){let m=y[C];if(m&&typeof m=="string"){let S=Qe(m);f[w]?f[w]=f[w].concat(S.split(" ").map(O=>`${h}:${O}`)):f[w]=S.split(" ").map(O=>`${h}:${O}`)}else Array.isArray(m)&&m.length>0&&(f[w]=m.reduce((S,O)=>S.concat(`${h}:${O}`),[]))}}return f},K=(h,y=b,p=null,w=null)=>{var f;let C=y[h];if(!C||E(C))return null;let m=(f=w==null?void 0:w[h])!=null?f:v==null?void 0:v[h];if(m===null)return null;let S=Fe(m),O=Array.isArray(o.responsiveVariants)&&o.responsiveVariants.length>0||o.responsiveVariants===!0,J=z==null?void 0:z[h],R=[];if(typeof S=="object"&&O)for(let[U,se]of Object.entries(S)){let ae=C[se];if(U==="initial"){J=se;continue}Array.isArray(o.responsiveVariants)&&!o.responsiveVariants.includes(U)||(R=T(U,ae,R,p))}let ee=S!=null&&typeof S!="object"?S:Fe(J),Q=C[ee||"false"];return typeof R=="object"&&typeof p=="string"&&R[p]?Ze(R,Q):R.length>0?(R.push(Q),p==="base"?R.join(" "):R):Q},V=()=>b?Object.keys(b).map(h=>K(h,b)):null,g=(h,y)=>{if(!b||typeof b!="object")return null;let p=new Array;for(let w in b){let f=K(w,b,h,y),C=h==="base"&&typeof f=="string"?f:f&&f[h];C&&(p[p.length]=C)}return p},B={};for(let h in v)v[h]!==void 0&&(B[h]=v[h]);let ue=(h,y)=>{var p;let w=typeof(v==null?void 0:v[h])=="object"?{[h]:(p=v[h])==null?void 0:p.initial}:{};return{...z,...B,...w,...y}},de=(h=[],y)=>{let p=[];for(let{class:w,className:f,...C}of h){let m=!0;for(let[S,O]of Object.entries(C)){let J=ue(S,y)[S];if(Array.isArray(O)){if(!O.includes(J)){m=!1;break}}else{let R=ee=>ee==null||ee===!1;if(R(O)&&R(J))continue;if(J!==O){m=!1;break}}}m&&(w&&p.push(w),f&&p.push(f))}return p},ne=h=>{let y=de(q,h);if(!Array.isArray(y))return y;let p={};for(let w of y)if(typeof w=="string"&&(p.base=fe(p.base,w)(o)),typeof w=="object")for(let[f,C]of Object.entries(w))p[f]=fe(p[f],C)(o);return p},me=h=>{if(i.length<1)return null;let y={};for(let{slots:p=[],class:w,className:f,...C}of i){if(!E(C)){let m=!0;for(let S of Object.keys(C)){let O=ue(S,h)[S];if(O===void 0||(Array.isArray(C[S])?!C[S].includes(O):C[S]!==O)){m=!1;break}}if(!m)continue}for(let m of p)y[m]=y[m]||[],y[m].push([w,f])}return y};if(!E(s)||!I){let h={};if(typeof k=="object"&&!E(k))for(let y of Object.keys(k))h[y]=p=>{var w,f;return fe(k[y],g(y,p),((w=ne(p))!=null?w:[])[y],((f=me(p))!=null?f:[])[y],p==null?void 0:p.class,p==null?void 0:p.className)(o)};return h}return fe(d,V(),de(q),v==null?void 0:v.class,v==null?void 0:v.className)(o)},$=()=>{if(!(!b||typeof b!="object"))return Object.keys(b)};return A.variantKeys=$(),A.extend=t,A.base=d,A.slots=k,A.variants=b,A.defaultVariants=z,A.compoundSlots=i,A.compoundVariants=q,A},rn=e=>(r,t)=>en(r,t?Ee(e,t):e);const tn=Tr;var er;const _=rn((er=tn.ui)==null?void 0:er.tv);function nn(e){const r=Object.keys(e),t=r.filter(a=>a.startsWith("aria-")),s=r.filter(a=>a.startsWith("data-")),n=["active","activeClass","ariaCurrentValue","as","disabled","exact","exactActiveClass","exactHash","exactQuery","external","href","download","inactiveClass","noPrefetch","noRel","prefetch","prefetchedClass","rel","replace","target","to","type","title","onClick",...t,...s];return dr(e,...n)}function sn(e,r){const t=ct(e,r).reduce((a,i)=>(i.type==="added"&&a.add(i.key),a),new Set),s=Object.fromEntries(Object.entries(e).filter(([a])=>!t.has(a))),n=Object.fromEntries(Object.entries(r).filter(([a])=>!t.has(a)));return sr(s,n)}const Be={__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 t=Re(dr(e,"name","mode","size","customize"));return(s,n)=>{const a=Hr;return G(),L(a,$e(Rr(N(t))),null,16)}}},an="img",_e=Symbol("nuxt-ui.avatar-group");function on(e){const r=Y(_e,void 0),t=P(()=>e.size??(r==null?void 0:r.value.size));return nr(_e,P(()=>({size:t.value}))),{size:t}}const ln={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"}},cn=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 r=e,t=P(()=>r.text||(r.alt||"").split(" ").map(d=>d.charAt(0)).join("").substring(0,2)),s=ye(),{size:n}=on(r),a=P(()=>{var d;return _({extend:_(ln),...((d=s.ui)==null?void 0:d.avatar)||{}})({size:n.value})}),i=P(()=>({"3xs":16,"2xs":20,xs:24,sm:28,md:32,lg:36,xl:40,"2xl":44,"3xl":48})[r.size||"md"]),l=Ne(!1);Er(()=>r.src,()=>{l.value&&(l.value=!1)});function o(){l.value=!0}return(d,b)=>{var z;return G(),L(N(Te),{as:e.as,class:W(a.value.root({class:[(z=r.ui)==null?void 0:z.root,r.class]})),style:Kr(r.style)},{default:Z(()=>{var I;return[e.src&&!l.value?(G(),L(Lr(N(an)),D({key:0,role:"img",src:e.src,alt:e.alt,width:i.value,height:i.value},d.$attrs,{class:a.value.image({class:(I=r.ui)==null?void 0:I.image}),onError:o}),null,16,["src","alt","width","height","class"])):(G(),L(N(cr),$e(D({key:1},d.$attrs)),{default:Z(()=>[H(d.$slots,"default",{},()=>{var j,k;return[e.icon?(G(),L(Be,{key:0,name:e.icon,class:W(a.value.icon({class:(j=r.ui)==null?void 0:j.icon}))},null,8,["name","class"])):(G(),ge("span",{key:1,class:W(a.value.fallback({class:(k=r.ui)==null?void 0:k.fallback}))},ar(t.value||" "),3))]})]),_:3},16))]}),_:3},8,["as","class","style"])}}}),qr={__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 r=e;function t(s){if(r.disabled){s.stopPropagation(),s.preventDefault();return}if(r.onClick)for(const n of Array.isArray(r.onClick)?r.onClick:[r.onClick])n(s);r.href&&r.navigate&&!r.isExternal&&r.navigate(s)}return(s,n)=>(G(),L(N(Te),D(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:t}),{default:Z(()=>[H(s.$slots,"default")]),_:3},16,["rel","target"]))}},un={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"]}]},dn=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 r=e,t=Wr(),s=ye(),n=Re(_r(r,"as","type","disabled","active","exact","exactQuery","exactHash","activeClass","inactiveClass","to","href","raw","custom","class")),a=P(()=>{var d;return _({extend:_(un),...ir({variants:{active:{true:r.activeClass,false:r.inactiveClass}}},((d=s.ui)==null?void 0:d.link)||{})})}),i=P(()=>r.to??r.href);function l({route:d,isActive:b,isExactActive:z}){if(r.active!==void 0)return r.active;if(r.exactQuery==="partial"){if(!sn(d.query,t.query))return!1}else if(r.exactQuery===!0&&!sr(d.query,t.query))return!1;return r.exactHash&&d.hash!==t.hash?!1:!!(r.exact&&z||!r.exact&&b)}function o({route:d,isActive:b,isExactActive:z}){const I=l({route:d,isActive:b,isExactActive:z});return r.raw?[r.class,I?r.activeClass:r.inactiveClass]:a.value({class:r.class,active:I,disabled:r.disabled})}return(d,b)=>{const z=Jr;return G(),L(z,D(N(n),{to:i.value,custom:""}),{default:Z(({href:I,navigate:j,route:k,rel:q,target:A,isExternal:$,isActive:v,isExactActive:T})=>[e.custom?H(d.$slots,"default",$e(D({key:0},{...d.$attrs,...e.exact&&T?{"aria-current":r.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:I,navigate:j,rel:q,target:A,isExternal:$,active:l({route:k,isActive:v,isExactActive:T})}))):(G(),L(qr,D({key:1},{...d.$attrs,...e.exact&&T?{"aria-current":r.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:I,navigate:j,rel:q,target:A,isExternal:$},{class:o({route:k,isActive:v,isExactActive:T})}),{default:Z(()=>[H(d.$slots,"default",{active:l({route:k,isActive:v,isExactActive:T})})]),_:2},1040,["class"]))]),_:3},16,["to"])}}}),fn={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"}},wn={__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 r=e,t=or(),s=ye(),{orientation:n,size:a}=Xr(r),i=Re(nn(r)),l=Ne(!1),o=Y(lt,void 0);async function d(A){l.value=!0;const $=Array.isArray(r.onClick)?r.onClick:[r.onClick];try{await Promise.all($.map(v=>v==null?void 0:v(A)))}finally{l.value=!1}}const b=P(()=>r.loading||r.loadingAuto&&(l.value||(o==null?void 0:o.value)&&r.type==="submit")),{isLeading:z,isTrailing:I,leadingIconName:j,trailingIconName:k}=Qr(P(()=>({...r,loading:b.value}))),q=P(()=>{var A;return _({extend:_(fn),...ir({variants:{active:{true:{base:r.activeClass},false:{base:r.inactiveClass}}}},((A=s.ui)==null?void 0:A.button)||{})})({color:r.color,variant:r.variant,size:a.value,loading:b.value,block:r.block,square:r.square||!t.default&&!r.label,leading:z.value,trailing:I.value,buttonGroup:n.value})});return(A,$)=>(G(),L(dn,D({type:e.type,disabled:e.disabled||b.value},N(ut)(N(i),["type","disabled","onClick"]),{custom:""}),{default:Z(({active:v,...T})=>{var K;return[Dr(qr,D(T,{class:q.value.base({class:[(K=r.ui)==null?void 0:K.base,r.class],active:v,...v&&e.activeVariant?{variant:e.activeVariant}:{},...v&&e.activeColor?{color:e.activeColor}:{}}),onClick:d}),{default:Z(()=>[H(A.$slots,"leading",{},()=>{var V,g,B;return[N(z)&&N(j)?(G(),L(Be,{key:0,name:N(j),class:W(q.value.leadingIcon({class:(V=r.ui)==null?void 0:V.leadingIcon,active:v}))},null,8,["name","class"])):e.avatar?(G(),L(cn,D({key:1,size:((g=r.ui)==null?void 0:g.leadingAvatarSize)||q.value.leadingAvatarSize()},e.avatar,{class:q.value.leadingAvatar({class:(B=r.ui)==null?void 0:B.leadingAvatar,active:v})}),null,16,["size","class"])):oe("",!0)]}),H(A.$slots,"default",{},()=>{var V;return[e.label!==void 0&&e.label!==null?(G(),ge("span",{key:0,class:W(q.value.label({class:(V=r.ui)==null?void 0:V.label,active:v}))},ar(e.label),3)):oe("",!0)]}),H(A.$slots,"trailing",{},()=>{var V;return[N(I)&&N(k)?(G(),L(Be,{key:0,name:N(k),class:W(q.value.trailingIcon({class:(V=r.ui)==null?void 0:V.trailingIcon,active:v}))},null,8,["name","class"])):oe("",!0)]})]),_:2},1040,["class"])]}),_:3},16,["type","disabled"]))}},bn={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"}},kn={__name:"Card",props:{as:{type:null,required:!1},variant:{type:null,required:!1},class:{type:null,required:!1},ui:{type:null,required:!1}},setup(e){const r=e,t=or(),s=ye(),n=P(()=>{var a;return _({extend:_(bn),...((a=s.ui)==null?void 0:a.card)||{}})({variant:r.variant})});return(a,i)=>{var l;return G(),L(N(Te),{as:e.as,class:W(n.value.root({class:[(l=r.ui)==null?void 0:l.root,r.class]}))},{default:Z(()=>{var o,d,b;return[t.header?(G(),ge("div",{key:0,class:W(n.value.header({class:(o=r.ui)==null?void 0:o.header}))},[H(a.$slots,"header")],2)):oe("",!0),t.default?(G(),ge("div",{key:1,class:W(n.value.body({class:(d=r.ui)==null?void 0:d.body}))},[H(a.$slots,"default")],2)):oe("",!0),t.footer?(G(),ge("div",{key:2,class:W(n.value.footer({class:(b=r.ui)==null?void 0:b.footer}))},[H(a.$slots,"footer")],2)):oe("",!0)]}),_:3},8,["as","class"])}}};export{Te as P,wn as _,kn as a,Qr as b,Be as c,cn as d,mn as e,yn as f,hn as g,xn as l,_ as t,Xr as u}; 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/DZhRnb1V.js b/TerraformRegistry/web/_nuxt/DZhRnb1V.js deleted file mode 100644 index 4d74462..0000000 --- a/TerraformRegistry/web/_nuxt/DZhRnb1V.js +++ /dev/null @@ -1,6 +0,0 @@ -import{q as w,s as S,ak as b,al as B,e as x,a5 as C,a0 as T,K as N,am as q,an as P}from"./DfbLerQ4.js";const E=Object.freeze({left:0,top:0,width:16,height:16}),R=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),I=Object.freeze({...E,...R});Object.freeze({...I,body:"",hidden:!1});function L(e,s){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in s)n+=" "+o+'="'+s[o]+'"';return'"+e+""}const M=/(-?[0-9.]*[0-9]+[0-9.]*)/g,V=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function v(e,s,n){if(s===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*s*n)/n;if(typeof e!="string")return e;const o=e.split(M);if(o===null||!o.length)return e;const t=[];let r=o.shift(),i=V.test(r);for(;;){if(i){const c=parseFloat(r);isNaN(c)?t.push(r):t.push(Math.ceil(c*s*n)/n)}else t.push(r);if(r=o.shift(),r===void 0)return t.join("");i=!i}}function W(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function _(e){return"data:image/svg+xml,"+W(e)}function D(e){return'url("'+_(e)+'")'}function G(e){const[s,n,o,t]=e;if(o!==t){const r=Math.max(o,t);return[s-(r-o)/2,n-(r-t)/2,r,r]}return e}const H=Object.freeze({width:null,height:null}),K=Object.freeze({...H,...R});function U(e,s="defs"){let n="";const o=e.indexOf("<"+s);for(;o>=0;){const t=e.indexOf(">",o),r=e.indexOf("",r);if(i===-1)break;n+=e.slice(t+1,r).trim(),e=e.slice(0,o).trim()+e.slice(i+1)}return{defs:n,content:e}}function J(e,s){return e?""+e+""+s:s}function Q(e,s,n){const o=U(e);return J(o.defs,s+o.content+n)}const X=e=>e==="unset"||e==="undefined"||e==="none";function Y(e,s){const n={...I,...e},o={...K,...s},t={left:n.left,top:n.top,width:n.width,height:n.height};let r=n.body;[n,o].forEach(g=>{const f=[],A=g.hFlip,O=g.vFlip;let h=g.rotate;A?O?h+=2:(f.push("translate("+(t.width+t.left).toString()+" "+(0-t.top).toString()+")"),f.push("scale(-1 1)"),t.top=t.left=0):O&&(f.push("translate("+(0-t.left).toString()+" "+(t.height+t.top).toString()+")"),f.push("scale(1 -1)"),t.top=t.left=0);let m;switch(h<0&&(h-=Math.floor(h/4)*4),h=h%4,h){case 1:m=t.height/2+t.top,f.unshift("rotate(90 "+m.toString()+" "+m.toString()+")");break;case 2:f.unshift("rotate(180 "+(t.width/2+t.left).toString()+" "+(t.height/2+t.top).toString()+")");break;case 3:m=t.width/2+t.left,f.unshift("rotate(-90 "+m.toString()+" "+m.toString()+")");break}h%2===1&&(t.left!==t.top&&(m=t.left,t.left=t.top,t.top=m),t.width!==t.height&&(m=t.width,t.width=t.height,t.height=m)),f.length&&(r=Q(r,'',""))});const i=o.width,c=o.height,a=t.width,l=t.height;let u,d;i===null?(d=c===null?"1em":c==="auto"?l:c,u=v(d,a/l)):(u=i==="auto"?a:i,d=c===null?v(u,l/a):c==="auto"?l:c);const y={},z=(g,f)=>{X(f)||(y[g]=f.toString())};z("width",u),z("height",d);const $=[t.left,t.top,a,l];return y.viewBox=$.join(" "),{attributes:y,viewBox:$,body:r}}function Z(e){const s={display:"inline-block",width:"1em",height:"1em"},n=e.varName;switch(e.pseudoSelector&&(s.content="''"),e.mode){case"background":n&&(s["background-image"]="var(--"+n+")"),s["background-repeat"]="no-repeat",s["background-size"]="100% 100%";break;case"mask":s["background-color"]="currentColor",n&&(s["mask-image"]=s["-webkit-mask-image"]="var(--"+n+")"),s["mask-repeat"]=s["-webkit-mask-repeat"]="no-repeat",s["mask-size"]=s["-webkit-mask-size"]="100% 100%";break}return s}function ee(e,s){const n={},o=s.varName,t=Y(e);let r=t.viewBox;r[2]!==r[3]&&(s.forceSquare?r=G(r):n.width=v("1em",r[2]/r[3]));const i=L(t.body.replace(/currentColor/g,s.color||"black"),{viewBox:`${r[0]} ${r[1]} ${r[2]} ${r[3]}`,width:`${r[2]}`,height:`${r[3]}`}),c=D(i);if(o)n["--"+o]=c;else switch(s.mode){case"background":n["background-image"]=c;break;case"mask":n["mask-image"]=n["-webkit-mask-image"]=c;break}return n}const k={selectorStart:{compressed:"{",compact:" {",expanded:" {"},selectorEnd:{compressed:"}",compact:`; } -`,expanded:`; -} -`},rule:{compressed:"{key}:",compact:" {key}: ",expanded:` - {key}: `}};function te(e,s="expanded"){const n=[];for(let o=0;o(console.warn(`[Icon] failed to load icon \`${e}\``),null)),b(e))}function j(e){const s=w().icon,n=(s.collections||[]).sort((o,t)=>t.length-o.length);return S(()=>{var i;const o=e(),t=o.startsWith(s.cssSelectorPrefix)?o.slice(s.cssSelectorPrefix.length):o,r=((i=s.aliases)==null?void 0:i[t])||t;if(!r.includes(":")){const c=n.find(a=>r.startsWith(a+"-"));return c?c+":"+r.slice(c.length+1):r}return r})}function F(e,s){if(e!==!1)return e===!0||e===null?s:e}let p;function oe(e){return e.replace(/([^\w-])/g,"\\$1")}function re(){if(p)return p;p=new Set;const e=n=>{if(n=n.replace(/^:where\((.*)\)$/,"$1").trim(),n.startsWith("."))return n},s=n=>{if(n!=null&&n.length)for(const o of n){o!=null&&o.cssRules&&s(o.cssRules);const t=o==null?void 0:o.selectorText;if(typeof t=="string"){const r=e(t);r&&p.add(r)}}};if(typeof document<"u")for(const n of document.styleSheets)try{const o=n.cssRules||n.rules;s(o)}catch{}return p}const ce=x({name:"NuxtIconCss",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e){const s=C(),n=w().icon,o=S(()=>e.name?n.cssSelectorPrefix+e.name:"");function t(c){var u,d;if(!c)return;const a=b(c);if(a)return a;const l=(d=(u=s.payload)==null?void 0:u.data)==null?void 0:d[c];if(l)return q(c,l),l}const r=S(()=>"."+oe(o.value));function i(c,a=!0){let l=r.value;n.cssWherePseudo&&(l=`:where(${l})`);const u=ne(c,{iconSelector:l,format:"compressed",customise:F(e.customize,n.customize)});return n.cssLayer&&a?`@layer ${n.cssLayer} { ${u} }`:u}{const c=re();async function a(l){if(c.has(r.value)||typeof document>"u")return;const u=document.createElement("style");u.textContent=i(l);const d=document.head.querySelector('style, link[rel="stylesheet"]');d?document.head.insertBefore(u,d):document.head.appendChild(u),c.add(r.value)}T(()=>e.name,()=>{if(c.has(r.value))return;const l=t(e.name);l?a(l):se(e.name).then(u=>{u&&a(u)}).catch(()=>null)},{immediate:!0})}return()=>N("span",{class:["iconify",o.value]})}}),ie=x({name:"NuxtIconSvg",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:s}){const n=C(),o=w().icon,t=j(()=>e.name),r="i-"+t.value;if(t.value){const i=n.payload.data[r];i&&q(t.value,i)}return()=>N(P,{icon:t.value,ssr:!0,customise:F(e.customize,o.customize)},s)}}),ae=x({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:s}){const n=C(),o=w().icon,t=j(()=>e.name),r=S(()=>{var c;return((c=n.vueApp)==null?void 0:c.component(t.value))||((e.mode||o.mode)==="svg"?ie:ce)}),i=S(()=>{const c=e.size||o.size;return c?{fontSize:Number.isNaN(+c)?c:c+"px"}:null});return()=>N(r.value,{...o.attrs,name:t.value,class:o.class,style:i.value,customize:e.customize},s)}});export{ae 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/DfbLerQ4.js b/TerraformRegistry/web/_nuxt/DfbLerQ4.js deleted file mode 100644 index 4783e1b..0000000 --- a/TerraformRegistry/web/_nuxt/DfbLerQ4.js +++ /dev/null @@ -1,42 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BvVBPIAF.js","./DZhRnb1V.js","./CyQxyuxc.js","./CDgII3bh.js","./CwuZat6W.js","./BLEGckhC.js","./B9sIrZpC.js","./jISQO879.js","./error-404.4oxyXxx0.css","./HxsO1gv8.js","./error-500.CZqNkBuR.css"])))=>i.map(i=>d[i]); -var Ru=Object.defineProperty;var si=e=>{throw TypeError(e)};var xu=(e,t,n)=>t in e?Ru(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Rt=(e,t,n)=>xu(e,typeof t!="symbol"?t+"":t,n),Au=(e,t,n)=>t.has(e)||si("Cannot "+n);var Cn=(e,t,n)=>(Au(e,t,"read from private field"),n?n.call(e):t.get(e)),ii=(e,t,n)=>t.has(e)?si("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 Ss(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ie={},fn=[],ut=()=>{},Pu=()=>!1,nr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ts=e=>e.startsWith("onUpdate:"),we=Object.assign,Cs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ou=Object.prototype.hasOwnProperty,se=(e,t)=>Ou.call(e,t),G=Array.isArray,dn=e=>rr(e)==="[object Map]",Kl=e=>rr(e)==="[object Set]",Iu=e=>rr(e)==="[object RegExp]",Q=e=>typeof e=="function",ge=e=>typeof e=="string",St=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",Rs=e=>(ue(e)||Q(e))&&Q(e.then)&&Q(e.catch),ql=Object.prototype.toString,rr=e=>ql.call(e),Mu=e=>rr(e).slice(8,-1),zl=e=>rr(e)==="[object Object]",xs=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,hn=Ss(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),eo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Lu=/-(\w)/g,Ve=eo(e=>e.replace(Lu,(t,n)=>n?n.toUpperCase():"")),ju=/\B([A-Z])/g,Dt=eo(e=>e.replace(ju,"-$1").toLowerCase()),to=eo(e=>e.charAt(0).toUpperCase()+e.slice(1)),bo=eo(e=>e?`on${to(e)}`:""),Le=(e,t)=>!Object.is(e,t),jn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},$u=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jl=e=>{const t=ge(e)?Number(e):NaN;return isNaN(t)?e:t};let li;const no=()=>li||(li=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ro(e){if(G(e)){const t={};for(let n=0;n{if(n){const r=n.split(Hu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function oo(e){let t="";if(ge(e))t=e;else if(G(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Wu=e=>ge(e)?e:e==null?"":G(e)||ue(e)&&(e.toString===ql||!Q(e.toString))?Yl(e)?Wu(e.value):JSON.stringify(e,Xl,2):String(e),Xl=(e,t)=>Yl(t)?Xl(e,t.value):dn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],s)=>(n[vo(r,s)+" =>"]=o,n),{})}:Kl(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>vo(n))}:St(t)?vo(t):ue(t)&&!G(t)&&!zl(t)?String(t):t,vo=(e,t="")=>{var n;return St(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 Re;class Zl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Re,!t&&Re&&(this.index=(Re.scopes||(Re.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&&(Re=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(Nn){let t=Nn;for(Nn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;$n;){let t=$n;for($n=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 rc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function oc(e){let t,n=e.depsTail,r=n;for(;r;){const o=r.prevDep;r.version===-1?(r===n&&(n=o),Os(r),qu(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function Ko(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(sc(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function sc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kn)||(e.globalVersion=Kn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ko(e))))return;e.flags|=2;const t=e.dep,n=ae,r=et;ae=e,et=!0;try{rc(e);const o=e.fn(e._value);(t.version===0||Le(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{ae=n,et=r,oc(e),e.flags&=-3}}function Os(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)Os(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function qu(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let et=!0;const ic=[];function wt(){ic.push(et),et=!1}function kt(){const e=ic.pop();et=e===void 0?!0:e}function ci(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ae;ae=void 0;try{t()}finally{ae=n}}}let Kn=0;class zu{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 so{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(!ae||!et||ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ae)n=this.activeLink=new zu(ae,this),ae.deps?(n.prevDep=ae.depsTail,ae.depsTail.nextDep=n,ae.depsTail=n):ae.deps=ae.depsTail=n,lc(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=ae.depsTail,n.nextDep=void 0,ae.depsTail.nextDep=n,ae.depsTail=n,ae.deps===n&&(ae.deps=r)}return n}trigger(t){this.version++,Kn++,this.notify(t)}notify(t){As();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ps()}}}function lc(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)lc(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Lr=new WeakMap,zt=Symbol(""),qo=Symbol(""),qn=Symbol("");function xe(e,t,n){if(et&&ae){let r=Lr.get(e);r||Lr.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new so),o.map=r,o.key=n),o.track()}}function bt(e,t,n,r,o,s){const i=Lr.get(e);if(!i){Kn++;return}const l=c=>{c&&c.trigger()};if(As(),t==="clear")i.forEach(l);else{const c=G(e),u=c&&xs(n);if(c&&n==="length"){const a=Number(r);i.forEach((f,d)=>{(d==="length"||d===qn||!St(d)&&d>=a)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(qn)),t){case"add":c?u&&l(i.get("length")):(l(i.get(zt)),dn(e)&&l(i.get(qo)));break;case"delete":c||(l(i.get(zt)),dn(e)&&l(i.get(qo)));break;case"set":dn(e)&&l(i.get(zt));break}}Ps()}function Gu(e,t){const n=Lr.get(e);return n&&n.get(t)}function sn(e){const t=te(e);return t===e?t:(xe(t,"iterate",qn),Ge(e)?t:t.map(Ee))}function io(e){return xe(e=te(e),"iterate",qn),e}const Ju={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,Ee)},concat(...e){return sn(this).concat(...e.map(t=>G(t)?sn(t):t))},entries(){return ko(this,"entries",e=>(e[1]=Ee(e[1]),e))},every(e,t){return pt(this,"every",e,t,void 0,arguments)},filter(e,t){return pt(this,"filter",e,t,n=>n.map(Ee),arguments)},find(e,t){return pt(this,"find",e,t,Ee,arguments)},findIndex(e,t){return pt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return pt(this,"findLast",e,t,Ee,arguments)},findLastIndex(e,t){return pt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return pt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Eo(this,"includes",e)},indexOf(...e){return Eo(this,"indexOf",e)},join(e){return sn(this).join(e)},lastIndexOf(...e){return Eo(this,"lastIndexOf",e)},map(e,t){return pt(this,"map",e,t,void 0,arguments)},pop(){return Rn(this,"pop")},push(...e){return Rn(this,"push",e)},reduce(e,...t){return ai(this,"reduce",e,t)},reduceRight(e,...t){return ai(this,"reduceRight",e,t)},shift(){return Rn(this,"shift")},some(e,t){return pt(this,"some",e,t,void 0,arguments)},splice(...e){return Rn(this,"splice",e)},toReversed(){return sn(this).toReversed()},toSorted(e){return sn(this).toSorted(e)},toSpliced(...e){return sn(this).toSpliced(...e)},unshift(...e){return Rn(this,"unshift",e)},values(){return ko(this,"values",Ee)}};function ko(e,t,n){const r=io(e),o=r[t]();return r!==e&&!Ge(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.value&&(s.value=n(s.value)),s}),o}const Qu=Array.prototype;function pt(e,t,n,r,o,s){const i=io(e),l=i!==e&&!Ge(e),c=i[t];if(c!==Qu[t]){const f=c.apply(e,s);return l?Ee(f):f}let u=n;i!==e&&(l?u=function(f,d){return n.call(this,Ee(f),d,e)}:n.length>2&&(u=function(f,d){return n.call(this,f,d,e)}));const a=c.call(i,u,r);return l&&o?o(a):a}function ai(e,t,n,r){const o=io(e);let s=n;return o!==e&&(Ge(e)?n.length>3&&(s=function(i,l,c){return n.call(this,i,l,c,e)}):s=function(i,l,c){return n.call(this,i,Ee(l),c,e)}),o[t](s,...r)}function Eo(e,t,n){const r=te(e);xe(r,"iterate",qn);const o=r[t](...n);return(o===-1||o===!1)&&Ls(n[0])?(n[0]=te(n[0]),r[t](...n)):o}function Rn(e,t,n=[]){wt(),As();const r=te(e)[t].apply(e,n);return Ps(),kt(),r}const Yu=Ss("__proto__,__v_isRef,__isVue"),cc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(St));function Xu(e){St(e)||(e=String(e));const t=te(this);return xe(t,"has",e),t.hasOwnProperty(e)}class ac{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?af:hc:s?dc:fc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=G(t);if(!o){let c;if(i&&(c=Ju[n]))return c;if(n==="hasOwnProperty")return Xu}const l=Reflect.get(t,n,be(t)?t:r);return(St(n)?cc.has(n):Yu(n))||(o||xe(t,"get",n),s)?l:be(l)?i&&xs(n)?l:l.value:ue(l)?o?jr(l):dt(l):l}}class uc extends ac{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];if(!this._isShallow){const c=Et(s);if(!Ge(r)&&!Et(r)&&(s=te(s),r=te(r)),!G(t)&&be(s)&&!be(r))return c?!1:(s.value=r,!0)}const i=G(t)&&xs(n)?Number(n)e,dr=e=>Reflect.getPrototypeOf(e);function rf(e,t,n){return function(...r){const o=this.__v_raw,s=te(o),i=dn(s),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=o[e](...r),a=n?zo:t?$r:Ee;return!t&&xe(s,"iterate",c?qo:zt),{next(){const{value:f,done:d}=u.next();return d?{value:f,done:d}:{value:l?[a(f[0]),a(f[1])]:a(f),done:d}},[Symbol.iterator](){return this}}}}function hr(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function of(e,t){const n={get(o){const s=this.__v_raw,i=te(s),l=te(o);e||(Le(o,l)&&xe(i,"get",o),xe(i,"get",l));const{has:c}=dr(i),u=t?zo:e?$r:Ee;if(c.call(i,o))return u(s.get(o));if(c.call(i,l))return u(s.get(l));s!==i&&s.get(o)},get size(){const o=this.__v_raw;return!e&&xe(te(o),"iterate",zt),Reflect.get(o,"size",o)},has(o){const s=this.__v_raw,i=te(s),l=te(o);return e||(Le(o,l)&&xe(i,"has",o),xe(i,"has",l)),o===l?s.has(o):s.has(o)||s.has(l)},forEach(o,s){const i=this,l=i.__v_raw,c=te(l),u=t?zo:e?$r:Ee;return!e&&xe(c,"iterate",zt),l.forEach((a,f)=>o.call(s,u(a),u(f),i))}};return we(n,e?{add:hr("add"),set:hr("set"),delete:hr("delete"),clear:hr("clear")}:{add(o){!t&&!Ge(o)&&!Et(o)&&(o=te(o));const s=te(this);return dr(s).has.call(s,o)||(s.add(o),bt(s,"add",o,o)),this},set(o,s){!t&&!Ge(s)&&!Et(s)&&(s=te(s));const i=te(this),{has:l,get:c}=dr(i);let u=l.call(i,o);u||(o=te(o),u=l.call(i,o));const a=c.call(i,o);return i.set(o,s),u?Le(s,a)&&bt(i,"set",o,s):bt(i,"add",o,s),this},delete(o){const s=te(this),{has:i,get:l}=dr(s);let c=i.call(s,o);c||(o=te(o),c=i.call(s,o)),l&&l.call(s,o);const u=s.delete(o);return c&&bt(s,"delete",o,void 0),u},clear(){const o=te(this),s=o.size!==0,i=o.clear();return s&&bt(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=rf(o,e,t)}),n}function Is(e,t){const n=of(e,t);return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(se(n,o)&&o in r?n:r,o,s)}const sf={get:Is(!1,!1)},lf={get:Is(!1,!0)},cf={get:Is(!0,!1)};const fc=new WeakMap,dc=new WeakMap,hc=new WeakMap,af=new WeakMap;function uf(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ff(e){return e.__v_skip||!Object.isExtensible(e)?0:uf(Mu(e))}function dt(e){return Et(e)?e:Ms(e,!1,ef,sf,fc)}function at(e){return Ms(e,!1,nf,lf,dc)}function jr(e){return Ms(e,!0,tf,cf,hc)}function Ms(e,t,n,r,o){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=ff(e);if(s===0)return e;const i=o.get(e);if(i)return i;const l=new Proxy(e,s===2?r:n);return o.set(e,l),l}function Gt(e){return Et(e)?Gt(e.__v_raw):!!(e&&e.__v_isReactive)}function Et(e){return!!(e&&e.__v_isReadonly)}function Ge(e){return!!(e&&e.__v_isShallow)}function Ls(e){return e?!!e.__v_raw:!1}function te(e){const t=e&&e.__v_raw;return t?te(t):e}function df(e){return!se(e,"__v_skip")&&Object.isExtensible(e)&&Gl(e,"__v_skip",!0),e}const Ee=e=>ue(e)?dt(e):e,$r=e=>ue(e)?jr(e):e;function be(e){return e?e.__v_isRef===!0:!1}function Ne(e){return pc(e,!1)}function ft(e){return pc(e,!0)}function pc(e,t){return be(e)?e:new hf(e,t)}class hf{constructor(t,n){this.dep=new so,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:te(t),this._value=n?t:Ee(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Ge(t)||Et(t);t=r?t:te(t),Le(t,n)&&(this._rawValue=t,this._value=r?t:Ee(t),this.dep.trigger())}}function fe(e){return be(e)?e.value:e}function pf(e){return Q(e)?e():fe(e)}const gf={get:(e,t,n)=>t==="__v_raw"?e:fe(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return be(o)&&!be(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function gc(e){return Gt(e)?e:new Proxy(e,gf)}class mf{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new so,{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 mc(e){return new mf(e)}function l_(e){const t=G(e)?new Array(e.length):{};for(const n in e)t[n]=_c(e,n);return t}class yf{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 Gu(te(this._object),this._key)}}class _f{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 yc(e,t,n){return be(e)?e:Q(e)?new _f(e):ue(e)&&arguments.length>1?_c(e,t,n):Ne(e)}function _c(e,t,n){const r=e[t];return be(r)?r:new yf(e,t,n)}class bf{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new so(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&ae!==this)return nc(this,!0),!0}get value(){const t=this.dep.track();return sc(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vf(e,t,n=!1){let r,o;return Q(e)?r=e:(r=e.get,o=e.set),new bf(r,o,n)}const pr={},Nr=new WeakMap;let Kt;function wf(e,t=!1,n=Kt){if(n){let r=Nr.get(n);r||Nr.set(n,r=[]),r.push(e)}}function kf(e,t,n=ie){const{immediate:r,deep:o,once:s,scheduler:i,augmentJob:l,call:c}=n,u=b=>o?b:Ge(b)||o===!1||o===0?Lt(b,1):Lt(b);let a,f,d,h,_=!1,m=!1;if(be(e)?(f=()=>e.value,_=Ge(e)):Gt(e)?(f=()=>u(e),_=!0):G(e)?(m=!0,_=e.some(b=>Gt(b)||Ge(b)),f=()=>e.map(b=>{if(be(b))return b.value;if(Gt(b))return u(b);if(Q(b))return c?c(b,2):b()})):Q(e)?t?f=c?()=>c(e,2):e:f=()=>{if(d){wt();try{d()}finally{kt()}}const b=Kt;Kt=a;try{return c?c(e,3,[h]):e(h)}finally{Kt=b}}:f=ut,t&&o){const b=f,E=o===!0?1/0:o;f=()=>Lt(b(),E)}const v=or(),k=()=>{a.stop(),v&&v.active&&Cs(v.effects,a)};if(s&&t){const b=t;t=(...E)=>{b(...E),k()}}let w=m?new Array(e.length).fill(pr):pr;const g=b=>{if(!(!(a.flags&1)||!a.dirty&&!b))if(t){const E=a.run();if(o||_||(m?E.some((T,R)=>Le(T,w[R])):Le(E,w))){d&&d();const T=Kt;Kt=a;try{const R=[E,w===pr?void 0:m&&w[0]===pr?[]:w,h];w=E,c?c(t,3,R):t(...R)}finally{Kt=T}}}else a.run()};return l&&l(g),a=new ec(f),a.scheduler=i?()=>i(g,!1):g,h=b=>wf(b,!1,a),d=a.onStop=()=>{const b=Nr.get(a);if(b){if(c)c(b,4);else for(const E of b)E();Nr.delete(a)}},t?r?g(!0):w=a.run():i?i(g.bind(null,!0),!0):a.run(),k.pause=a.pause.bind(a),k.resume=a.resume.bind(a),k.stop=k,k}function Lt(e,t=1/0,n){if(t<=0||!ue(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,be(e))Lt(e.value,t,n);else if(G(e))for(let r=0;r{Lt(r,t,n)});else if(zl(e)){for(const r in e)Lt(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Lt(e[r],t,n)}return e}/** -* @vue/runtime-core v3.5.16 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function sr(e,t,n,r){try{return r?e(...r):e()}catch(o){En(o,t,n)}}function nt(e,t,n,r){if(Q(e)){const o=sr(e,t,n,r);return o&&Rs(o)&&o.catch(s=>{En(s,t,n)}),o}if(G(e)){const o=[];for(let s=0;s>>1,o=Oe[r],s=zn(o);s=zn(n)?Oe.push(e):Oe.splice(Sf(t),0,e),e.flags|=1,vc()}}function vc(){Hr||(Hr=bc.then(wc))}function Go(e){G(e)?pn.push(...e):At&&e.id===-1?At.splice(cn+1,0,e):e.flags&1||(pn.push(e),e.flags|=1),vc()}function ui(e,t,n=lt+1){for(;nzn(n)-zn(r));if(pn.length=0,At){At.push(...t);return}for(At=t,cn=0;cne.id==null?e.flags&2?-1:1/0:e.id;function wc(e){try{for(lt=0;lt{r._d&&wi(-1);const s=Dr(t);let i;try{i=e(...o)}finally{Dr(s),r._d&&wi(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function ct(e,t,n,r){const o=e.dirs,s=t&&t.dirs;for(let i=0;ie.__isTeleport,Pt=Symbol("_leaveCb"),gr=Symbol("_enterCb");function Cf(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return _n(()=>{e.isMounted=!0}),lr(()=>{e.isUnmounting=!0}),e}const Ke=[Function,Array],Sc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ke,onEnter:Ke,onAfterEnter:Ke,onEnterCancelled:Ke,onBeforeLeave:Ke,onLeave:Ke,onAfterLeave:Ke,onLeaveCancelled:Ke,onBeforeAppear:Ke,onAppear:Ke,onAfterAppear:Ke,onAppearCancelled:Ke},Tc=e=>{const t=e.subTree;return t.component?Tc(t.component):t},Rf={name:"BaseTransition",props:Sc,setup(e,{slots:t}){const n=tn(),r=Cf();return()=>{const o=t.default&&xc(t.default(),!0);if(!o||!o.length)return;const s=Cc(o),i=te(e),{mode:l}=i;if(r.isLeaving)return So(s);const c=fi(s);if(!c)return So(s);let u=Jo(c,i,r,n,f=>u=f);c.type!==_e&&yn(c,u);let a=n.subTree&&fi(n.subTree);if(a&&a.type!==_e&&!Ze(c,a)&&Tc(n).type!==_e){let f=Jo(a,i,r,n);if(yn(a,f),l==="out-in"&&c.type!==_e)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,a=void 0},So(s);l==="in-out"&&c.type!==_e?f.delayLeave=(d,h,_)=>{const m=Rc(r,a);m[String(a.key)]=a,d[Pt]=()=>{h(),d[Pt]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{_(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return s}}};function Cc(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==_e){t=n;break}}return t}const xf=Rf;function Rc(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 Jo(e,t,n,r,o){const{appear:s,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:d,onLeave:h,onAfterLeave:_,onLeaveCancelled:m,onBeforeAppear:v,onAppear:k,onAfterAppear:w,onAppearCancelled:g}=t,b=String(e.key),E=Rc(n,e),T=(L,O)=>{L&&nt(L,r,9,O)},R=(L,O)=>{const q=O[1];T(L,O),G(L)?L.every(M=>M.length<=1)&&q():L.length<=1&&q()},U={mode:i,persisted:l,beforeEnter(L){let O=c;if(!n.isMounted)if(s)O=v||c;else return;L[Pt]&&L[Pt](!0);const q=E[b];q&&Ze(e,q)&&q.el[Pt]&&q.el[Pt](),T(O,[L])},enter(L){let O=u,q=a,M=f;if(!n.isMounted)if(s)O=k||u,q=w||a,M=g||f;else return;let z=!1;const Z=L[gr]=ne=>{z||(z=!0,ne?T(M,[L]):T(q,[L]),U.delayedLeave&&U.delayedLeave(),L[gr]=void 0)};O?R(O,[L,Z]):Z()},leave(L,O){const q=String(e.key);if(L[gr]&&L[gr](!0),n.isUnmounting)return O();T(d,[L]);let M=!1;const z=L[Pt]=Z=>{M||(M=!0,O(),Z?T(m,[L]):T(_,[L]),L[Pt]=void 0,E[q]===e&&delete E[q])};E[q]=e,h?R(h,[L,z]):z()},clone(L){const O=Jo(L,t,n,r,o);return o&&o(O),O}};return U}function So(e){if(ir(e))return e=Je(e),e.children=null,e}function fi(e){if(!ir(e))return Ec(e.type)&&e.children?Cc(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&&Q(n.default))return n.default()}}function yn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,yn(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 xc(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sGn(_,t&&(G(t)?t[m]:t),n,r,o));return}if($t(r)&&!o){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Gn(e,t,n,r.component.subTree);return}const s=r.shapeFlag&4?Vs(r.component):r.el,i=o?null:s,{i:l,r:c}=e,u=t&&t.r,a=l.refs===ie?l.refs={}:l.refs,f=l.setupState,d=te(f),h=f===ie?()=>!1:_=>se(d,_);if(u!=null&&u!==c&&(ge(u)?(a[u]=null,h(u)&&(f[u]=null)):be(u)&&(u.value=null)),Q(c))sr(c,l,12,[i,a]);else{const _=ge(c),m=be(c);if(_||m){const v=()=>{if(e.f){const k=_?h(c)?f[c]:a[c]:c.value;o?G(k)&&Cs(k,s):G(k)?k.includes(s)||k.push(s):_?(a[c]=[s],h(c)&&(f[c]=a[c])):(c.value=[s],e.k&&(a[e.k]=c.value))}else _?(a[c]=i,h(c)&&(f[c]=i)):m&&(c.value=i,e.k&&(a[e.k]=i))};i?(v.id=-1,ke(v,n)):v()}}}let di=!1;const ln=()=>{di||(console.error("Hydration completed but contains mismatches."),di=!0)},Af=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Pf=e=>e.namespaceURI.includes("MathML"),mr=e=>{if(e.nodeType===1){if(Af(e))return"svg";if(Pf(e))return"mathml"}},un=e=>e.nodeType===8;function Of(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:l,insert:c,createComment:u}}=e,a=(g,b)=>{if(!b.hasChildNodes()){n(null,g,b),Fr(),b._vnode=g;return}f(b.firstChild,g,null,null,null),Fr(),b._vnode=g},f=(g,b,E,T,R,U=!1)=>{U=U||!!b.dynamicChildren;const L=un(g)&&g.data==="[",O=()=>m(g,b,E,T,R,L),{type:q,ref:M,shapeFlag:z,patchFlag:Z}=b;let ne=g.nodeType;b.el=g,Z===-2&&(U=!1,b.dynamicChildren=null);let B=null;switch(q){case Qt:ne!==3?b.children===""?(c(b.el=o(""),i(g),g),B=g):B=O():(g.data!==b.children&&(ln(),g.data=b.children),B=s(g));break;case _e:w(g)?(B=s(g),k(b.el=g.content.firstChild,g,E)):ne!==8||L?B=O():B=s(g);break;case Fn:if(L&&(g=s(g),ne=g.nodeType),ne===1||ne===3){B=g;const X=!b.children.length;for(let V=0;V{U=U||!!b.dynamicChildren;const{type:L,props:O,patchFlag:q,shapeFlag:M,dirs:z,transition:Z}=b,ne=L==="input"||L==="option";if(ne||q!==-1){z&&ct(b,null,E,"created");let B=!1;if(w(g)){B=Qc(null,Z)&&E&&E.vnode.props&&E.vnode.props.appear;const V=g.content.firstChild;if(B){const ye=V.getAttribute("class");ye&&(V.$cls=ye),Z.beforeEnter(V)}k(V,g,E),b.el=g=V}if(M&16&&!(O&&(O.innerHTML||O.textContent))){let V=h(g.firstChild,b,g,E,T,R,U);for(;V;){yr(g,1)||ln();const ye=V;V=V.nextSibling,l(ye)}}else if(M&8){let V=b.children;V[0]===` -`&&(g.tagName==="PRE"||g.tagName==="TEXTAREA")&&(V=V.slice(1)),g.textContent!==V&&(yr(g,0)||ln(),g.textContent=b.children)}if(O){if(ne||!U||q&48){const V=g.tagName.includes("-");for(const ye in O)(ne&&(ye.endsWith("value")||ye==="indeterminate")||nr(ye)&&!hn(ye)||ye[0]==="."||V)&&r(g,ye,null,O[ye],void 0,E)}else if(O.onClick)r(g,"onClick",null,O.onClick,void 0,E);else if(q&4&&Gt(O.style))for(const V in O.style)O.style[V]}let X;(X=O&&O.onVnodeBeforeMount)&&Me(X,E,b),z&&ct(b,null,E,"beforeMount"),((X=O&&O.onVnodeMounted)||z||B)&&ra(()=>{X&&Me(X,E,b),B&&Z.enter(g),z&&ct(b,null,E,"mounted")},T)}return g.nextSibling},h=(g,b,E,T,R,U,L)=>{L=L||!!b.dynamicChildren;const O=b.children,q=O.length;for(let M=0;M{const{slotScopeIds:L}=b;L&&(R=R?R.concat(L):L);const O=i(g),q=h(s(g),b,O,E,T,R,U);return q&&un(q)&&q.data==="]"?s(b.anchor=q):(ln(),c(b.anchor=u("]"),O,q),q)},m=(g,b,E,T,R,U)=>{if(yr(g.parentElement,1)||ln(),b.el=null,U){const q=v(g);for(;;){const M=s(g);if(M&&M!==q)l(M);else break}}const L=s(g),O=i(g);return l(g),n(null,b,O,L,E,T,mr(O),R),E&&(E.vnode.el=b.el,fo(E,b.el)),L},v=(g,b="[",E="]")=>{let T=0;for(;g;)if(g=s(g),g&&un(g)&&(g.data===b&&T++,g.data===E)){if(T===0)return s(g);T--}return g},k=(g,b,E)=>{const T=b.parentNode;T&&T.replaceChild(g,b);let R=E;for(;R;)R.vnode.el===b&&(R.vnode.el=R.subTree.el=g),R=R.parent},w=g=>g.nodeType===1&&g.tagName==="TEMPLATE";return[a,f]}const hi="data-allow-mismatch",If={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yr(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(hi);)e=e.parentElement;const n=e&&e.getAttribute(hi);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(If[t])}}no().requestIdleCallback;no().cancelIdleCallback;function Mf(e,t){if(un(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(un(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const $t=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Ur(e){Q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,hydrate:s,timeout:i,suspensible:l=!0,onError:c}=e;let u=null,a,f=0;const d=()=>(f++,u=null,h()),h=()=>{let _;return u||(_=u=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),c)return new Promise((v,k)=>{c(m,()=>v(d()),()=>k(m),f+1)});throw m}).then(m=>_!==u&&u?u:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),a=m,m)))};return ht({name:"AsyncComponentWrapper",__asyncLoader:h,__asyncHydrate(_,m,v){const k=s?()=>{const g=s(()=>{v()},b=>Mf(_,b));g&&(m.bum||(m.bum=[])).push(g),(m.u||(m.u=[])).push(()=>!0)}:v;a?k():h().then(()=>!m.isUnmounted&&k())},get __asyncResolved(){return a},setup(){const _=ve;if(Ns(_),a)return()=>To(a,_);const m=g=>{u=null,En(g,_,13,!r)};if(l&&_.suspense||vn)return h().then(g=>()=>To(g,_)).catch(g=>(m(g),()=>r?de(r,{error:g}):null));const v=Ne(!1),k=Ne(),w=Ne(!!o);return o&&setTimeout(()=>{w.value=!1},o),i!=null&&setTimeout(()=>{if(!v.value&&!k.value){const g=new Error(`Async component timed out after ${i}ms.`);m(g),k.value=g}},i),h().then(()=>{v.value=!0,_.parent&&ir(_.parent.vnode)&&_.parent.update()}).catch(g=>{m(g),k.value=g}),()=>{if(v.value&&a)return To(a,_);if(k.value&&r)return de(r,{error:k.value});if(n&&!w.value)return de(n)}}})}function To(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=de(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const ir=e=>e.type.__isKeepAlive,Lf={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=tn(),r=n.ctx;if(!r.renderer)return()=>{const w=t.default&&t.default();return w&&w.length===1?w[0]:w};const o=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:u,um:a,o:{createElement:f}}}=r,d=f("div");r.activate=(w,g,b,E,T)=>{const R=w.component;u(w,g,b,0,l),c(R.vnode,w,g,b,R,l,E,w.slotScopeIds,T),ke(()=>{R.isDeactivated=!1,R.a&&jn(R.a);const U=w.props&&w.props.onVnodeMounted;U&&Me(U,R.parent,w)},l)},r.deactivate=w=>{const g=w.component;Wr(g.m),Wr(g.a),u(w,d,null,1,l),ke(()=>{g.da&&jn(g.da);const b=w.props&&w.props.onVnodeUnmounted;b&&Me(b,g.parent,w),g.isDeactivated=!0},l)};function h(w){Co(w),a(w,n,l,!0)}function _(w){o.forEach((g,b)=>{const E=rs(g.type);E&&!w(E)&&m(b)})}function m(w){const g=o.get(w);g&&(!i||!Ze(g,i))?h(g):i&&Co(i),o.delete(w),s.delete(w)}tt(()=>[e.include,e.exclude],([w,g])=>{w&&_(b=>Mn(w,b)),g&&_(b=>!Mn(g,b))},{flush:"post",deep:!0});let v=null;const k=()=>{v!=null&&(Kr(n.subTree.type)?ke(()=>{o.set(v,_r(n.subTree))},n.subTree.suspense):o.set(v,_r(n.subTree)))};return _n(k),Ic(k),lr(()=>{o.forEach(w=>{const{subTree:g,suspense:b}=n,E=_r(g);if(w.type===E.type&&w.key===E.key){Co(E);const T=E.component.da;T&&ke(T,b);return}h(w)})}),()=>{if(v=null,!t.default)return i=null;const w=t.default(),g=w[0];if(w.length>1)return i=null,w;if(!Xt(g)||!(g.shapeFlag&4)&&!(g.shapeFlag&128))return i=null,g;let b=_r(g);if(b.type===_e)return i=null,b;const E=b.type,T=rs($t(b)?b.type.__asyncResolved||{}:E),{include:R,exclude:U,max:L}=e;if(R&&(!T||!Mn(R,T))||U&&T&&Mn(U,T))return b.shapeFlag&=-257,i=b,g;const O=b.key==null?E:b.key,q=o.get(O);return b.el&&(b=Je(b),g.shapeFlag&128&&(g.ssContent=b)),v=O,q?(b.el=q.el,b.component=q.component,b.transition&&yn(b,b.transition),b.shapeFlag|=512,s.delete(O),s.add(O)):(s.add(O),L&&s.size>parseInt(L,10)&&m(s.values().next().value)),b.shapeFlag|=256,i=b,Kr(g.type)?g:b}}},jf=Lf;function Mn(e,t){return G(e)?e.some(n=>Mn(n,t)):ge(e)?e.split(",").includes(t):Iu(e)?(e.lastIndex=0,e.test(t)):!1}function Ac(e,t){Oc(e,"a",t)}function Pc(e,t){Oc(e,"da",t)}function Oc(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(lo(t,r,n),n){let o=n.parent;for(;o&&o.parent;)ir(o.parent.vnode)&&$f(r,t,n,o),o=o.parent}}function $f(e,t,n,r){const o=lo(t,e,r,!0);Hs(()=>{Cs(r[t],o)},n)}function Co(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function _r(e){return e.shapeFlag&128?e.ssContent:e}function lo(e,t,n=ve,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{wt();const l=cr(n),c=nt(t,n,e,i);return l(),kt(),c});return r?o.unshift(s):o.push(s),s}}const Tt=e=>(t,n=ve)=>{(!vn||e==="sp")&&lo(e,(...r)=>t(...r),n)},Nf=Tt("bm"),_n=Tt("m"),Hf=Tt("bu"),Ic=Tt("u"),lr=Tt("bum"),Hs=Tt("um"),Ff=Tt("sp"),Df=Tt("rtg"),Uf=Tt("rtc");function Mc(e,t=ve){lo("ec",e,t)}const Lc="components";function c_(e,t){return $c(Lc,e,!0,t)||e}const jc=Symbol.for("v-ndc");function Bf(e){return ge(e)?$c(Lc,e,!1)||e:e||jc}function $c(e,t,n=!0,r=!1){const o=Se||ve;if(o){const s=o.type;{const l=rs(s,!1);if(l&&(l===t||l===Ve(t)||l===to(Ve(t))))return s}const i=pi(o[e]||s[e],t)||pi(o.appContext[e],t);return!i&&r?s:i}}function pi(e,t){return e&&(e[t]||e[Ve(t)]||e[to(Ve(t))])}function a_(e,t,n,r){let o;const s=n,i=G(e);if(i||ge(e)){const l=i&&Gt(e);let c=!1,u=!1;l&&(c=!Ge(e),u=Et(e),e=io(e)),o=new Array(e.length);for(let a=0,f=e.length;at(l,c,void 0,s));else{const l=Object.keys(e);o=new Array(l.length);for(let c=0,u=l.length;c{const s=r.fn(...o);return s&&(s.key=r.key),s}:r.fn)}return e}function f_(e,t,n={},r,o){if(Se.ce||Se.parent&&$t(Se.parent)&&Se.parent.ce)return t!=="default"&&(n.name=t),ze(),vt(Ae,null,[de("slot",n,r&&r())],64);let s=e[t];s&&s._c&&(s._d=!1),ze();const i=s&&Nc(s(n)),l=n.key||i&&i.key,c=vt(Ae,{key:(l&&!St(l)?l:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&e._===1?64:-2);return c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),s&&s._c&&(s._d=!0),c}function Nc(e){return e.some(t=>Xt(t)?!(t.type===_e||t.type===Ae&&!Nc(t.children)):!0)?e:null}const Qo=e=>e?da(e)?Vs(e):Qo(e.parent):null,Hn=we(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=>Qo(e.parent),$root:e=>Qo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Fc(e),$forceUpdate:e=>e.f||(e.f=()=>{js(e.update)}),$nextTick:e=>e.n||(e.n=Ft.bind(e.proxy)),$watch:e=>fd.bind(e)}),Ro=(e,t)=>e!==ie&&!e.__isScriptSetup&&se(e,t),Vf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Ro(r,t))return i[t]=1,r[t];if(o!==ie&&se(o,t))return i[t]=2,o[t];if((u=e.propsOptions[0])&&se(u,t))return i[t]=3,s[t];if(n!==ie&&se(n,t))return i[t]=4,n[t];Yo&&(i[t]=0)}}const a=Hn[t];let f,d;if(a)return t==="$attrs"&&xe(e.attrs,"get",""),a(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ie&&se(n,t))return i[t]=4,n[t];if(d=c.config.globalProperties,se(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return Ro(o,t)?(o[t]=n,!0):r!==ie&&se(r,t)?(r[t]=n,!0):se(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 l;return!!n[i]||e!==ie&&se(e,i)||Ro(t,i)||(l=s[0])&&se(l,i)||se(r,i)||se(Hn,i)||se(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:se(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function d_(){return Wf().slots}function Wf(){const e=tn();return e.setupContext||(e.setupContext=pa(e))}function Br(e){return G(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function h_(e,t){return!e||!t?e||t:G(e)&&G(t)?e.concat(t):we({},Br(e),Br(t))}let Yo=!0;function Kf(e){const t=Fc(e),n=e.proxy,r=e.ctx;Yo=!1,t.beforeCreate&&gi(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:c,inject:u,created:a,beforeMount:f,mounted:d,beforeUpdate:h,updated:_,activated:m,deactivated:v,beforeDestroy:k,beforeUnmount:w,destroyed:g,unmounted:b,render:E,renderTracked:T,renderTriggered:R,errorCaptured:U,serverPrefetch:L,expose:O,inheritAttrs:q,components:M,directives:z,filters:Z}=t;if(u&&qf(u,r,null),i)for(const X in i){const V=i[X];Q(V)&&(r[X]=V.bind(n))}if(o){const X=o.call(n,n);ue(X)&&(e.data=dt(X))}if(Yo=!0,s)for(const X in s){const V=s[X],ye=Q(V)?V.bind(n,n):Q(V.get)?V.get.bind(n,n):ut,Ct=!Q(V)&&Q(V.set)?V.set.bind(n):ut,ot=je({get:ye,set:Ct});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>ot.value,set:Ie=>ot.value=Ie})}if(l)for(const X in l)Hc(l[X],r,n,X);if(c){const X=Q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Nt(V,X[V])})}a&&gi(a,e,"c");function B(X,V){G(V)?V.forEach(ye=>X(ye.bind(n))):V&&X(V.bind(n))}if(B(Nf,f),B(_n,d),B(Hf,h),B(Ic,_),B(Ac,m),B(Pc,v),B(Mc,U),B(Uf,T),B(Df,R),B(lr,w),B(Hs,b),B(Ff,L),G(O))if(O.length){const X=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:ye=>n[V]=ye})})}else e.exposed||(e.exposed={});E&&e.render===ut&&(e.render=E),q!=null&&(e.inheritAttrs=q),M&&(e.components=M),z&&(e.directives=z),L&&Ns(e)}function qf(e,t,n=ut){G(e)&&(e=Xo(e));for(const r in e){const o=e[r];let s;ue(o)?"default"in o?s=Te(o.from||r,o.default,!0):s=Te(o.from||r):s=Te(o),be(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function gi(e,t,n){nt(G(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Hc(e,t,n,r){let o=r.includes(".")?Zc(n,r):()=>n[r];if(ge(e)){const s=t[e];Q(s)&&tt(o,s)}else if(Q(e))tt(o,e.bind(n));else if(ue(e))if(G(e))e.forEach(s=>Hc(s,t,n,r));else{const s=Q(e.handler)?e.handler.bind(n):t[e.handler];Q(s)&&tt(o,s,e)}}function Fc(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:!o.length&&!n&&!r?c=t:(c={},o.length&&o.forEach(u=>Vr(c,u,i,!0)),Vr(c,t,i)),ue(t)&&s.set(t,c),c}function Vr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Vr(e,s,n,!0),o&&o.forEach(i=>Vr(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=zf[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const zf={data:mi,props:yi,emits:yi,methods:Ln,computed:Ln,beforeCreate:Pe,created:Pe,beforeMount:Pe,mounted:Pe,beforeUpdate:Pe,updated:Pe,beforeDestroy:Pe,beforeUnmount:Pe,destroyed:Pe,unmounted:Pe,activated:Pe,deactivated:Pe,errorCaptured:Pe,serverPrefetch:Pe,components:Ln,directives:Ln,watch:Jf,provide:mi,inject:Gf};function mi(e,t){return t?e?function(){return we(Q(e)?e.call(this,this):e,Q(t)?t.call(this,this):t)}:t:e}function Gf(e,t){return Ln(Xo(e),Xo(t))}function Xo(e){if(G(e)){const t={};for(let n=0;n1)return n&&Q(t)?t.call(r&&r.proxy):t}}function co(){return!!(ve||Se||Jt)}const Uc={},Bc=()=>Object.create(Uc),Vc=e=>Object.getPrototypeOf(e)===Uc;function Xf(e,t,n,r=!1){const o={},s=Bc();e.propsDefaults=Object.create(null),Wc(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:at(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function Zf(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=te(o),[c]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const a=e.vnode.dynamicProps;for(let f=0;f{c=!0;const[d,h]=Kc(f,t,!0);we(i,d),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!s&&!c)return ue(e)&&r.set(e,fn),fn;if(G(s))for(let a=0;ae[0]==="_"||e==="$stable",Ds=e=>G(e)?e.map(Be):[Be(e)],td=(e,t,n)=>{if(t._n)return t;const r=$s((...o)=>Ds(t(...o)),n);return r._c=!1,r},qc=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Fs(o))continue;const s=e[o];if(Q(s))t[o]=td(o,s,r);else if(s!=null){const i=Ds(s);t[o]=()=>i}}},zc=(e,t)=>{const n=Ds(t);e.slots.default=()=>n},Gc=(e,t,n)=>{for(const r in t)(n||!Fs(r))&&(e[r]=t[r])},nd=(e,t,n)=>{const r=e.slots=Bc();if(e.vnode.shapeFlag&32){const o=t._;o?(Gc(r,t,n),n&&Gl(r,"_",o,!0)):qc(t,r)}else t&&zc(e,t)},rd=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=ie;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:Gc(o,t,n):(s=!t.$stable,qc(t,o)),i=t}else t&&(zc(e,t),i={default:1});if(s)for(const l in o)!Fs(l)&&i[l]==null&&delete o[l]},ke=ra;function od(e){return Jc(e)}function sd(e){return Jc(e,Of)}function Jc(e,t){const n=no();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:c,setText:u,setElementText:a,parentNode:f,nextSibling:d,setScopeId:h=ut,insertStaticContent:_}=e,m=(p,y,S,A=null,C=null,P=null,N=void 0,$=null,j=!!y.dynamicChildren)=>{if(p===y)return;p&&!Ze(p,y)&&(A=x(p),Ie(p,C,P,!0),p=null),y.patchFlag===-2&&(j=!1,y.dynamicChildren=null);const{type:I,ref:J,shapeFlag:F}=y;switch(I){case Qt:v(p,y,S,A);break;case _e:k(p,y,S,A);break;case Fn:p==null&&w(y,S,A,N);break;case Ae:M(p,y,S,A,C,P,N,$,j);break;default:F&1?E(p,y,S,A,C,P,N,$,j):F&6?z(p,y,S,A,C,P,N,$,j):(F&64||F&128)&&I.process(p,y,S,A,C,P,N,$,j,W)}J!=null&&C&&Gn(J,p&&p.ref,P,y||p,!y)},v=(p,y,S,A)=>{if(p==null)r(y.el=l(y.children),S,A);else{const C=y.el=p.el;y.children!==p.children&&u(C,y.children)}},k=(p,y,S,A)=>{p==null?r(y.el=c(y.children||""),S,A):y.el=p.el},w=(p,y,S,A)=>{[p.el,p.anchor]=_(p.children,y,S,A,p.el,p.anchor)},g=({el:p,anchor:y},S,A)=>{let C;for(;p&&p!==y;)C=d(p),r(p,S,A),p=C;r(y,S,A)},b=({el:p,anchor:y})=>{let S;for(;p&&p!==y;)S=d(p),o(p),p=S;o(y)},E=(p,y,S,A,C,P,N,$,j)=>{y.type==="svg"?N="svg":y.type==="math"&&(N="mathml"),p==null?T(y,S,A,C,P,N,$,j):L(p,y,C,P,N,$,j)},T=(p,y,S,A,C,P,N,$)=>{let j,I;const{props:J,shapeFlag:F,transition:K,dirs:Y}=p;if(j=p.el=i(p.type,P,J&&J.is,J),F&8?a(j,p.children):F&16&&U(p.children,j,null,A,C,xo(p,P),N,$),Y&&ct(p,null,A,"created"),R(j,p,p.scopeId,N,A),J){for(const ce in J)ce!=="value"&&!hn(ce)&&s(j,ce,null,J[ce],P,A);"value"in J&&s(j,"value",null,J.value,P),(I=J.onVnodeBeforeMount)&&Me(I,A,p)}Y&&ct(p,null,A,"beforeMount");const ee=Qc(C,K);ee&&K.beforeEnter(j),r(j,y,S),((I=J&&J.onVnodeMounted)||ee||Y)&&ke(()=>{I&&Me(I,A,p),ee&&K.enter(j),Y&&ct(p,null,A,"mounted")},C)},R=(p,y,S,A,C)=>{if(S&&h(p,S),A)for(let P=0;P{for(let I=j;I{const $=y.el=p.el;let{patchFlag:j,dynamicChildren:I,dirs:J}=y;j|=p.patchFlag&16;const F=p.props||ie,K=y.props||ie;let Y;if(S&&Ut(S,!1),(Y=K.onVnodeBeforeUpdate)&&Me(Y,S,y,p),J&&ct(y,p,S,"beforeUpdate"),S&&Ut(S,!0),(F.innerHTML&&K.innerHTML==null||F.textContent&&K.textContent==null)&&a($,""),I?O(p.dynamicChildren,I,$,S,A,xo(y,C),P):N||V(p,y,$,null,S,A,xo(y,C),P,!1),j>0){if(j&16)q($,F,K,S,C);else if(j&2&&F.class!==K.class&&s($,"class",null,K.class,C),j&4&&s($,"style",F.style,K.style,C),j&8){const ee=y.dynamicProps;for(let ce=0;ce{Y&&Me(Y,S,y,p),J&&ct(y,p,S,"updated")},A)},O=(p,y,S,A,C,P,N)=>{for(let $=0;${if(y!==S){if(y!==ie)for(const P in y)!hn(P)&&!(P in S)&&s(p,P,y[P],null,C,A);for(const P in S){if(hn(P))continue;const N=S[P],$=y[P];N!==$&&P!=="value"&&s(p,P,$,N,C,A)}"value"in S&&s(p,"value",y.value,S.value,C)}},M=(p,y,S,A,C,P,N,$,j)=>{const I=y.el=p?p.el:l(""),J=y.anchor=p?p.anchor:l("");let{patchFlag:F,dynamicChildren:K,slotScopeIds:Y}=y;Y&&($=$?$.concat(Y):Y),p==null?(r(I,S,A),r(J,S,A),U(y.children||[],S,J,C,P,N,$,j)):F>0&&F&64&&K&&p.dynamicChildren?(O(p.dynamicChildren,K,S,C,P,N,$),(y.key!=null||C&&y===C.subTree)&&Yc(p,y,!0)):V(p,y,S,J,C,P,N,$,j)},z=(p,y,S,A,C,P,N,$,j)=>{y.slotScopeIds=$,p==null?y.shapeFlag&512?C.ctx.activate(y,S,A,N,j):Z(y,S,A,C,P,N,j):ne(p,y,j)},Z=(p,y,S,A,C,P,N)=>{const $=p.component=Rd(p,A,C);if(ir(p)&&($.ctx.renderer=W),xd($,!1,N),$.asyncDep){if(C&&C.registerDep($,B,N),!p.el){const j=$.subTree=de(_e);k(null,j,y,S)}}else B($,p,y,S,C,P,N)},ne=(p,y,S)=>{const A=y.component=p.component;if(md(p,y,S))if(A.asyncDep&&!A.asyncResolved){X(A,y,S);return}else A.next=y,A.update();else y.el=p.el,A.vnode=y},B=(p,y,S,A,C,P,N)=>{const $=()=>{if(p.isMounted){let{next:F,bu:K,u:Y,parent:ee,vnode:ce}=p;{const De=Xc(p);if(De){F&&(F.el=ce.el,X(p,F,N)),De.asyncDep.then(()=>{p.isUnmounted||$()});return}}let le=F,Fe;Ut(p,!1),F?(F.el=ce.el,X(p,F,N)):F=ce,K&&jn(K),(Fe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(Fe,ee,F,ce),Ut(p,!0);const Ce=Ao(p),Ye=p.subTree;p.subTree=Ce,m(Ye,Ce,f(Ye.el),x(Ye),p,C,P),F.el=Ce.el,le===null&&fo(p,Ce.el),Y&&ke(Y,C),(Fe=F.props&&F.props.onVnodeUpdated)&&ke(()=>Me(Fe,ee,F,ce),C)}else{let F;const{el:K,props:Y}=y,{bm:ee,m:ce,parent:le,root:Fe,type:Ce}=p,Ye=$t(y);if(Ut(p,!1),ee&&jn(ee),!Ye&&(F=Y&&Y.onVnodeBeforeMount)&&Me(F,le,y),Ut(p,!0),K&&he){const De=()=>{p.subTree=Ao(p),he(K,p.subTree,p,C,null)};Ye&&Ce.__asyncHydrate?Ce.__asyncHydrate(K,p,De):De()}else{Fe.ce&&Fe.ce._injectChildStyle(Ce);const De=p.subTree=Ao(p);m(null,De,S,A,p,C,P),y.el=De.el}if(ce&&ke(ce,C),!Ye&&(F=Y&&Y.onVnodeMounted)){const De=y;ke(()=>Me(F,le,De),C)}(y.shapeFlag&256||le&&$t(le.vnode)&&le.vnode.shapeFlag&256)&&p.a&&ke(p.a,C),p.isMounted=!0,y=S=A=null}};p.scope.on();const j=p.effect=new ec($);p.scope.off();const I=p.update=j.run.bind(j),J=p.job=j.runIfDirty.bind(j);J.i=p,J.id=p.uid,j.scheduler=()=>js(J),Ut(p,!0),I()},X=(p,y,S)=>{y.component=p;const A=p.vnode.props;p.vnode=y,p.next=null,Zf(p,y.props,A,S),rd(p,y.children,S),wt(),ui(p),kt()},V=(p,y,S,A,C,P,N,$,j=!1)=>{const I=p&&p.children,J=p?p.shapeFlag:0,F=y.children,{patchFlag:K,shapeFlag:Y}=y;if(K>0){if(K&128){Ct(I,F,S,A,C,P,N,$,j);return}else if(K&256){ye(I,F,S,A,C,P,N,$,j);return}}Y&8?(J&16&&We(I,C,P),F!==I&&a(S,F)):J&16?Y&16?Ct(I,F,S,A,C,P,N,$,j):We(I,C,P,!0):(J&8&&a(S,""),Y&16&&U(F,S,A,C,P,N,$,j))},ye=(p,y,S,A,C,P,N,$,j)=>{p=p||fn,y=y||fn;const I=p.length,J=y.length,F=Math.min(I,J);let K;for(K=0;KJ?We(p,C,P,!0,!1,F):U(y,S,A,C,P,N,$,j,F)},Ct=(p,y,S,A,C,P,N,$,j)=>{let I=0;const J=y.length;let F=p.length-1,K=J-1;for(;I<=F&&I<=K;){const Y=p[I],ee=y[I]=j?Ot(y[I]):Be(y[I]);if(Ze(Y,ee))m(Y,ee,S,null,C,P,N,$,j);else break;I++}for(;I<=F&&I<=K;){const Y=p[F],ee=y[K]=j?Ot(y[K]):Be(y[K]);if(Ze(Y,ee))m(Y,ee,S,null,C,P,N,$,j);else break;F--,K--}if(I>F){if(I<=K){const Y=K+1,ee=YK)for(;I<=F;)Ie(p[I],C,P,!0),I++;else{const Y=I,ee=I,ce=new Map;for(I=ee;I<=K;I++){const Ue=y[I]=j?Ot(y[I]):Be(y[I]);Ue.key!=null&&ce.set(Ue.key,I)}let le,Fe=0;const Ce=K-ee+1;let Ye=!1,De=0;const Tn=new Array(Ce);for(I=0;I=Ce){Ie(Ue,C,P,!0);continue}let st;if(Ue.key!=null)st=ce.get(Ue.key);else for(le=ee;le<=K;le++)if(Tn[le-ee]===0&&Ze(Ue,y[le])){st=le;break}st===void 0?Ie(Ue,C,P,!0):(Tn[st-ee]=I+1,st>=De?De=st:Ye=!0,m(Ue,y[st],S,null,C,P,N,$,j),Fe++)}const ri=Ye?id(Tn):fn;for(le=ri.length-1,I=Ce-1;I>=0;I--){const Ue=ee+I,st=y[Ue],oi=Ue+1{const{el:P,type:N,transition:$,children:j,shapeFlag:I}=p;if(I&6){ot(p.component.subTree,y,S,A);return}if(I&128){p.suspense.move(y,S,A);return}if(I&64){N.move(p,y,S,W);return}if(N===Ae){r(P,y,S);for(let F=0;F$.enter(P),C);else{const{leave:F,delayLeave:K,afterLeave:Y}=$,ee=()=>{p.ctx.isUnmounted?o(P):r(P,y,S)},ce=()=>{F(P,()=>{ee(),Y&&Y()})};K?K(P,ee,ce):ce()}else r(P,y,S)},Ie=(p,y,S,A=!1,C=!1)=>{const{type:P,props:N,ref:$,children:j,dynamicChildren:I,shapeFlag:J,patchFlag:F,dirs:K,cacheIndex:Y}=p;if(F===-2&&(C=!1),$!=null&&(wt(),Gn($,null,S,p,!0),kt()),Y!=null&&(y.renderCache[Y]=void 0),J&256){y.ctx.deactivate(p);return}const ee=J&1&&K,ce=!$t(p);let le;if(ce&&(le=N&&N.onVnodeBeforeUnmount)&&Me(le,y,p),J&6)fr(p.component,S,A);else{if(J&128){p.suspense.unmount(S,A);return}ee&&ct(p,null,y,"beforeUnmount"),J&64?p.type.remove(p,y,S,W,A):I&&!I.hasOnce&&(P!==Ae||F>0&&F&64)?We(I,y,S,!1,!0):(P===Ae&&F&384||!C&&J&16)&&We(j,y,S),A&&rn(p)}(ce&&(le=N&&N.onVnodeUnmounted)||ee)&&ke(()=>{le&&Me(le,y,p),ee&&ct(p,null,y,"unmounted")},S)},rn=p=>{const{type:y,el:S,anchor:A,transition:C}=p;if(y===Ae){on(S,A);return}if(y===Fn){b(p);return}const P=()=>{o(S),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(p.shapeFlag&1&&C&&!C.persisted){const{leave:N,delayLeave:$}=C,j=()=>N(S,P);$?$(p.el,P,j):j()}else P()},on=(p,y)=>{let S;for(;p!==y;)S=d(p),o(p),p=S;o(y)},fr=(p,y,S)=>{const{bum:A,scope:C,job:P,subTree:N,um:$,m:j,a:I,parent:J,slots:{__:F}}=p;Wr(j),Wr(I),A&&jn(A),J&&G(F)&&F.forEach(K=>{J.renderCache[K]=void 0}),C.stop(),P&&(P.flags|=8,Ie(N,p,y,S)),$&&ke($,y),ke(()=>{p.isUnmounted=!0},y),y&&y.pendingBranch&&!y.isUnmounted&&p.asyncDep&&!p.asyncResolved&&p.suspenseId===y.pendingId&&(y.deps--,y.deps===0&&y.resolve())},We=(p,y,S,A=!1,C=!1,P=0)=>{for(let N=P;N{if(p.shapeFlag&6)return x(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const y=d(p.anchor||p.el),S=y&&y[Tf];return S?d(S):y};let D=!1;const H=(p,y,S)=>{p==null?y._vnode&&Ie(y._vnode,null,null,!0):m(y._vnode||null,p,y,null,null,null,S),y._vnode=p,D||(D=!0,ui(),Fr(),D=!1)},W={p:m,um:Ie,m:ot,r:rn,mt:Z,mc:U,pc:V,pbc:O,n:x,o:e};let re,he;return t&&([re,he]=t(W)),{render:H,hydrate:re,createApp:Yf(H,re)}}function xo({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 Ut({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Qc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Yc(e,t,n=!1){const r=e.children,o=t.children;if(G(r)&&G(o))for(let s=0;s>1,e[n[l]]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 Xc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Xc(t)}function Wr(e){if(e)for(let t=0;tTe(ld);function ad(e,t){return ao(e,null,t)}function ud(e,t){return ao(e,null,{flush:"sync"})}function tt(e,t,n){return ao(e,t,n)}function ao(e,t,n=ie){const{immediate:r,deep:o,flush:s,once:i}=n,l=we({},n),c=t&&r||!t&&s!=="post";let u;if(vn){if(s==="sync"){const h=cd();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!c){const h=()=>{};return h.stop=ut,h.resume=ut,h.pause=ut,h}}const a=ve;l.call=(h,_,m)=>nt(h,a,_,m);let f=!1;s==="post"?l.scheduler=h=>{ke(h,a&&a.suspense)}:s!=="sync"&&(f=!0,l.scheduler=(h,_)=>{_?h():js(h)}),l.augmentJob=h=>{t&&(h.flags|=4),f&&(h.flags|=2,a&&(h.id=a.uid,h.i=a))};const d=kf(e,t,l);return vn&&(u?u.push(d):c&&d()),d}function fd(e,t,n){const r=this.proxy,o=ge(e)?e.includes(".")?Zc(r,e):()=>r[e]:e.bind(r,r);let s;Q(t)?s=t:(s=t.handler,n=t);const i=cr(this),l=ao(o,s.bind(r),n);return i(),l}function Zc(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{let a,f=ie,d;return ud(()=>{const h=e[o];Le(a,h)&&(a=h,u())}),{get(){return c(),n.get?n.get(a):a},set(h){const _=n.set?n.set(h):h;if(!Le(_,a)&&!(f!==ie&&Le(h,f)))return;const m=r.vnode.props;m&&(t in m||o in m||s in m)&&(`onUpdate:${t}`in m||`onUpdate:${o}`in m||`onUpdate:${s}`in m)||(a=h,u()),r.emit(`update:${t}`,_),Le(h,_)&&Le(h,f)&&!Le(_,d)&&u(),f=h,d=_}}});return l[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?i||ie:l,done:!1}:{done:!0}}}},l}const ea=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ve(t)}Modifiers`]||e[`${Dt(t)}Modifiers`];function dd(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ie;let o=n;const s=t.startsWith("update:"),i=s&&ea(r,t.slice(7));i&&(i.trim&&(o=n.map(a=>ge(a)?a.trim():a)),i.number&&(o=n.map($u)));let l,c=r[l=bo(t)]||r[l=bo(Ve(t))];!c&&s&&(c=r[l=bo(Dt(t))]),c&&nt(c,e,6,o);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nt(u,e,6,o)}}function ta(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!Q(e)){const c=u=>{const a=ta(u,t,!0);a&&(l=!0,we(i,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!s&&!l?(ue(e)&&r.set(e,null),null):(G(s)?s.forEach(c=>i[c]=null):we(i,s),ue(e)&&r.set(e,i),i)}function uo(e,t){return!e||!nr(t)?!1:(t=t.slice(2).replace(/Once$/,""),se(e,t[0].toLowerCase()+t.slice(1))||se(e,Dt(t))||se(e,t))}function Ao(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[s],slots:i,attrs:l,emit:c,render:u,renderCache:a,props:f,data:d,setupState:h,ctx:_,inheritAttrs:m}=e,v=Dr(e);let k,w;try{if(n.shapeFlag&4){const b=o||r,E=b;k=Be(u.call(E,b,a,f,h,d,_)),w=l}else{const b=t;k=Be(b.length>1?b(f,{attrs:l,slots:i,emit:c}):b(f,null)),w=t.props?l:pd(l)}}catch(b){Dn.length=0,En(b,e,1),k=de(_e)}let g=k;if(w&&m!==!1){const b=Object.keys(w),{shapeFlag:E}=g;b.length&&E&7&&(s&&b.some(Ts)&&(w=gd(w,s)),g=Je(g,w,!1,!0))}return n.dirs&&(g=Je(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&yn(g,n.transition),k=g,Dr(v),k}function hd(e,t=!0){let n;for(let r=0;r{let t;for(const n in e)(n==="class"||n==="style"||nr(n))&&((t||(t={}))[n]=e[n]);return t},gd=(e,t)=>{const n={};for(const r in e)(!Ts(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function md(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:c}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?bi(r,i,u):!!i;if(c&8){const a=t.dynamicProps;for(let f=0;fe.__isSuspense;let es=0;const yd={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,s,i,l,c,u){if(e==null)_d(t,n,r,o,s,i,l,c,u);else{if(s&&s.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}bd(e,t,n,r,o,i,l,c,u)}},hydrate:vd,normalize:wd},Us=yd;function Jn(e,t){const n=e.props&&e.props[t];Q(n)&&n()}function _d(e,t,n,r,o,s,i,l,c){const{p:u,o:{createElement:a}}=c,f=a("div"),d=e.suspense=na(e,o,r,t,f,n,s,i,l,c);u(null,d.pendingBranch=e.ssContent,f,null,r,d,s,i),d.deps>0?(Jn(e,"onPending"),Jn(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,s,i),gn(d,e.ssFallback)):d.resolve(!1,!0)}function bd(e,t,n,r,o,s,i,l,{p:c,um:u,o:{createElement:a}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,h=t.ssFallback,{activeBranch:_,pendingBranch:m,isInFallback:v,isHydrating:k}=f;if(m)f.pendingBranch=d,Ze(d,m)?(c(m,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0?f.resolve():v&&(k||(c(_,h,n,r,o,null,s,i,l),gn(f,h)))):(f.pendingId=es++,k?(f.isHydrating=!1,f.activeBranch=m):u(m,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=a("div"),v?(c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0?f.resolve():(c(_,h,n,r,o,null,s,i,l),gn(f,h))):_&&Ze(d,_)?(c(_,d,n,r,o,f,s,i,l),f.resolve(!0)):(c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0&&f.resolve()));else if(_&&Ze(d,_))c(_,d,n,r,o,f,s,i,l),gn(f,d);else if(Jn(t,"onPending"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=es++,c(null,d,f.hiddenContainer,null,o,f,s,i,l),f.deps<=0)f.resolve();else{const{timeout:w,pendingId:g}=f;w>0?setTimeout(()=>{f.pendingId===g&&f.fallback(h)},w):w===0&&f.fallback(h)}}function na(e,t,n,r,o,s,i,l,c,u,a=!1){const{p:f,m:d,um:h,n:_,o:{parentNode:m,remove:v}}=u;let k;const w=kd(e);w&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);const g=e.props?Jl(e.props.timeout):void 0,b=s,E={vnode:e,parent:t,parentComponent:n,namespace:i,container:r,hiddenContainer:o,deps:0,pendingId:es++,timeout:typeof g=="number"?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!a,isHydrating:a,isUnmounted:!1,effects:[],resolve(T=!1,R=!1){const{vnode:U,activeBranch:L,pendingBranch:O,pendingId:q,effects:M,parentComponent:z,container:Z}=E;let ne=!1;E.isHydrating?E.isHydrating=!1:T||(ne=L&&O.transition&&O.transition.mode==="out-in",ne&&(L.transition.afterLeave=()=>{q===E.pendingId&&(d(O,Z,s===b?_(L):s,0),Go(M))}),L&&(m(L.el)===Z&&(s=_(L)),h(L,z,E,!0)),ne||d(O,Z,s,0)),gn(E,O),E.pendingBranch=null,E.isInFallback=!1;let B=E.parent,X=!1;for(;B;){if(B.pendingBranch){B.effects.push(...M),X=!0;break}B=B.parent}!X&&!ne&&Go(M),E.effects=[],w&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!R&&t.resolve()),Jn(U,"onResolve")},fallback(T){if(!E.pendingBranch)return;const{vnode:R,activeBranch:U,parentComponent:L,container:O,namespace:q}=E;Jn(R,"onFallback");const M=_(U),z=()=>{E.isInFallback&&(f(null,T,O,M,L,null,q,l,c),gn(E,T))},Z=T.transition&&T.transition.mode==="out-in";Z&&(U.transition.afterLeave=z),E.isInFallback=!0,h(U,L,null,!0),Z||z()},move(T,R,U){E.activeBranch&&d(E.activeBranch,T,R,U),E.container=T},next(){return E.activeBranch&&_(E.activeBranch)},registerDep(T,R,U){const L=!!E.pendingBranch;L&&E.deps++;const O=T.vnode.el;T.asyncDep.catch(q=>{En(q,T,0)}).then(q=>{if(T.isUnmounted||E.isUnmounted||E.pendingId!==T.suspenseId)return;T.asyncResolved=!0;const{vnode:M}=T;ns(T,q),O&&(M.el=O);const z=!O&&T.subTree.el;R(T,M,m(O||T.subTree.el),O?null:_(T.subTree),E,i,U),z&&v(z),fo(T,M.el),L&&--E.deps===0&&E.resolve()})},unmount(T,R){E.isUnmounted=!0,E.activeBranch&&h(E.activeBranch,n,T,R),E.pendingBranch&&h(E.pendingBranch,n,T,R)}};return E}function vd(e,t,n,r,o,s,i,l,c){const u=t.suspense=na(t,r,n,e.parentNode,document.createElement("div"),null,o,s,i,l,!0),a=c(e,u.pendingBranch=t.ssContent,n,u,s,i);return u.deps===0&&u.resolve(!1,!0),a}function wd(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=vi(r?n.default:n),e.ssFallback=r?vi(n.fallback):de(_e)}function vi(e){let t;if(Q(e)){const n=bn&&e._c;n&&(e._d=!1,ze()),e=e(),n&&(e._d=!0,t=$e,oa())}return G(e)&&(e=hd(e)),e=Be(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function ra(e,t){t&&t.pendingBranch?G(e)?t.effects.push(...e):t.effects.push(e):Go(e)}function gn(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,fo(r,o))}function kd(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ae=Symbol.for("v-fgt"),Qt=Symbol.for("v-txt"),_e=Symbol.for("v-cmt"),Fn=Symbol.for("v-stc"),Dn=[];let $e=null;function ze(e=!1){Dn.push($e=e?null:[])}function oa(){Dn.pop(),$e=Dn[Dn.length-1]||null}let bn=1;function wi(e,t=!1){bn+=e,e<0&&$e&&t&&($e.hasOnce=!0)}function sa(e){return e.dynamicChildren=bn>0?$e||fn:null,oa(),bn>0&&$e&&$e.push(e),e}function ia(e,t,n,r,o,s){return sa(ca(e,t,n,r,o,s,!0))}function vt(e,t,n,r,o){return sa(de(e,t,n,r,o,!0))}function Xt(e){return e?e.__v_isVNode===!0:!1}function Ze(e,t){return e.type===t.type&&e.key===t.key}const la=({key:e})=>e??null,Cr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||be(e)||Q(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function ca(e,t=null,n=null,r=0,o=null,s=e===Ae?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&la(t),ref:t&&Cr(t),scopeId:kc,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:Se};return l?(Bs(c,n),s&128&&e.normalize(c)):n&&(c.shapeFlag|=ge(n)?8:16),bn>0&&!i&&$e&&(c.patchFlag>0||s&6)&&c.patchFlag!==32&&$e.push(c),c}const de=Ed;function Ed(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===jc)&&(e=_e),Xt(e)){const l=Je(e,t,!0);return n&&Bs(l,n),bn>0&&!s&&$e&&(l.shapeFlag&6?$e[$e.indexOf(e)]=l:$e.push(l)),l.patchFlag=-2,l}if(Od(e)&&(e=e.__vccOpts),t){t=aa(t);let{class:l,style:c}=t;l&&!ge(l)&&(t.class=oo(l)),ue(c)&&(Ls(c)&&!G(c)&&(c=we({},c)),t.style=ro(c))}const i=ge(e)?1:Kr(e)?128:Ec(e)?64:ue(e)?4:Q(e)?2:0;return ca(e,t,n,r,o,i,s,!0)}function aa(e){return e?Ls(e)||Vc(e)?we({},e):e:null}function Je(e,t,n=!1,r=!1){const{props:o,ref:s,patchFlag:i,children:l,transition:c}=e,u=t?fa(o||{},t):o,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&la(u),ref:t&&t.ref?n&&s?G(s)?s.concat(Cr(t)):[s,Cr(t)]:Cr(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Je(e.ssContent),ssFallback:e.ssFallback&&Je(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&yn(a,c.clone(a)),a}function ua(e=" ",t=0){return de(Qt,null,e,t)}function Sd(e,t){const n=de(Fn,null,e);return n.staticCount=t,n}function g_(e="",t=!1){return t?(ze(),vt(_e,null,e)):de(_e,null,e)}function Be(e){return e==null||typeof e=="boolean"?de(_e):G(e)?de(Ae,null,e.slice()):Xt(e)?Ot(e):de(Qt,null,String(e))}function Ot(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Je(e)}function Bs(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(G(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Bs(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Vc(t)?t._ctx=Se:o===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Q(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),r&64?(n=16,t=[ua(t)]):n=8);e.children=t,e.shapeFlag|=n}function fa(...e){const t={};for(let n=0;nve||Se;let qr,ts;{const e=no(),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)}};qr=t("__VUE_INSTANCE_SETTERS__",n=>ve=n),ts=t("__VUE_SSR_SETTERS__",n=>vn=n)}const cr=e=>{const t=ve;return qr(e),e.scope.on(),()=>{e.scope.off(),qr(t)}},ki=()=>{ve&&ve.scope.off(),qr(null)};function da(e){return e.vnode.shapeFlag&4}let vn=!1;function xd(e,t=!1,n=!1){t&&ts(t);const{props:r,children:o}=e.vnode,s=da(e);Xf(e,r,s,t),nd(e,o,n||t);const i=s?Ad(e,t):void 0;return t&&ts(!1),i}function Ad(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vf);const{setup:r}=n;if(r){wt();const o=e.setupContext=r.length>1?pa(e):null,s=cr(e),i=sr(r,e,0,[e.props,o]),l=Rs(i);if(kt(),s(),(l||e.sp)&&!$t(e)&&Ns(e),l){if(i.then(ki,ki),t)return i.then(c=>{ns(e,c)}).catch(c=>{En(c,e,0)});e.asyncDep=i}else ns(e,i)}else ha(e)}function ns(e,t,n){Q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=gc(t)),ha(e)}function ha(e,t,n){const r=e.type;e.render||(e.render=r.render||ut);{const o=cr(e);wt();try{Kf(e)}finally{kt(),o()}}}const Pd={get(e,t){return xe(e,"get",""),e[t]}};function pa(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Pd),slots:e.slots,emit:e.emit,expose:t}}function Vs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(gc(df(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Hn)return Hn[n](e)},has(t,n){return n in t||n in Hn}})):e.proxy}function rs(e,t=!0){return Q(e)?e.displayName||e.name:e.name||t&&e.__name}function Od(e){return Q(e)&&"__vccOpts"in e}const je=(e,t)=>vf(e,t,vn);function pe(e,t,n){const r=arguments.length;return r===2?ue(t)&&!G(t)?Xt(t)?de(e,null,[t]):de(e,t):de(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Xt(n)&&(n=[n]),de(e,t,n))}const Id="3.5.16";/** -* @vue/runtime-dom v3.5.16 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let os;const Ei=typeof window<"u"&&window.trustedTypes;if(Ei)try{os=Ei.createPolicy("vue",{createHTML:e=>e})}catch{}const ga=os?e=>os.createHTML(e):e=>e,Md="http://www.w3.org/2000/svg",Ld="http://www.w3.org/1998/Math/MathML",_t=typeof document<"u"?document:null,Si=_t&&_t.createElement("template"),jd={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"?_t.createElementNS(Md,e):t==="mathml"?_t.createElementNS(Ld,e):n?_t.createElement(e,{is:n}):_t.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>_t.createTextNode(e),createComment:e=>_t.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>_t.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{Si.innerHTML=ga(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const l=Si.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},xt="transition",xn="animation",Qn=Symbol("_vtc"),ma={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},$d=we({},Sc,ma),Nd=e=>(e.displayName="Transition",e.props=$d,e),Hd=Nd((e,{slots:t})=>pe(xf,Fd(e),t)),Bt=(e,t=[])=>{G(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ti=e=>e?G(e)?e.some(t=>t.length>1):e.length>1:!1;function Fd(e){const t={};for(const M in e)M in ma||(t[M]=e[M]);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:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:u=i,appearToClass:a=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,_=Dd(o),m=_&&_[0],v=_&&_[1],{onBeforeEnter:k,onEnter:w,onEnterCancelled:g,onLeave:b,onLeaveCancelled:E,onBeforeAppear:T=k,onAppear:R=w,onAppearCancelled:U=g}=t,L=(M,z,Z,ne)=>{M._enterCancelled=ne,Vt(M,z?a:l),Vt(M,z?u:i),Z&&Z()},O=(M,z)=>{M._isLeaving=!1,Vt(M,f),Vt(M,h),Vt(M,d),z&&z()},q=M=>(z,Z)=>{const ne=M?R:w,B=()=>L(z,M,Z);Bt(ne,[z,B]),Ci(()=>{Vt(z,M?c:s),gt(z,M?a:l),Ti(ne)||Ri(z,r,m,B)})};return we(t,{onBeforeEnter(M){Bt(k,[M]),gt(M,s),gt(M,i)},onBeforeAppear(M){Bt(T,[M]),gt(M,c),gt(M,u)},onEnter:q(!1),onAppear:q(!0),onLeave(M,z){M._isLeaving=!0;const Z=()=>O(M,z);gt(M,f),M._enterCancelled?(gt(M,d),Pi()):(Pi(),gt(M,d)),Ci(()=>{M._isLeaving&&(Vt(M,f),gt(M,h),Ti(b)||Ri(M,r,v,Z))}),Bt(b,[M,Z])},onEnterCancelled(M){L(M,!1,void 0,!0),Bt(g,[M])},onAppearCancelled(M){L(M,!0,void 0,!0),Bt(U,[M])},onLeaveCancelled(M){O(M),Bt(E,[M])}})}function Dd(e){if(e==null)return null;if(ue(e))return[Po(e.enter),Po(e.leave)];{const t=Po(e);return[t,t]}}function Po(e){return Jl(e)}function gt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Qn]||(e[Qn]=new Set)).add(t)}function Vt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Qn];n&&(n.delete(t),n.size||(e[Qn]=void 0))}function Ci(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Ud=0;function Ri(e,t,n,r){const o=e._endId=++Ud,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=Bd(e,t);if(!i)return r();const u=i+"end";let a=0;const f=()=>{e.removeEventListener(u,d),s()},d=h=>{h.target===e&&++a>=c&&f()};setTimeout(()=>{a(n[_]||"").split(", "),o=r(`${xt}Delay`),s=r(`${xt}Duration`),i=xi(o,s),l=r(`${xn}Delay`),c=r(`${xn}Duration`),u=xi(l,c);let a=null,f=0,d=0;t===xt?i>0&&(a=xt,f=i,d=s.length):t===xn?u>0&&(a=xn,f=u,d=c.length):(f=Math.max(i,u),a=f>0?i>u?xt:xn:null,d=a?a===xt?s.length:c.length:0);const h=a===xt&&/\b(transform|all)(,|$)/.test(r(`${xt}Property`).toString());return{type:a,timeout:f,propCount:d,hasTransform:h}}function xi(e,t){for(;e.lengthAi(n)+Ai(e[r])))}function Ai(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Pi(){return document.body.offsetHeight}function Vd(e,t,n){const r=e[Qn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Oi=Symbol("_vod"),Wd=Symbol("_vsh"),Kd=Symbol(""),qd=/(^|;)\s*display\s*:/;function zd(e,t,n){const r=e.style,o=ge(n);let s=!1;if(n&&!o){if(t)if(ge(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Rr(r,l,"")}else for(const i in t)n[i]==null&&Rr(r,i,"");for(const i in n)i==="display"&&(s=!0),Rr(r,i,n[i])}else if(o){if(t!==n){const i=r[Kd];i&&(n+=";"+i),r.cssText=n,s=qd.test(n)}}else t&&e.removeAttribute("style");Oi in e&&(e[Oi]=s?r.display:"",e[Wd]&&(r.display="none"))}const Ii=/\s*!important$/;function Rr(e,t,n){if(G(n))n.forEach(r=>Rr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Gd(e,t);Ii.test(n)?e.setProperty(Dt(r),n.replace(Ii,""),"important"):e[r]=n}}const Mi=["Webkit","Moz","ms"],Oo={};function Gd(e,t){const n=Oo[t];if(n)return n;let r=Ve(t);if(r!=="filter"&&r in e)return Oo[t]=r;r=to(r);for(let o=0;oIo||(Zd.then(()=>Io=0),Io=Date.now());function th(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;nt(nh(r,n.value),t,5,[r])};return n.value=e,n.attached=eh(),n}function nh(e,t){if(G(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 Fi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rh=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Vd(e,r,i):t==="style"?zd(e,n,r):nr(t)?Ts(t)||Yd(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oh(e,t,r,i))?($i(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ji(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(r))?$i(e,Ve(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),ji(e,t,r,i))};function oh(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fi(t)&&Q(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 Fi(t)&&ge(n)?!1:t in e}const sh=["ctrl","shift","alt","meta"],ih={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)=>sh.some(n=>e[`${n}Key`]&&!t.includes(n))},m_=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(o,...s)=>{for(let i=0;i{const t=lh().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ba(r);if(!o)return;const s=t._component;!Q(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,_a(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t},uh=(...e)=>{const t=ch().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ba(r);if(o)return n(o,!0,_a(o))},t};function _a(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ba(e){return ge(e)?document.querySelector(e):e}const fh=/"(?:_|\\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*:/,dh=/"(?: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*:/,hh=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function ph(e,t){if(e==="__proto__"||e==="constructor"&&t&&typeof t=="object"&&"prototype"in t){gh(e);return}return t}function gh(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function Yn(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(!hh.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(fh.test(e)||dh.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,ph)}return JSON.parse(e)}catch(r){if(t.strict)throw r;return e}}const mh=/#/g,yh=/&/g,_h=/\//g,bh=/=/g,Ws=/\+/g,vh=/%5e/gi,wh=/%60/gi,kh=/%7c/gi,Eh=/%20/gi;function Sh(e){return encodeURI(""+e).replace(kh,"|")}function ss(e){return Sh(typeof e=="string"?e:JSON.stringify(e)).replace(Ws,"%2B").replace(Eh,"+").replace(mh,"%23").replace(yh,"%26").replace(wh,"`").replace(vh,"^").replace(_h,"%2F")}function Mo(e){return ss(e).replace(bh,"%3D")}function zr(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function Th(e){return zr(e.replace(Ws," "))}function Ch(e){return zr(e.replace(Ws," "))}function va(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=Th(r[1]);if(o==="__proto__"||o==="constructor")continue;const s=Ch(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 Rh(e,t){return(typeof t=="number"||typeof t=="boolean")&&(t=String(t)),t?Array.isArray(t)?t.map(n=>`${Mo(e)}=${ss(n)}`).join("&"):`${Mo(e)}=${ss(t)}`:Mo(e)}function xh(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>Rh(t,e[t])).filter(Boolean).join("&")}const Ah=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,Ph=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,Oh=/^([/\\]\s*){2,}[^/\\]/,Ih=/^[\s\0]*(blob|data|javascript|vbscript):$/i,Mh=/\/$|\/\?|\/#/,Lh=/^\.?\//;function nn(e,t={}){return typeof t=="boolean"&&(t={acceptRelative:t}),t.strict?Ah.test(e):Ph.test(e)||(t.acceptRelative?Oh.test(e):!1)}function jh(e){return!!e&&Ih.test(e)}function is(e="",t){return t?Mh.test(e):e.endsWith("/")}function Xn(e="",t){if(!t)return(is(e)?e.slice(0,-1):e)||"/";if(!is(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 $h(e="",t){if(!t)return e.endsWith("/")?e:e+"/";if(is(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 Nh(e,t){if(ka(t)||nn(e))return e;const n=Xn(t);return e.startsWith(n)?e:Ks(n,e)}function Ui(e,t){if(ka(t))return e;const n=Xn(t);if(!e.startsWith(n))return e;const r=e.slice(n.length);return r[0]==="/"?r:"/"+r}function wa(e,t){const n=Ta(e),r={...va(n.search),...t};return n.search=xh(r),Dh(n)}function ka(e){return!e||e==="/"}function Hh(e){return e&&e!=="/"}function Ks(e,...t){let n=e||"";for(const r of t.filter(o=>Hh(o)))if(n){const o=r.replace(Lh,"");n=$h(n)+o}else n=r;return n}function Ea(...e){var i,l,c,u;const t=/\/(?!\/)/,n=e.filter(Boolean),r=[];let o=0;for(const a of n)if(!(!a||a==="/")){for(const[f,d]of a.split(t).entries())if(!(!d||d===".")){if(d===".."){if(r.length===1&&nn(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?(l=n[0])!=null&&l.startsWith("/")&&!s.startsWith("/")?s="/"+s:(c=n[0])!=null&&c.startsWith("./")&&!s.startsWith("./")&&(s="./"+s):s="../".repeat(-1*o)+s,(u=n[n.length-1])!=null&&u.endsWith("/")&&!s.endsWith("/")&&(s+="/"),s}function Fh(e,t){return zr(Xn(e))===zr(Xn(t))}const Sa=Symbol.for("ufo:protocolRelative");function Ta(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(!nn(e,{acceptRelative:!0}))return Bi(e);const[,r="",o,s=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,i="",l=""]=s.match(/([^#/?]*)(.*)?/)||[];r==="file:"&&(l=l.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:c,search:u,hash:a}=Bi(l);return{protocol:r.toLowerCase(),auth:o?o.slice(0,Math.max(0,o.length-1)):"",host:i,pathname:c,search:u,hash:a,[Sa]:!r}}function Bi(e=""){const[t="",n="",r=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:r}}function Dh(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[Sa]?(e.protocol||"")+"//":"")+o+s+t+n+r}class Uh extends Error{constructor(t,n){super(t,n),this.name="FetchError",n!=null&&n.cause&&!this.cause&&(this.cause=n.cause)}}function Bh(e){var c,u,a,f,d;const t=((c=e.error)==null?void 0:c.message)||((u=e.error)==null?void 0:u.toString())||"",n=((a=e.request)==null?void 0:a.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}`:""}`,l=new Uh(i,e.error?{cause:e.error}:void 0);for(const h of["request","options","response"])Object.defineProperty(l,h,{get(){return e[h]}});for(const[h,_]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(l,h,{get(){return e.response&&e.response[_]}});return l}const Vh=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function Vi(e="GET"){return Vh.has(e.toUpperCase())}function Wh(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 Kh=new Set(["image/svg","application/xml","application/xhtml","application/html"]),qh=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function zh(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return qh.test(t)?"json":Kh.has(t)||t.startsWith("text/")?"text":"blob"}function Gh(e,t,n,r){const o=Jh((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 Jh(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 br(e,t){if(t)if(Array.isArray(t))for(const n of t)await n(e);else await t(e)}const Qh=new Set([408,409,425,429,500,502,503,504]),Yh=new Set([101,204,205,304]);function Ca(e={}){const{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function o(l){const c=l.error&&l.error.name==="AbortError"&&!l.options.timeout||!1;if(l.options.retry!==!1&&!c){let a;typeof l.options.retry=="number"?a=l.options.retry:a=Vi(l.options.method)?0:1;const f=l.response&&l.response.status||500;if(a>0&&(Array.isArray(l.options.retryStatusCodes)?l.options.retryStatusCodes.includes(f):Qh.has(f))){const d=typeof l.options.retryDelay=="function"?l.options.retryDelay(l):l.options.retryDelay||0;return d>0&&await new Promise(h=>setTimeout(h,d)),s(l.request,{...l.options,retry:a-1})}}const u=Bh(l);throw Error.captureStackTrace&&Error.captureStackTrace(u,s),u}const s=async function(c,u={}){const a={request:c,options:Gh(c,u,e.defaults,n),response:void 0,error:void 0};a.options.method&&(a.options.method=a.options.method.toUpperCase()),a.options.onRequest&&await br(a,a.options.onRequest),typeof a.request=="string"&&(a.options.baseURL&&(a.request=Nh(a.request,a.options.baseURL)),a.options.query&&(a.request=wa(a.request,a.options.query),delete a.options.query),"query"in a.options&&delete a.options.query,"params"in a.options&&delete a.options.params),a.options.body&&Vi(a.options.method)&&(Wh(a.options.body)?(a.options.body=typeof a.options.body=="string"?a.options.body:JSON.stringify(a.options.body),a.options.headers=new n(a.options.headers||{}),a.options.headers.has("content-type")||a.options.headers.set("content-type","application/json"),a.options.headers.has("accept")||a.options.headers.set("accept","application/json")):("pipeTo"in a.options.body&&typeof a.options.body.pipeTo=="function"||typeof a.options.body.pipe=="function")&&("duplex"in a.options||(a.options.duplex="half")));let f;if(!a.options.signal&&a.options.timeout){const h=new r;f=setTimeout(()=>{const _=new Error("[TimeoutError]: The operation was aborted due to timeout");_.name="TimeoutError",_.code=23,h.abort(_)},a.options.timeout),a.options.signal=h.signal}try{a.response=await t(a.request,a.options)}catch(h){return a.error=h,a.options.onRequestError&&await br(a,a.options.onRequestError),await o(a)}finally{f&&clearTimeout(f)}if((a.response.body||a.response._bodyInit)&&!Yh.has(a.response.status)&&a.options.method!=="HEAD"){const h=(a.options.parseResponse?"json":a.options.responseType)||zh(a.response.headers.get("content-type")||"");switch(h){case"json":{const _=await a.response.text(),m=a.options.parseResponse||Yn;a.response._data=m(_);break}case"stream":{a.response._data=a.response.body||a.response._bodyInit;break}default:a.response._data=await a.response[h]()}}return a.options.onResponse&&await br(a,a.options.onResponse),!a.options.ignoreResponseError&&a.response.status>=400&&a.response.status<600?(a.options.onResponseError&&await br(a,a.options.onResponseError),await o(a)):a.response},i=async function(c,u){return(await s(c,u))._data};return i.raw=s,i.native=(...l)=>t(...l),i.create=(l={},c={})=>Ca({...e,...c,defaults:{...e.defaults,...c.defaults,...l}}),i}const Gr=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")}(),Xh=Gr.fetch?(...e)=>Gr.fetch(...e):()=>Promise.reject(new Error("[ofetch] global.fetch is not supported!")),Zh=Gr.Headers,ep=Gr.AbortController,tp=Ca({fetch:Xh,Headers:Zh,AbortController:ep}),np=tp,rp=()=>{var e;return((e=window==null?void 0:window.__NUXT__)==null?void 0:e.config)||{}},Jr=rp().app,op=()=>Jr.baseURL,sp=()=>Jr.buildAssetsDir,qs=(...e)=>Ea(Ra(),sp(),...e),Ra=(...e)=>{const t=Jr.cdnURL||Jr.baseURL;return e.length?Ea(t,...e):t};globalThis.__buildAssetsURL=qs,globalThis.__publicAssetsURL=Ra;globalThis.$fetch||(globalThis.$fetch=np.create({baseURL:op()}));"global"in globalThis||(globalThis.global=globalThis);function ls(e,t={},n){for(const r in e){const o=e[r],s=n?`${n}:${r}`:r;typeof o=="object"&&o!==null?ls(o,t,s):typeof o=="function"&&(t[s]=o)}return t}const ip={run:e=>e()},lp=()=>ip,xa=typeof console.createTask<"u"?console.createTask:lp;function cp(e,t){const n=t.shift(),r=xa(n);return e.reduce((o,s)=>o.then(()=>r.run(()=>s(...t))),Promise.resolve())}function ap(e,t){const n=t.shift(),r=xa(n);return Promise.all(e.map(o=>r.run(()=>o(...t))))}function Lo(e,t){for(const n of[...e])n(t)}class up{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=ls(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=ls(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(cp,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(ap,t,...n)}callHookWith(t,n,...r){const o=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&Lo(this._before,o);const s=t(n in this._hooks?[...this._hooks[n]]:[],r);return s instanceof Promise?s.finally(()=>{this._after&&o&&Lo(this._after,o)}):(this._after&&o&&Lo(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 Aa(){return new up}function fp(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,l)=>{l||r(i),t=i,n=!0},unset:()=>{t=void 0,n=!1},call:(i,l)=>{r(i),t=i;try{return o?o.run(i,l):l()}finally{n||(t=void 0)}},async callAsync(i,l){t=i;const c=()=>{t=i},u=()=>t===i?c:void 0;cs.add(u);try{const a=o?o.run(i,l):l();return n||(t=void 0),await a}finally{cs.delete(u)}}}}function dp(e={}){const t={};return{get(n,r={}){return t[n]||(t[n]=fp({...e,...r})),t[n]}}}const Qr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof global<"u"?global:typeof window<"u"?window:{},Wi="__unctx__",hp=Qr[Wi]||(Qr[Wi]=dp()),pp=(e,t={})=>hp.get(e,t),Ki="__unctx_async_handlers__",cs=Qr[Ki]||(Qr[Ki]=new Set);function mn(e){const t=[];for(const o of cs){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 gp=!1,qi=!1,mp=!1,y_={componentName:"NuxtLink",prefetch:!0,prefetchOn:{visibility:!0}},yp=null,_p="#__nuxt",Pa="nuxt-app",zi=36e5,bp="vite:preloadError";function Oa(e=Pa){return pp(e,{asyncContext:!1})}const vp="__nuxt_plugin";function wp(e){var o;let t=0;const n={_id:e.id||Pa||"nuxt-app",_scope:Ku(),provide:void 0,globalName:"nuxt",versions:{get nuxt(){return"3.17.4"},get vue(){return n.vueApp.version}},payload:at({...((o=e.ssrContext)==null?void 0:o.payload)||{},data:at({}),state:dt({}),once:new Set,_errors:at({})}),static:{data:{}},runWithContext(s){return n._scope.active&&!or()?n._scope.run(()=>Gi(n,s)):Gi(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:at({}),_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=Aa(),n.hook=n.hooks.hook,n.callHook=n.hooks.callHook,n.provide=(s,i)=>{const l="$"+s;vr(n,l,i),vr(n.vueApp.config.globalProperties,l,i)},vr(n.vueApp,"$nuxt",n),vr(n.vueApp.config.globalProperties,"$nuxt",n);{window.addEventListener(bp,i=>{n.callHook("app:chunkError",{error:i.payload}),i.payload.message.includes("Unable to preload CSS")&&i.preventDefault()}),window.useNuxtApp||(window.useNuxtApp=me);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 kp(e,t){t.hooks&&e.hooks.addHooks(t.hooks)}async function Ep(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 Sp(e,t){const n=new Set,r=[],o=[],s=[];let i=0;async function l(c){var a;const u=((a=c.dependsOn)==null?void 0:a.filter(f=>t.some(d=>d._name===f)&&!n.has(f)))??[];if(u.length>0)r.push([new Set(u),c]);else{const f=Ep(e,c).then(async()=>{c._name&&(n.add(c._name),await Promise.all(r.map(async([d,h])=>{d.has(c._name)&&(d.delete(c._name),d.size===0&&(i++,await l(h)))})))});c.parallel?o.push(f.catch(d=>s.push(d))):await f}}for(const c of t)kp(e,c);for(const c of t)await l(c);if(await Promise.all(o),i)for(let c=0;c{}),e,{[vp]:!0,_name:t})}function Gi(e,t,n){const r=()=>t();return Oa(e._id).set(e),e.vueApp.runWithContext(r)}function Ia(e){var n;let t;return co()&&(t=(n=tn())==null?void 0:n.appContext.app.$nuxt),t||(t=Oa(e).tryUse()),t||null}function me(e){const t=Ia(e);if(!t)throw new Error("[nuxt] instance unavailable");return t}function ar(e){return me().$config}function vr(e,t,n){Object.defineProperty(e,t,{get:()=>n})}function Tp(e,t){return{ctx:{table:e},matchAll:n=>La(n,e)}}function Ma(e){const t={};for(const n in e)t[n]=n==="dynamic"?new Map(Object.entries(e[n]).map(([r,o])=>[r,Ma(o)])):new Map(Object.entries(e[n]));return t}function Cp(e){return Tp(Ma(e))}function La(e,t,n){e.endsWith("/")&&(e=e.slice(0,-1)||"/");const r=[];for(const[s,i]of Ji(t.wildcard))(e===s||e.startsWith(s+"/"))&&r.push(i);for(const[s,i]of Ji(t.dynamic))if(e.startsWith(s+"/")){const l="/"+e.slice(s.length).split("/").splice(2).join("/");r.push(...La(l,i))}const o=t.static.get(e);return o&&r.push(o),r.filter(Boolean)}function Ji(e){return[...e.entries()].sort((t,n)=>t[0].length-n[0].length)}function jo(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 as(e,t,n=".",r){if(!jo(t))return as(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]]:jo(i)&&jo(o[s])?o[s]=as(i,o[s],(n?`${n}.`:"")+s.toString(),r):o[s]=i))}return o}function ja(e){return(...t)=>t.reduce((n,r)=>as(n,r,"",e),{})}const $a=ja(),Rp=ja((e,t,n)=>{if(e[t]!==void 0&&typeof n=="function")return e[t]=n(e[t]),!0});function xp(e,t){try{return t in e}catch{return!1}}class us extends Error{constructor(n,r={}){super(n,r);Rt(this,"statusCode",500);Rt(this,"fatal",!1);Rt(this,"unhandled",!1);Rt(this,"statusMessage");Rt(this,"data");Rt(this,"cause");r.cause&&!this.cause&&(this.cause=r.cause)}toJSON(){const n={message:this.message,statusCode:fs(this.statusCode,500)};return this.statusMessage&&(n.statusMessage=Na(this.statusMessage)),this.data!==void 0&&(n.data=this.data),n}}Rt(us,"__h3_error__",!0);function Ap(e){if(typeof e=="string")return new us(e);if(Pp(e))return e;const t=new us(e.message??e.statusMessage??"",{cause:e.cause||e});if(xp(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=fs(e.statusCode,t.statusCode):e.status&&(t.statusCode=fs(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const n=t.statusMessage;Na(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 Pp(e){var t;return((t=e==null?void 0:e.constructor)==null?void 0:t.__h3_error__)===!0}const Op=/[^\u0009\u0020-\u007E]/g;function Na(e=""){return e.replace(Op,"")}function fs(e,t=200){return!e||(typeof e=="string"&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}const Ha=Symbol("layout-meta"),Zt=Symbol("route"),He=()=>{var e;return(e=me())==null?void 0:e.$router},ho=()=>co()?Te(Zt,me()._route):me()._route;function __(e){return e}const Ip=()=>{try{if(me()._processingMiddleware)return!0}catch{return!1}return!1},ds=(e,t)=>{e||(e="/");const n=typeof e=="string"?e:"path"in e?Mp(e):He().resolve(e).href;if(t!=null&&t.open){const{target:c="_blank",windowFeatures:u={}}=t.open,a=Object.entries(u).filter(([f,d])=>d!==void 0).map(([f,d])=>`${f.toLowerCase()}=${d}`).join(", ");return open(n,c,a),Promise.resolve()}const r=nn(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:c}=new URL(n,window.location.href);if(c&&jh(c))throw new Error(`Cannot navigate to a URL with '${c}' protocol.`)}const s=Ip();if(!o&&s){if(t!=null&&t.replace){if(typeof e=="string"){const{pathname:c,search:u,hash:a}=Ta(e);return{path:c,...u&&{query:va(u)},...a&&{hash:a},replace:!0}}return{...e,replace:!0}}return e}const i=He(),l=me();return o?(l._scope.stop(),t!=null&&t.replace?location.replace(n):location.href=n,s?l.isHydrating?new Promise(()=>{}):!1:Promise.resolve()):t!=null&&t.replace?i.replace(e):i.push(e)};function Mp(e){return wa(e.path||"",e.query||{})+(e.hash||"")}const Fa="__nuxt_error",po=()=>yc(me().payload,"error"),qt=e=>{const t=Yt(e);try{const n=me(),r=po();n.hooks.callHook("app:error",t),r.value||(r.value=t)}catch{throw t}return t},Lp=async(e={})=>{const t=me(),n=po();t.callHook("app:error:cleared",e),e.redirect&&await He().replace(e.redirect),n.value=yp},Da=e=>!!e&&typeof e=="object"&&Fa in e,Yt=e=>{const t=Ap(e);return Object.defineProperty(t,Fa,{value:!0,configurable:!1,writable:!1}),t};function Qi(e){const t=$p(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 Np=-1,Hp=-2,Fp=-3,Dp=-4,Up=-5,Bp=-6;function Vp(e,t){return Wp(JSON.parse(e),t)}function Wp(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===Np)return;if(s===Fp)return NaN;if(s===Dp)return 1/0;if(s===Up)return-1/0;if(s===Bp)return-0;if(i)throw new Error("Invalid input");if(s in r)return r[s];const l=n[s];if(!l||typeof l!="object")r[s]=l;else if(Array.isArray(l))if(typeof l[0]=="string"){const c=l[0],u=t==null?void 0:t[c];if(u)return r[s]=u(o(l[1]));switch(c){case"Date":r[s]=new Date(l[1]);break;case"Set":const a=new Set;r[s]=a;for(let h=1;h`${r}:${String(o)}`).join(",")}`}function Yr(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=>Yr(s,t));if((o==null?void 0:o.constructor)===Object){const s={};for(const i of Object.keys(o))s[i]=Yr(o[i],t,i);return s}return o}function Zp(e,t){const n=e==="style"?new Map:new Set;function r(o){const s=o.trim();if(s)if(e==="style"){const[i,...l]=s.split(":").map(c=>c.trim());i&&l.length&&n.set(i,l.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 Ba(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]=Zp(n,r);return}if(Jp.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 e0(e,t){const n=typeof t=="object"&&typeof t!="function"?t:{[e==="script"||e==="noscript"||e==="style"?"innerHTML":"textContent"]:t},r=Ba({tag:e,props:{}},n);return r.key&&Kp.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 t0(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(e0(o,i))}),r.flat()}const ps=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Zi={base:-10,title:10},n0={critical:-8,high:-1,low:2},el={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}},r0=/@import/,An=e=>e===""||e===!0;function o0(e,t){var s;if(typeof t.tagPriority=="number")return t.tagPriority;let n=100;const r=n0[t.tagPriority]||0,o=e.resolvedOptions.disableCapoSorting?{link:{},script:{},style:{}}:el;if(t.tag in Zi)n=Zi[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=el.meta[i])}else t.tag==="link"&&t.props.rel?n=o.link[t.props.rel]:t.tag==="script"?An(t.props.async)?n=o.script.async:t.props.src&&!An(t.props.defer)&&!An(t.props.async)&&t.props.type!=="module"&&!((s=t.props.type)!=null&&s.endsWith("json"))?n=o.script.sync:An(t.props.defer)&&t.props.src&&!An(t.props.async)&&(n=o.script.defer):t.tag==="style"&&(n=t.innerHTML&&r0.test(t.innerHTML)?o.style.imported:o.style.sync);return(n||100)+r}function tl(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 s0(e={}){var l;const t=Aa();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:c=>tl(i,c),push(c,u){const a={...u||{}};delete a.head;const f=a._index??i._entryCount++,d={_i:f,input:c,options:a},h={_poll(_=!1){i.dirty=!0,!_&&s.push(f),t.callHook("entries:updated",i)},dispose(){r.delete(f)&&h._poll(!0)},patch(_){(!a.mode||a.mode==="server"&&n||a.mode==="client"&&!n)&&(d.input=_,r.set(f,d),h._poll())}};return h.patch(c),h},async resolveTags(){var h;const c={tagMap:new Map,tags:[],entries:[...i.entries.values()]};for(await t.callHook("entries:resolve",c);s.length;){const _=s.shift(),m=r.get(_);if(m){const v={tags:t0(m.input,e.propResolvers||[]).map(k=>Object.assign(k,m.options)),entry:m};await t.callHook("entries:normalize",v),m._tags=v.tags.map((k,w)=>(k._w=o0(i,k),k._p=(m._i<<10)+w,k._d=hs(k),k))}}let u=!1;c.entries.flatMap(_=>(_._tags||[]).map(m=>({...m,props:{...m.props}}))).sort(ps).reduce((_,m)=>{const v=String(m._d||m._p);if(!_.has(v))return _.set(v,m);const k=_.get(v);if(((m==null?void 0:m.tagDuplicateStrategy)||(Qp.has(m.tag)?"merge":null)||(m.key&&m.key===k.key?"merge":null))==="merge"){const g={...k.props};Object.entries(m.props).forEach(([b,E])=>g[b]=b==="style"?new Map([...k.props.style||new Map,...E]):b==="class"?new Set([...k.props.class||new Set,...E]):E),_.set(v,{...m,props:g})}else m._p>>10===k._p>>10&&m.tag==="meta"&&Ua(v)?(_.set(v,Object.assign([...Array.isArray(k)?k:[k],m],m)),u=!0):(m._w===k._w?m._p>k._p:(m==null?void 0:m._w)<(k==null?void 0:k._w))&&_.set(v,m);return _},c.tagMap);const a=c.tagMap.get("title"),f=c.tagMap.get("titleTemplate");if(i._title=a==null?void 0:a.textContent,f){const _=f==null?void 0:f.textContent;if(i._titleTemplate=_,_){let m=typeof _=="function"?_(a==null?void 0:a.textContent):_;typeof m=="string"&&!i.plugins.has("template-params")&&(m=m.replace("%s",(a==null?void 0:a.textContent)||"")),a?m===null?c.tagMap.delete("title"):c.tagMap.set("title",{...a,textContent:m}):(f.tag="title",f.textContent=m)}}c.tags=Array.from(c.tagMap.values()),u&&(c.tags=c.tags.flat().sort(ps)),await t.callHook("tags:beforeResolve",c),await t.callHook("tags:resolve",c),await t.callHook("tags:afterResolve",c);const d=[];for(const _ of c.tags){const{innerHTML:m,tag:v,props:k}=_;if(zp.has(v)&&!(Object.keys(k).length===0&&!_.innerHTML&&!_.textContent)&&!(v==="meta"&&!k.content&&!k["http-equiv"]&&!k.charset)){if(v==="script"&&m){if((h=k.type)!=null&&h.endsWith("json")){const w=typeof m=="string"?m:JSON.stringify(m);_.innerHTML=w.replace(/tl(i,c)),i.hooks.callHook("init",i),(l=e.init)==null||l.forEach(c=>c&&i.push(c)),i}const It="%separator",i0=new RegExp(`${It}(?:\\s*${It})*`,"g");function l0(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(l===It||!s.includes(l))return l;const c=l0(t,l.slice(1),r);return c!==void 0?c:l}).trim(),i&&(e.endsWith(It)&&(e=e.slice(0,-It.length)),e.startsWith(It)&&(e=e.slice(It.length)),e=e.replace(i0,n||"").trim()),e}const nl=e=>e.includes(":key")?e:e.split(":").join(":key:"),c0={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=nl(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=nl(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(ps))}}},a0={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 gs(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=>gs(n)));if((e==null?void 0:e.constructor)===Object){const n={};for(const r of Object.keys(e))n[r]=await gs(e[r]);return n}return e}const u0={key:"promises",hooks:{"entries:resolve":async e=>{const t=[];for(const n in e.entries)e.entries[n]._promisesProcessed||t.push(gs(e.entries[n].input).then(r=>{e.entries[n].input=r,e.entries[n]._promisesProcessed=!0}));await Promise.all(t)}}},f0={meta:"content",link:"href",htmlAttrs:"lang"},d0=["innerHTML","textContent"],h0=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=wr(r.pageTitle||e._title||"",r,o);for(const i of n){if(i.processTemplateParams===!1)continue;const l=f0[i.tag];if(l&&typeof i.props[l]=="string")i.props[l]=wr(i.props[l],r,o);else if(i.processTemplateParams||i.tag==="titleTemplate"||i.tag==="title")for(const c of d0)typeof i[c]=="string"&&(i[c]=wr(i[c],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=wr(n.textContent,e._templateParams,e._separator))}}}),p0=(e,t)=>be(t)?pf(t):t,zs="usehead";function g0(e){return{install(n){n.config.globalProperties.$unhead=e,n.config.globalProperties.$head=e,n.provide(zs,e)}}.install}function m0(){if(co()){const e=Te(zs);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 y0(e,t={}){const n=t.head||m0();return n.ssr?n.push(e||{},t):_0(n,e,t)}function _0(e,t,n={}){const r=Ne(!1);let o;return ad(()=>{const i=r.value?{}:Yr(t,p0);o?o.patch(i):o=e.push(i,n)}),tn()&&(lr(()=>{o.dispose()}),Pc(()=>{r.value=!0}),Ac(()=>{r.value=!1})),o}function Va(e){var n;const t=e||Ia();return((n=t==null?void 0:t.ssrContext)==null?void 0:n.head)||(t==null?void 0:t.runWithContext(()=>{if(co())return Te(zs)}))}function b0(e,t={}){const n=Va(t.nuxt);if(n)return y0(e,{head:n,...t})}const v0="modulepreload",w0=function(e,t){return new URL(e,t).href},rl={},Ht=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let i=function(a){return Promise.all(a.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const l=document.getElementsByTagName("link"),c=document.querySelector("meta[property=csp-nonce]"),u=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));o=i(n.map(a=>{if(a=w0(a,r),a in rl)return;rl[a]=!0;const f=a.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(!!r)for(let m=l.length-1;m>=0;m--){const v=l[m];if(v.href===a&&(!f||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${a}"]${d}`))return;const _=document.createElement("link");if(_.rel=f?"stylesheet":v0,f||(_.as="script"),_.crossOrigin="",_.href=a,u&&_.setAttribute("nonce",u),document.head.appendChild(_),f)return new Promise((m,v)=>{_.addEventListener("load",m),_.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${a}`)))})}))}function s(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return o.then(i=>{for(const l of i||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};let xr,Ar;function k0(){return xr=$fetch(qs(`builds/meta/${ar().app.buildId}.json`),{responseType:"json"}),xr.then(e=>{Ar=Cp(e.matcher)}).catch(e=>{console.error("[nuxt] Error fetching app manifest.",e)}),xr}function go(){return xr||k0()}async function Gs(e){const t=typeof e=="string"?e:e.path;if(await go(),!Ar)return console.error("[nuxt] Error creating app manifest matcher.",Ar),{};try{return $a({},...Ar.matchAll(t).reverse())}catch(n){return console.error("[nuxt] Error matching route rules.",n),{}}}async function ol(e,t={}){if(!await Ka(e))return null;const r=await S0(e,t);return await Wa(r)||null}const E0="_payload.json";async function S0(e,t={}){const n=new URL(e,"http://localhost");if(n.host!=="localhost"||nn(n.pathname,{acceptRelative:!0}))throw new Error("Payload URL must not include hostname: "+e);const r=ar(),o=t.hash||(t.fresh?Date.now():r.app.buildId),s=r.app.cdnURL,i=s&&await Ka(e)?s:r.app.baseURL;return Ks(i,n.pathname,E0+(o?`?${o}`:""))}async function Wa(e){const t=fetch(e,{cache:"force-cache"}).then(n=>n.text().then(qa));try{return await t}catch(n){console.warn("[nuxt] Cannot load payload ",e,n)}return null}async function Ka(e=ho().path){const t=me();return e=Xn(e),(await go()).prerendered.includes(e)?!0:t.runWithContext(async()=>{const r=await Gs({path:e});return!!r.prerender&&!r.redirect})}let Wt=null;async function T0(){var r;if(Wt)return Wt;const e=document.getElementById("__NUXT_DATA__");if(!e)return{};const t=await qa(e.textContent||""),n=e.dataset.src?await Wa(e.dataset.src):void 0;return Wt={...t,...n,...window.__NUXT__},(r=Wt.config)!=null&&r.public&&(Wt.config.public=dt(Wt.config.public)),Wt}async function qa(e){return await Vp(e,me()._payloadRevivers)}function C0(e,t){me()._payloadRevivers[e]=t}const R0=[["NuxtError",e=>Yt(e)],["EmptyShallowRef",e=>ft(e==="_"?void 0:e==="0n"?BigInt(0):Yn(e))],["EmptyRef",e=>Ne(e==="_"?void 0:e==="0n"?BigInt(0):Yn(e))],["ShallowRef",e=>ft(e)],["ShallowReactive",e=>at(e)],["Ref",e=>Ne(e)],["Reactive",e=>dt(e)]],x0=Qe({name:"nuxt:revive-payload:client",order:-30,async setup(e){let t,n;for(const[r,o]of R0)C0(r,o);Object.assign(e.payload,([t,n]=mn(()=>e.runWithContext(T0)),t=await t,n(),t)),window.__NUXT__=e.payload}});async function Js(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 h;const s=new Map,i=new Promise(_=>{e.resolveTags().then(m=>{_(m.map(v=>{const k=s.get(v._d)||0,w={tag:v,id:(k?`${v._d}:${k}`:v._d)||Xi(v),shouldRender:!0};return v._d&&Ua(v._d)&&s.set(v._d,k+1),w}))})});let l=e._dom;if(!l){l={title:n.title,elMap:new Map().set("htmlAttrs",n.documentElement).set("bodyAttrs",n.body)};for(const _ of["body","head"]){const m=(h=n[_])==null?void 0:h.children;for(const v of m){const k=v.tagName.toLowerCase();if(!Yi.has(k))continue;const w=Ba({tag:k,props:{}},{innerHTML:v.innerHTML,...v.getAttributeNames().reduce((g,b)=>(g[b]=v.getAttribute(b),g),{})||{}});if(w.key=v.getAttribute("data-hid")||void 0,w._d=hs(w)||Xi(w),l.elMap.has(w._d)){let g=1,b=w._d;for(;l.elMap.has(b);)b=`${w._d}:${g++}`;l.elMap.set(b,v)}else l.elMap.set(w._d,v)}}}l.pendingSideEffects={...l.sideEffects},l.sideEffects={};function c(_,m,v){const k=`${_}:${m}`;l.sideEffects[k]=v,delete l.pendingSideEffects[k]}function u({id:_,$el:m,tag:v}){const k=v.tag.endsWith("Attrs");l.elMap.set(_,m),k||(v.textContent&&v.textContent!==m.textContent&&(m.textContent=v.textContent),v.innerHTML&&v.innerHTML!==m.innerHTML&&(m.innerHTML=v.innerHTML),c(_,"el",()=>{m==null||m.remove(),l.elMap.delete(_)}));for(const w in v.props){if(!Object.prototype.hasOwnProperty.call(v.props,w))continue;const g=v.props[w];if(w.startsWith("on")&&typeof g=="function"){const E=m==null?void 0:m.dataset;if(E&&E[`${w}fired`]){const T=w.slice(0,-5);g.call(m,new Event(T.substring(2)))}m.getAttribute(`data-${w}`)!==""&&((v.tag==="bodyAttrs"?n.defaultView:m).addEventListener(w.substring(2),g.bind(m)),m.setAttribute(`data-${w}`,""));continue}const b=`attr:${w}`;if(w==="class"){if(!g)continue;for(const E of g)k&&c(_,`${b}:${E}`,()=>m.classList.remove(E)),!m.classList.contains(E)&&m.classList.add(E)}else if(w==="style"){if(!g)continue;for(const[E,T]of g)c(_,`${b}:${E}`,()=>{m.style.removeProperty(E)}),m.style.setProperty(E,T)}else g!==!1&&g!==null&&(m.getAttribute(w)!==g&&m.setAttribute(w,g===!0?"":String(g)),k&&c(_,b,()=>m.removeAttribute(w)))}}const a=[],f={bodyClose:void 0,bodyOpen:void 0,head:void 0},d=await i;for(const _ of d){const{tag:m,shouldRender:v,id:k}=_;if(v){if(m.tag==="title"){n.title=m.textContent,c("title","",()=>n.title=l.title);continue}_.$el=_.$el||l.elMap.get(k),_.$el?u(_):Yi.has(m.tag)&&a.push(_)}}for(const _ of a){const m=_.tag.tagPosition||"head";_.$el=n.createElement(_.tag.tag),u(_),f[m]=f[m]||n.createDocumentFragment(),f[m].appendChild(_.$el)}for(const _ of d)await e.hooks.callHook("dom:renderTag",_,n,c);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 _ in l.pendingSideEffects)l.pendingSideEffects[_]();e._dom=l,await e.hooks.callHook("dom:rendered",{renders:d}),o()}).finally(()=>{e._domUpdatePromise=void 0,e.dirty=!1})),e._domUpdatePromise}function A0(e={}){var r,o,s;const t=((r=e.domOptions)==null?void 0:r.render)||Js;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 s0({...e,plugins:[...e.plugins||[],{key:"client",hooks:{"entries:updated":t}}],init:[n?JSON.parse(n):!1,...e.init||[]]})}function P0(e,t){let n=0;return()=>{const r=++n;t(()=>{n===r&&e()})}}function O0(e={}){const t=A0({domOptions:{render:P0(()=>Js(t),n=>setTimeout(n,0))},...e});return t.install=g0(t),t}const I0={disableDefaults:!0,disableCapoSorting:!1,plugins:[a0,u0,h0,c0]},M0=Qe({name:"nuxt:head",enforce:"pre",setup(e){const t=O0(I0);e.vueApp.use(t);{let n=!0;const r=async()=>{n=!1,await Js(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 an=typeof document<"u";function za(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function L0(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&za(e.default)}const oe=Object.assign;function $o(e,t){const n={};for(const r in t){const o=t[r];n[r]=rt(o)?o.map(e):e(o)}return n}const Bn=()=>{},rt=Array.isArray,Ga=/#/g,j0=/&/g,$0=/\//g,N0=/=/g,H0=/\?/g,Ja=/\+/g,F0=/%5B/g,D0=/%5D/g,Qa=/%5E/g,U0=/%60/g,Ya=/%7B/g,B0=/%7C/g,Xa=/%7D/g,V0=/%20/g;function Qs(e){return encodeURI(""+e).replace(B0,"|").replace(F0,"[").replace(D0,"]")}function W0(e){return Qs(e).replace(Ya,"{").replace(Xa,"}").replace(Qa,"^")}function ms(e){return Qs(e).replace(Ja,"%2B").replace(V0,"+").replace(Ga,"%23").replace(j0,"%26").replace(U0,"`").replace(Ya,"{").replace(Xa,"}").replace(Qa,"^")}function K0(e){return ms(e).replace(N0,"%3D")}function q0(e){return Qs(e).replace(Ga,"%23").replace(H0,"%3F")}function z0(e){return e==null?"":q0(e).replace($0,"%2F")}function Zn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const G0=/\/$/,J0=e=>e.replace(G0,"");function No(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(r=t.slice(0,c),s=t.slice(c+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Z0(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:Zn(i)}}function Q0(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function sl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Y0(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&wn(t.matched[r],n.matched[o])&&Za(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function wn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Za(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!X0(e[n],t[n]))return!1;return!0}function X0(e,t){return rt(e)?il(e,t):rt(t)?il(t,e):e===t}function il(e,t){return rt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Z0(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,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}const qe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var er;(function(e){e.pop="pop",e.push="push"})(er||(er={}));var Vn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Vn||(Vn={}));function eg(e){if(!e)if(an){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),J0(e)}const tg=/^[^#]+#/;function ng(e,t){return e.replace(tg,"#")+t}function rg(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 mo=()=>({left:window.scrollX,top:window.scrollY});function og(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=rg(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 ll(e,t){return(history.state?history.state.position-t:-1)+e}const ys=new Map;function sg(e,t){ys.set(e,t)}function ig(e){const t=ys.get(e);return ys.delete(e),t}let lg=()=>location.protocol+"//"+location.host;function eu(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,c=o.slice(l);return c[0]!=="/"&&(c="/"+c),sl(c,"")}return sl(n,e)+r+o}function cg(e,t,n,r){let o=[],s=[],i=null;const l=({state:d})=>{const h=eu(e,location),_=n.value,m=t.value;let v=0;if(d){if(n.value=h,t.value=d,i&&i===_){i=null;return}v=m?d.position-m.position:0}else r(h);o.forEach(k=>{k(n.value,_,{delta:v,type:er.pop,direction:v?v>0?Vn.forward:Vn.back:Vn.unknown})})};function c(){i=n.value}function u(d){o.push(d);const h=()=>{const _=o.indexOf(d);_>-1&&o.splice(_,1)};return s.push(h),h}function a(){const{history:d}=window;d.state&&d.replaceState(oe({},d.state,{scroll:mo()}),"")}function f(){for(const d of s)d();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:c,listen:u,destroy:f}}function cl(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mo():null}}function ag(e){const{history:t,location:n}=window,r={value:eu(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(c,u,a){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:lg()+e+c;try{t[a?"replaceState":"pushState"](u,"",d),o.value=u}catch(h){console.error(h),n[a?"replace":"assign"](d)}}function i(c,u){const a=oe({},t.state,cl(o.value.back,c,o.value.forward,!0),u,{position:o.value.position});s(c,a,!0),r.value=c}function l(c,u){const a=oe({},o.value,t.state,{forward:c,scroll:mo()});s(a.current,a,!0);const f=oe({},cl(r.value,c,null),{position:a.position+1},u);s(c,f,!1),r.value=c}return{location:r,state:o,push:l,replace:i}}function ug(e){e=eg(e);const t=ag(e),n=cg(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=oe({location:"",base:e,go:r,createHref:ng.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 fg(e){return typeof e=="string"||e&&typeof e=="object"}function tu(e){return typeof e=="string"||typeof e=="symbol"}const nu=Symbol("");var al;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(al||(al={}));function kn(e,t){return oe(new Error,{type:e,[nu]:!0},t)}function mt(e,t){return e instanceof Error&&nu in e&&(t==null||!!(e.type&t))}const ul="[^/]+?",dg={sensitive:!1,strict:!1,start:!0,end:!0},hg=/[.+*?^${}()[\]/\\]/g;function pg(e,t){const n=oe({},dg,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const a=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function ru(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const mg={type:0,value:""},yg=/[a-zA-Z0-9_]/;function _g(e){if(!e)return[[]];if(e==="/")return[[mg]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,c,u="",a="";function f(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:a,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),u="")}function d(){u+=c}for(;l{i(g)}:Bn}function i(f){if(tu(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 l(){return n}function c(f){const d=Eg(f,n);n.splice(d,0,f),f.record.name&&!pl(f)&&r.set(f.record.name,f)}function u(f,d){let h,_={},m,v;if("name"in f&&f.name){if(h=r.get(f.name),!h)throw kn(1,{location:f});v=h.record.name,_=oe(dl(d.params,h.keys.filter(g=>!g.optional).concat(h.parent?h.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),f.params&&dl(f.params,h.keys.map(g=>g.name))),m=h.stringify(_)}else if(f.path!=null)m=f.path,h=n.find(g=>g.re.test(m)),h&&(_=h.parse(m),v=h.record.name);else{if(h=d.name?r.get(d.name):n.find(g=>g.re.test(d.path)),!h)throw kn(1,{location:f,currentLocation:d});v=h.record.name,_=oe({},d.params,f.params),m=h.stringify(_)}const k=[];let w=h;for(;w;)k.unshift(w.record),w=w.parent;return{name:v,path:m,params:_,matched:k,meta:kg(k)}}e.forEach(f=>s(f));function a(){n.length=0,r.clear()}return{addRoute:s,resolve:u,removeRoute:i,clearRoutes:a,getRoutes:l,getRecordMatcher:o}}function dl(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function hl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:wg(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 wg(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 pl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function kg(e){return e.reduce((t,n)=>oe(t,n.meta),{})}function gl(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Eg(e,t){let n=0,r=t.length;for(;n!==r;){const s=n+r>>1;ru(e,t[s])<0?r=s:n=s+1}const o=Sg(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function Sg(e){let t=e;for(;t=t.parent;)if(ou(t)&&ru(e,t)===0)return t}function ou({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Tg(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&ms(s)):[r&&ms(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Cg(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=rt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const Rg=Symbol(""),yl=Symbol(""),Ys=Symbol(""),Xs=Symbol(""),_s=Symbol("");function Pn(){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 Mt(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,c)=>{const u=d=>{d===!1?c(kn(4,{from:n,to:t})):d instanceof Error?c(d):fg(d)?c(kn(2,{from:t,to:d})):(i&&r.enterCallbacks[o]===i&&typeof d=="function"&&i.push(d),l())},a=s(()=>e.call(r&&r.instances[o],t,n,u));let f=Promise.resolve(a);e.length<3&&(f=f.then(u)),f.catch(d=>c(d))})}function Ho(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(za(c)){const a=(c.__vccOpts||c)[t];a&&s.push(Mt(a,n,r,i,l,o))}else{let u=c();s.push(()=>u.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=L0(a)?a.default:a;i.mods[l]=a,i.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&Mt(h,n,r,i,l,o)()}))}}return s}function _l(e){const t=Te(Ys),n=Te(Xs),r=je(()=>{const c=fe(e.to);return t.resolve(c)}),o=je(()=>{const{matched:c}=r.value,{length:u}=c,a=c[u-1],f=n.matched;if(!a||!f.length)return-1;const d=f.findIndex(wn.bind(null,a));if(d>-1)return d;const h=bl(c[u-2]);return u>1&&bl(a)===h&&f[f.length-1].path!==h?f.findIndex(wn.bind(null,c[u-2])):d}),s=je(()=>o.value>-1&&Ig(n.params,r.value.params)),i=je(()=>o.value>-1&&o.value===n.matched.length-1&&Za(n.params,r.value.params));function l(c={}){if(Og(c)){const u=t[fe(e.replace)?"replace":"push"](fe(e.to)).catch(Bn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:je(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}function xg(e){return e.length===1?e[0]:e}const Ag=ht({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:_l,setup(e,{slots:t}){const n=dt(_l(e)),{options:r}=Te(Ys),o=je(()=>({[vl(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[vl(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&xg(t.default(n));return e.custom?s:pe("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Pg=Ag;function Og(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 Ig(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(!rt(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function bl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const vl=(e,t,n)=>e??t??n,Mg=ht({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Te(_s),o=je(()=>e.route||r.value),s=Te(yl,0),i=je(()=>{let u=fe(s);const{matched:a}=o.value;let f;for(;(f=a[u])&&!f.components;)u++;return u}),l=je(()=>o.value.matched[i.value]);Nt(yl,je(()=>i.value+1)),Nt(Rg,l),Nt(_s,o);const c=Ne();return tt(()=>[c.value,l.value,e.name],([u,a,f],[d,h,_])=>{a&&(a.instances[f]=u,h&&h!==a&&u&&u===d&&(a.leaveGuards.size||(a.leaveGuards=h.leaveGuards),a.updateGuards.size||(a.updateGuards=h.updateGuards))),u&&a&&(!h||!wn(a,h)||!d)&&(a.enterCallbacks[f]||[]).forEach(m=>m(u))},{flush:"post"}),()=>{const u=o.value,a=e.name,f=l.value,d=f&&f.components[a];if(!d)return wl(n.default,{Component:d,route:u});const h=f.props[a],_=h?h===!0?u.params:typeof h=="function"?h(u):h:null,v=pe(d,oe({},_,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(f.instances[a]=null)},ref:c}));return wl(n.default,{Component:v,route:u})||v}}});function wl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const su=Mg;function Lg(e){const t=vg(e.routes,e),n=e.parseQuery||Tg,r=e.stringifyQuery||ml,o=e.history,s=Pn(),i=Pn(),l=Pn(),c=ft(qe);let u=qe;an&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=$o.bind(null,x=>""+x),f=$o.bind(null,z0),d=$o.bind(null,Zn);function h(x,D){let H,W;return tu(x)?(H=t.getRecordMatcher(x),W=D):W=x,t.addRoute(W,H)}function _(x){const D=t.getRecordMatcher(x);D&&t.removeRoute(D)}function m(){return t.getRoutes().map(x=>x.record)}function v(x){return!!t.getRecordMatcher(x)}function k(x,D){if(D=oe({},D||c.value),typeof x=="string"){const y=No(n,x,D.path),S=t.resolve({path:y.path},D),A=o.createHref(y.fullPath);return oe(y,S,{params:d(S.params),hash:Zn(y.hash),redirectedFrom:void 0,href:A})}let H;if(x.path!=null)H=oe({},x,{path:No(n,x.path,D.path).path});else{const y=oe({},x.params);for(const S in y)y[S]==null&&delete y[S];H=oe({},x,{params:f(y)}),D.params=f(D.params)}const W=t.resolve(H,D),re=x.hash||"";W.params=a(d(W.params));const he=Q0(r,oe({},x,{hash:W0(re),path:W.path})),p=o.createHref(he);return oe({fullPath:he,hash:re,query:r===ml?Cg(x.query):x.query||{}},W,{redirectedFrom:void 0,href:p})}function w(x){return typeof x=="string"?No(n,x,c.value.path):oe({},x)}function g(x,D){if(u!==x)return kn(8,{from:D,to:x})}function b(x){return R(x)}function E(x){return b(oe(w(x),{replace:!0}))}function T(x){const D=x.matched[x.matched.length-1];if(D&&D.redirect){const{redirect:H}=D;let W=typeof H=="function"?H(x):H;return typeof W=="string"&&(W=W.includes("?")||W.includes("#")?W=w(W):{path:W},W.params={}),oe({query:x.query,hash:x.hash,params:W.path!=null?{}:x.params},W)}}function R(x,D){const H=u=k(x),W=c.value,re=x.state,he=x.force,p=x.replace===!0,y=T(H);if(y)return R(oe(w(y),{state:typeof y=="object"?oe({},re,y.state):re,force:he,replace:p}),D||H);const S=H;S.redirectedFrom=D;let A;return!he&&Y0(r,W,H)&&(A=kn(16,{to:S,from:W}),ot(W,W,!0,!1)),(A?Promise.resolve(A):O(S,W)).catch(C=>mt(C)?mt(C,2)?C:Ct(C):V(C,S,W)).then(C=>{if(C){if(mt(C,2))return R(oe({replace:p},w(C.to),{state:typeof C.to=="object"?oe({},re,C.to.state):re,force:he}),D||S)}else C=M(S,W,!0,p,re);return q(S,W,C),C})}function U(x,D){const H=g(x,D);return H?Promise.reject(H):Promise.resolve()}function L(x){const D=on.values().next().value;return D&&typeof D.runWithContext=="function"?D.runWithContext(x):x()}function O(x,D){let H;const[W,re,he]=jg(x,D);H=Ho(W.reverse(),"beforeRouteLeave",x,D);for(const y of W)y.leaveGuards.forEach(S=>{H.push(Mt(S,x,D))});const p=U.bind(null,x,D);return H.push(p),We(H).then(()=>{H=[];for(const y of s.list())H.push(Mt(y,x,D));return H.push(p),We(H)}).then(()=>{H=Ho(re,"beforeRouteUpdate",x,D);for(const y of re)y.updateGuards.forEach(S=>{H.push(Mt(S,x,D))});return H.push(p),We(H)}).then(()=>{H=[];for(const y of he)if(y.beforeEnter)if(rt(y.beforeEnter))for(const S of y.beforeEnter)H.push(Mt(S,x,D));else H.push(Mt(y.beforeEnter,x,D));return H.push(p),We(H)}).then(()=>(x.matched.forEach(y=>y.enterCallbacks={}),H=Ho(he,"beforeRouteEnter",x,D,L),H.push(p),We(H))).then(()=>{H=[];for(const y of i.list())H.push(Mt(y,x,D));return H.push(p),We(H)}).catch(y=>mt(y,8)?y:Promise.reject(y))}function q(x,D,H){l.list().forEach(W=>L(()=>W(x,D,H)))}function M(x,D,H,W,re){const he=g(x,D);if(he)return he;const p=D===qe,y=an?history.state:{};H&&(W||p?o.replace(x.fullPath,oe({scroll:p&&y&&y.scroll},re)):o.push(x.fullPath,re)),c.value=x,ot(x,D,H,p),Ct()}let z;function Z(){z||(z=o.listen((x,D,H)=>{if(!fr.listening)return;const W=k(x),re=T(W);if(re){R(oe(re,{replace:!0,force:!0}),W).catch(Bn);return}u=W;const he=c.value;an&&sg(ll(he.fullPath,H.delta),mo()),O(W,he).catch(p=>mt(p,12)?p:mt(p,2)?(R(oe(w(p.to),{force:!0}),W).then(y=>{mt(y,20)&&!H.delta&&H.type===er.pop&&o.go(-1,!1)}).catch(Bn),Promise.reject()):(H.delta&&o.go(-H.delta,!1),V(p,W,he))).then(p=>{p=p||M(W,he,!1),p&&(H.delta&&!mt(p,8)?o.go(-H.delta,!1):H.type===er.pop&&mt(p,20)&&o.go(-1,!1)),q(W,he,p)}).catch(Bn)}))}let ne=Pn(),B=Pn(),X;function V(x,D,H){Ct(x);const W=B.list();return W.length?W.forEach(re=>re(x,D,H)):console.error(x),Promise.reject(x)}function ye(){return X&&c.value!==qe?Promise.resolve():new Promise((x,D)=>{ne.add([x,D])})}function Ct(x){return X||(X=!x,Z(),ne.list().forEach(([D,H])=>x?H(x):D()),ne.reset()),x}function ot(x,D,H,W){const{scrollBehavior:re}=e;if(!an||!re)return Promise.resolve();const he=!H&&ig(ll(x.fullPath,0))||(W||!H)&&history.state&&history.state.scroll||null;return Ft().then(()=>re(x,D,he)).then(p=>p&&og(p)).catch(p=>V(p,x,D))}const Ie=x=>o.go(x);let rn;const on=new Set,fr={currentRoute:c,listening:!0,addRoute:h,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:v,getRoutes:m,resolve:k,options:e,push:b,replace:E,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:B.add,isReady:ye,install(x){const D=this;x.component("RouterLink",Pg),x.component("RouterView",su),x.config.globalProperties.$router=D,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>fe(c)}),an&&!rn&&c.value===qe&&(rn=!0,b(o.location).catch(re=>{}));const H={};for(const re in qe)Object.defineProperty(H,re,{get:()=>c.value[re],enumerable:!0});x.provide(Ys,D),x.provide(Xs,at(H)),x.provide(_s,c);const W=x.unmount;on.add(x),x.unmount=function(){on.delete(x),on.size<1&&(u=qe,z&&z(),z=null,c.value=qe,rn=!1,X=!1),W()}}};function We(x){return x.reduce((D,H)=>D.then(()=>L(H)),Promise.resolve())}return fr}function jg(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;iwn(u,l))?r.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(u=>wn(u,c))||o.push(c))}return[n,r,o]}function iu(e){return Te(Xs)}const $g=/(:\w+)\([^)]+\)/g,Ng=/(:\w+)[?+*]/g,Hg=/:\w+/g,Fg=(e,t)=>t.path.replace($g,"$1").replace(Ng,"$1").replace(Hg,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""}),bs=(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&&Fg(e.route,n));return typeof r=="function"?r(e.route):r},Dg=(e,t)=>({default:()=>e?pe(jf,e===!0?{}:e,t):t});function Zs(e){return Array.isArray(e)?e:[e]}const Ug={layout:!1},Bg={layout:!1},Fo=[{name:"index",path:"/",meta:Ug||{},component:()=>Ht(()=>import("./BvVBPIAF.js"),__vite__mapDeps([0,1,2,3]),import.meta.url)},{name:"login",path:"/login",meta:Bg||{},component:()=>Ht(()=>import("./CwuZat6W.js"),__vite__mapDeps([4,1,5,2,3]),import.meta.url)},{name:"modules",path:"/modules",meta:{middleware:"auth"},component:()=>Ht(()=>import("./B9sIrZpC.js"),__vite__mapDeps([6,1,2,3,5]),import.meta.url)}],lu=(e,t)=>({default:()=>{var n;return e?pe(Hd,e===!0?{}:e,t):(n=t.default)==null?void 0:n.call(t)}}),Vg=/(:\w+)\([^)]+\)/g,Wg=/(:\w+)[?+*]/g,Kg=/:\w+/g;function kl(e){const t=(e==null?void 0:e.meta.key)??e.path.replace(Vg,"$1").replace(Wg,"$1").replace(Kg,n=>{var r;return((r=e.params[n.slice(1)])==null?void 0:r.toString())||""});return typeof t=="function"?t(e):t}function qg(e,t){return e===t||t===qe?!1:kl(e)!==kl(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)})}function zg(e,t=!1){if(e){if(e.nodeName==="#comment"&&e.nodeValue==="[")return cu(e,[],t);if(t){const n=e.cloneNode(!0);return n.querySelectorAll("[data-island-slot]").forEach(r=>{r.innerHTML=""}),[n.outerHTML]}return[e.outerHTML]}}function cu(e,t=[],n=!1){var r;if(e&&e.nodeName){if(Jg(e))return t;if(!Gg(e)){const o=e.cloneNode(!0);n&&((r=o.querySelectorAll)==null||r.call(o,"[data-island-slot]").forEach(s=>{s.innerHTML=""})),t.push(o.outerHTML)}cu(e.nextSibling,t,n)}return t}function Do(e,t){const n=e?zg(e):[t];return n?Sd(n.join(""),n.length):pe("div")}function Gg(e){return e.nodeName==="#comment"&&e.nodeValue==="["}function Jg(e){return e.nodeName==="#comment"&&e.nodeValue==="]"}const Qg={scrollBehavior(e,t,n){var c;const r=me(),o=((c=He().options)==null?void 0:c.scrollBehaviorType)??"auto";if(e.path===t.path)return t.hash&&!e.hash?{left:0,top:0}:e.hash?{el:e.hash,top:au(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&&qg(e,t)&&(i={left:0,top:0});const l=r._runningTransition?"page:transition:finish":"page:loading:end";return new Promise(u=>{if(t===qe){u(El(e,"instant",i));return}r.hooks.hookOnce(l,()=>{requestAnimationFrame(()=>u(El(e,"instant",i)))})})}};function au(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 El(e,t,n){return n||(e.hash?{el:e.hash,top:au(e.hash),behavior:t}:{left:0,top:0,behavior:t})}const Yg={hashMode:!1,scrollBehaviorType:"auto"},it={...Yg,...Qg},Xg=async(e,t)=>{var i;let n,r;if(!((i=e.meta)!=null&&i.validate))return;const o=([n,r]=mn(()=>Promise.resolve(e.meta.validate(e))),n=await n,r(),n);if(o===!0)return;const s=Yt({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};function Zg(e,t){if(typeof e!="string")throw new TypeError("argument str must be a string");const n={},r=t||{},o=r.decode||em;let s=0;for(;sthis.compare(l[0],c[0]));let i=`${r}{`;for(let l=0;lthis.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 om(e,t){return e===t||Tl(e)===Tl(t)}function Xe(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]=Xe(e[t]))}else{n={};for(t in e)t==="__proto__"?Object.defineProperty(n,t,{value:Xe(e[t]),configurable:!0,enumerable:!0,writable:!0}):n[t]=Xe(e[t])}return n}if(r==="[object Array]"){for(t=e.length,n=Array(t);t--;)n[t]=Xe(e[t]);return n}return r==="[object Set]"?(n=new Set,e.forEach(function(o){n.add(Xe(o))}),n):r==="[object Map]"?(n=new Map,e.forEach(function(o,s){n.set(Xe(s),Xe(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(Xe(e.buffer)):r==="[object ArrayBuffer]"?e.slice(0):r.slice(-6)==="Array]"?new e.constructor(e):e}const sm={path:"/",watch:!0,decode:e=>Yn(decodeURIComponent(e)),encode:e=>encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))},Er=window.cookieStore;function im(e,t){var u;const n={...sm,...t};n.filter??(n.filter=a=>a===e);const r=Cl(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,l=Xe(s?void 0:r[e]??((u=n.default)==null?void 0:u.call(n))),c=o&&!s?am(l,o,n.watch&&n.watch!=="shallow"):Ne(l);{let a=null;try{!Er&&typeof BroadcastChannel<"u"&&(a=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(m=!1)=>{!m&&(n.readonly||om(c.value,r[e]))||(cm(e,c.value,n),r[e]=Xe(c.value),a==null||a.postMessage({value:n.encode(c.value)}))},d=m=>{var k;const v=m.refresh?(k=Cl(n))==null?void 0:k[e]:n.decode(m.value);h=!0,c.value=v,r[e]=Xe(v),Ft(()=>{h=!1})};let h=!1;const _=!!or();if(_&&Mr(()=>{h=!0,f(),a==null||a.close()}),Er){const m=v=>{const k=v.changed.find(g=>g.name===e),w=v.deleted.find(g=>g.name===e);k&&d({value:k.value}),w&&d({value:null})};Er.addEventListener("change",m),_&&Mr(()=>Er.removeEventListener("change",m))}else a&&(a.onmessage=({data:m})=>d(m));n.watch&&tt(c,()=>{h||f()},{deep:n.watch!=="shallow"}),i&&f(i)}return c}function Cl(e={}){return Zg(document.cookie,e)}function lm(e,t,n={}){return t==null?Sl(e,t,{...n,maxAge:-1}):Sl(e,t,n)}function cm(e,t,n={}){document.cookie=lm(e,t,n)}const Rl=2147483647;function am(e,t,n){let r,o,s=0;const i=n?Ne(e):{value:e};return or()&&Mr(()=>{o==null||o(),clearTimeout(r)}),mc((l,c)=>{n&&(o=tt(i,c));function u(){s=0,clearTimeout(r);const a=t-s,f=a{if(s+=f,s{const e=im("auth-token",{default:()=>null,secure:!0,sameSite:"strict"}),t=je(()=>!!e.value),n=s=>{e.value=s},r=()=>{e.value=null,ds("/login")},o=()=>({Authorization:`Bearer ${e.value}`});return{token:jr(e),isAuthenticated:jr(t),login:n,logout:r,getAuthHeaders:o}},fm=e=>{if(e.path==="/login")return;const{isAuthenticated:t}=um();if(!t.value&&e.path!=="/")return ds("/login");if(t.value&&e.path==="/")return ds("/modules")},dm=async e=>{let t,n;const r=([t,n]=mn(()=>Gs({path:e.path})),t=await t,n(),t);if(r.redirect)return nn(r.redirect,{acceptRelative:!0})?(window.location.href=r.redirect,!1):r.redirect},hm=[Xg,fm,dm],Wn={auth:()=>Ht(()=>import("./4J-u_g9l.js"),[],import.meta.url)};function pm(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 a=s.slice(u);return a[0]!=="/"&&(a="/"+a),Ui(a,"")}const l=Ui(r,e),c=!n||Fh(l,n)?l:n;return c+(c.includes("?")?"":o)+s}const gm=Qe({name:"nuxt:router",enforce:"pre",async setup(e){var v;let t,n,r=ar().app.baseURL;const o=((v=it.history)==null?void 0:v.call(it,r))??ug(r),s=it.routes?([t,n]=mn(()=>it.routes(Fo)),t=await t,n(),t??Fo):Fo;let i;const l=Lg({...it,scrollBehavior:(k,w,g)=>{if(w===qe){i=g;return}if(it.scrollBehavior){if(l.options.scrollBehavior=it.scrollBehavior,"scrollRestoration"in window.history){const b=l.beforeEach(()=>{b(),window.history.scrollRestoration="manual"})}return it.scrollBehavior(k,qe,i||g)}},history:o,routes:s});"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto"),e.vueApp.use(l);const c=ft(l.currentRoute.value);l.afterEach((k,w)=>{c.value=w}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>c.value});const u=pm(r,window.location,e.payload.path),a=ft(l.currentRoute.value),f=()=>{a.value=l.currentRoute.value};e.hook("page:finish",f),l.afterEach((k,w)=>{var g,b,E,T;((b=(g=k.matched[0])==null?void 0:g.components)==null?void 0:b.default)===((T=(E=w.matched[0])==null?void 0:E.components)==null?void 0:T.default)&&f()});const d={};for(const k in a.value)Object.defineProperty(d,k,{get:()=>a.value[k],enumerable:!0});e._route=at(d),e._middleware||(e._middleware={global:[],named:{}});const h=po();l.afterEach(async(k,w,g)=>{delete e._processingMiddleware,!e.isHydrating&&h.value&&await e.runWithContext(Lp),g&&await e.callHook("page:loading:end")});try{[t,n]=mn(()=>l.isReady()),await t,n()}catch(k){[t,n]=mn(()=>e.runWithContext(()=>qt(k))),await t,n()}const _=u!==l.currentRoute.value.fullPath?l.resolve(u):l.currentRoute.value;f();const m=e.payload.state._layout;return l.beforeEach(async(k,w)=>{var g;await e.callHook("page:loading:start"),k.meta=dt(k.meta),e.isHydrating&&m&&!Et(k.meta.layout)&&(k.meta.layout=m),e._processingMiddleware=!0;{const b=new Set([...hm,...e._middleware.global]);for(const E of k.matched){const T=E.meta.middleware;if(T)for(const R of Zs(T))b.add(R)}{const E=await e.runWithContext(()=>Gs({path:k.path}));if(E.appMiddleware)for(const T in E.appMiddleware)E.appMiddleware[T]?b.add(T):b.delete(T)}for(const E of b){const T=typeof E=="string"?e._middleware.named[E]||await((g=Wn[E])==null?void 0:g.call(Wn).then(R=>R.default||R)):E;if(!T)throw new Error(`Unknown route middleware: '${E}'.`);try{const R=await e.runWithContext(()=>T(k,w));if(!e.payload.serverRendered&&e.isHydrating&&(R===!1||R instanceof Error)){const U=R||Yt({statusCode:404,statusMessage:`Page Not Found: ${u}`});return await e.runWithContext(()=>qt(U)),!1}if(R===!0)continue;if(R===!1)return R;if(R)return Da(R)&&R.fatal&&await e.runWithContext(()=>qt(R)),R}catch(R){const U=Yt(R);return U.fatal&&await e.runWithContext(()=>qt(U)),U}}}}),l.onError(async()=>{delete e._processingMiddleware,await e.callHook("page:loading:end")}),l.afterEach(async(k,w)=>{k.matched.length===0&&await e.runWithContext(()=>qt(Yt({statusCode:404,fatal:!1,statusMessage:`Page not found: ${k.fullPath}`,data:{path:k.fullPath}})))}),e.hooks.hookOnce("app:created",async()=>{try{"name"in _&&(_.name=void 0),await l.replace({..._,force:!0}),l.options.scrollBehavior=it.scrollBehavior}catch(k){await e.runWithContext(()=>qt(k))}}),{provide:{router:l}}}}),xl=globalThis.requestIdleCallback||(e=>{const t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),b_=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),ei=e=>{const t=me();t.isHydrating?t.hooks.hookOnce("app:suspense:resolve",()=>{xl(()=>e())}):xl(()=>e())},mm=Qe({name:"nuxt:payload",setup(e){const t=new Set;He().beforeResolve(async(n,r)=>{if(n.path===r.path)return;const o=await ol(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]}}),ei(()=>{var n;e.hooks.hook("link:prefetch",async r=>{const{hostname:o}=new URL(r,window.location.href);o===window.location.hostname&&await ol(r).catch(()=>{console.warn("[nuxt] Error preloading payload for",r)})}),((n=navigator.connection)==null?void 0:n.effectiveType)!=="slow-2g"&&setTimeout(go,1e3)})}}),ym=Qe(()=>{const e=He();ei(()=>{e.beforeResolve(async()=>{await new Promise(t=>{setTimeout(t,100),requestAnimationFrame(()=>{setTimeout(t,0)})})})})}),_m=Qe(e=>{let t;async function n(){const r=await go();t&&clearTimeout(t),t=setTimeout(n,zi);try{const o=await $fetch(qs("builds/latest.json")+`?${Date.now()}`);o.id!==r.id&&e.hooks.callHook("app:manifest:update",o)}catch{}}ei(()=>{t=setTimeout(n,zi)})});function bm(e={}){const t=e.path||window.location.pathname;let n={};try{n=Yn(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 l="href"in s&&s.href[0]==="#"?n.app.baseURL+s.href:Ks(n.app.baseURL,s.fullPath);bm({path:l,persistState:!0})}e.hook("app:manifest:update",()=>{t.beforeResolve(o)}),t.onError((s,i)=>{r.has(s)&&o(i)})}}),wm=Ur(()=>Ht(()=>import("./DZhRnb1V.js"),[],import.meta.url).then(e=>e.default||e.default||e)),km=[["Icon",wm]],Em=Qe({name:"nuxt:global-components",setup(e){for(const[t,n]of km)e.vueApp.component(t,n),e.vueApp.component("Lazy"+t,n)}}),jt={default:Ur(()=>Ht(()=>import("./CjNMrKxF.js"),[],import.meta.url).then(e=>e.default||e))};function Sm(e){if(e!=null&&e.__asyncLoader&&!e.__asyncResolved)return e.__asyncLoader()}async function Tm(e,t=He()){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(()=>Tm(e,t));t._routePreloaded.add(n);const s=r.map(i=>{var l;return(l=i.components)==null?void 0:l.default}).filter(i=>typeof i=="function");for(const i of s){const l=Promise.resolve(i()).catch(()=>{}).finally(()=>o.splice(o.indexOf(l)));o.push(l)}await Promise.all(o)}const Cm=Qe({name:"nuxt:prefetch",setup(e){const t=He();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 jt[r]=="function"&&await jt[r]()})}),e.hooks.hook("link:prefetch",n=>{if(nn(n))return;const r=t.resolve(n);if(!r)return;const o=r.meta.layout;let s=Zs(r.meta.middleware);s=s.filter(i=>typeof i=="string");for(const i of s)typeof Wn[i]=="function"&&Wn[i]();typeof o=="string"&&o in jt&&Sm(jt[o])})}});var Sr={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 Rm={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"}}},xm=Rp(Rm);function uu(){const e=me();return e._appConfig||(e._appConfig=dt(xm)),e._appConfig}const Am=[50,100,200,300,400,500,600,700,800,900,950];function Pm(e,t){return e in Sr&&typeof Sr[e]=="object"&&t in Sr[e]?Sr[e][t]:""}function Om(e,t){return`${Am.map(n=>`--ui-color-${e}-${n}: var(--color-${t==="neutral"?"old-neutral":t}-${n}, ${Pm(t,n)});`).join(` - `)}`}function Al(e,t){return`--ui-${e}: var(--ui-color-${e}-${t});`}const Im=Qe(()=>{const e=uu(),t=me(),n=je(()=>{const{neutral:o,...s}=e.ui.colors;return`@layer base { - :root { - ${Object.entries(e.ui.colors).map(([i,l])=>Om(i,l)).join(` - `)} - } - :root, .light { - ${Object.keys(s).map(i=>Al(i,500)).join(` - `)} - } - .dark { - ${Object.keys(s).map(i=>Al(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]'))"}]}b0(r)}),Mm="__NUXT_COLOR_MODE__",Uo="nuxt-color-mode",Lm="localStorage",jm="$s";function $m(...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=jm+n,s=me(),i=yc(s.payload.state,o);if(i.value===void 0&&r){const l=r();if(be(l))return s.payload.state[o]=l,l;i.value=l}return i}const yt=window[Mm]||{},Nm=Qe(e=>{const t=$m("color-mode",()=>dt({preference:yt.preference,value:yt.value,unknown:!1,forced:!1})).value;He().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 l,c;switch(s){case"cookie":window.document.cookie=Uo+"="+i;break;case"sessionStorage":(l=window.sessionStorage)==null||l.setItem(Uo,i);break;case"localStorage":default:(c=window.localStorage)==null||c.setItem(Uo,i)}}tt(()=>t.preference,s=>{t.forced||(s==="system"?(t.value=yt.getColorScheme(),r()):t.value=s,o(Lm,s))},{immediate:!0}),tt(()=>t.value,(s,i)=>{let l;l=window.document.createElement("style"),l.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(l),yt.removeColorScheme(i),yt.addColorScheme(s),window.getComputedStyle(l).opacity,document.head.removeChild(l)}),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)}),fu=/^[a-z0-9]+(-[a-z0-9]+)*$/,ur=(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 l=o.pop(),c=o.pop(),u={provider:o.length>0?o[0]:r,prefix:c,name:l};return t&&!Pr(u)?null:u}const s=o[0],i=s.split("-");if(i.length>1){const l={provider:r,prefix:i.shift(),name:i.join("-")};return t&&!Pr(l)?null:l}if(n&&r===""){const l={provider:r,prefix:"",name:s};return t&&!Pr(l,n)?null:l}return null},Pr=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,du=Object.freeze({left:0,top:0,width:16,height:16}),Xr=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Sn=Object.freeze({...du,...Xr}),vs=Object.freeze({...Sn,body:"",hidden:!1});function Hm(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 Pl(e,t){const n=Hm(e,t);for(const r in vs)r in Xr?r in e&&!(r in n)&&(n[r]=Xr[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function Fm(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 l=r[i]&&r[i].parent,c=l&&s(l);c&&(o[i]=[l].concat(c))}return o[i]}return Object.keys(n).concat(Object.keys(r)).forEach(s),o}function Dm(e,t,n){const r=e.icons,o=e.aliases||Object.create(null);let s={};function i(l){s=Pl(r[l]||o[l],s)}return i(t),n.forEach(i),Pl(e,s)}function hu(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=Fm(e);for(const o in r){const s=r[o];s&&(t(o,Dm(e,o,s)),n.push(o))}return n}const Um={provider:"",aliases:{},not_found:{},...du};function Bo(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function pu(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!Bo(e,Um))return null;const n=t.icons;for(const o in n){const s=n[o];if(!o||typeof s.body!="string"||!Bo(s,vs))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]||!Bo(s,vs))return null}return t}const Ol=Object.create(null);function Bm(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function en(e,t){const n=Ol[e]||(Ol[e]=Object.create(null));return n[t]||(n[t]=Bm(e,t))}function gu(e,t){return pu(t)?hu(t,(n,r)=>{r?e.icons[n]=r:e.missing.add(n)}):[]}function Vm(e,t,n){try{if(typeof n.body=="string")return e.icons[t]={...n},!0}catch{}return!1}let tr=!1;function mu(e){return typeof e=="boolean"&&(tr=e),tr}function ti(e){const t=typeof e=="string"?ur(e,!0,tr):e;if(t){const n=en(t.provider,t.prefix),r=t.name;return n.icons[r]||(n.missing.has(r)?null:void 0)}}function Wm(e,t){const n=ur(e,!0,tr);if(!n)return!1;const r=en(n.provider,n.prefix);return t?Vm(r,n.name,t):(r.missing.add(n.name),!0)}function Km(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),tr&&!t&&!e.prefix){let o=!1;return pu(e)&&(e.prefix="",hu(e,(s,i)=>{Wm(s,i)&&(o=!0)})),o}const n=e.prefix;if(!Pr({prefix:n,name:"a"}))return!1;const r=en(t,n);return!!gu(r,e)}function v_(e){const t=ti(e);return t&&{...Sn,...t}}const yu=Object.freeze({width:null,height:null}),_u=Object.freeze({...yu,...Xr}),qm=/(-?[0-9.]*[0-9]+[0-9.]*)/g,zm=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function Il(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(qm);if(r===null||!r.length)return e;const o=[];let s=r.shift(),i=zm.test(s);for(;;){if(i){const l=parseFloat(s);isNaN(l)?o.push(s):o.push(Math.ceil(l*t*n)/n)}else o.push(s);if(s=r.shift(),s===void 0)return o.join("");i=!i}}function Gm(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 Jm(e,t){return e?""+e+""+t:t}function Qm(e,t,n){const r=Gm(e);return Jm(r.defs,t+r.content+n)}const Ym=e=>e==="unset"||e==="undefined"||e==="none";function Xm(e,t){const n={...Sn,...e},r={..._u,...t},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,r].forEach(m=>{const v=[],k=m.hFlip,w=m.vFlip;let g=m.rotate;k?w?g+=2:(v.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),v.push("scale(-1 1)"),o.top=o.left=0):w&&(v.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),v.push("scale(1 -1)"),o.top=o.left=0);let b;switch(g<0&&(g-=Math.floor(g/4)*4),g=g%4,g){case 1:b=o.height/2+o.top,v.unshift("rotate(90 "+b.toString()+" "+b.toString()+")");break;case 2:v.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:b=o.width/2+o.left,v.unshift("rotate(-90 "+b.toString()+" "+b.toString()+")");break}g%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)),v.length&&(s=Qm(s,'',""))});const i=r.width,l=r.height,c=o.width,u=o.height;let a,f;i===null?(f=l===null?"1em":l==="auto"?u:l,a=Il(f,c/u)):(a=i==="auto"?c:i,f=l===null?Il(a,u/c):l==="auto"?u:l);const d={},h=(m,v)=>{Ym(v)||(d[m]=v.toString())};h("width",a),h("height",f);const _=[o.left,o.top,c,u];return d.viewBox=_.join(" "),{attributes:d,viewBox:_,body:s}}const Zm=/\sid="(\S+)"/g,ey="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let ty=0;function ny(e,t=ey){const n=[];let r;for(;r=Zm.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+(ty++).toString(),l=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+i+o+"$3")}),e=e.replace(new RegExp(o,"g"),""),e}const ws=Object.create(null);function bu(e,t){ws[e]=t}function ks(e){return ws[e]||ws[""]}function ni(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 yo=Object.create(null),On=["https://api.simplesvg.com","https://api.unisvg.com"],Or=[];for(;On.length>0;)On.length===1||Math.random()>.5?Or.push(On.shift()):Or.push(On.pop());yo[""]=ni({resources:["https://api.iconify.design"].concat(Or)});function vu(e,t){const n=ni(t);return n===null?!1:(yo[e]=n,!0)}function _o(e){return yo[e]}function ry(){return Object.keys(yo)}const oy=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let Zr=oy();function sy(e){Zr=e}function iy(){return Zr}function ly(e,t){const n=_o(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 cy(e){return e===404}const ay=(e,t,n)=>{const r=[],o=ly(e,t),s="icons";let i={type:s,provider:e,prefix:t,icons:[]},l=0;return n.forEach((c,u)=>{l+=c.length+1,l>=o&&u>0&&(r.push(i),i={type:s,provider:e,prefix:t,icons:[]},l=c.length),i.icons.push(c)}),r.push(i),r};function uy(e){if(typeof e=="string"){const t=_o(e);if(t)return t.path}return"/"}const fy=(e,t,n)=>{if(!Zr){n("abort",424);return}let r=uy(t.provider);switch(t.type){case"icons":{const s=t.prefix,l=t.icons.join(","),c=new URLSearchParams({icons:l});r+=s+".json?"+c.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;Zr(e+r).then(s=>{const i=s.status;if(i!==200){setTimeout(()=>{n(cy(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)})},dy={prepare:ay,send:fy};function hy(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,l=o.name,c=n[s]||(n[s]=Object.create(null)),u=c[i]||(c[i]=en(s,i));let a;l in u.icons?a=t.loaded:i===""||u.missing.has(l)?a=t.missing:a=t.pending;const f={provider:s,prefix:i,name:l};a.push(f)}),t}function wu(e,t){e.forEach(n=>{const r=n.loaderCallbacks;r&&(n.loaderCallbacks=r.filter(o=>o.id!==t))})}function py(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,l=i.pending.length;i.pending=i.pending.filter(c=>{if(c.prefix!==o)return!0;const u=c.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!==l&&(n||wu([e],s.id),s.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),s.abort))})}))}let gy=0;function my(e,t,n){const r=gy++,o=wu.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 yy(e,t=!0,n=!1){const r=[];return e.forEach(o=>{const s=typeof o=="string"?ur(o,t,n):o;s&&r.push(s)}),r}var _y={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function by(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 T=e.resources.slice(0);for(i=[];T.length>1;){const R=Math.floor(Math.random()*T.length);i.push(T[R]),T=T.slice(0,R).concat(T.slice(R+1))}i=i.concat(T)}else i=e.resources.slice(s).concat(e.resources.slice(0,s));const l=Date.now();let c="pending",u=0,a,f=null,d=[],h=[];typeof r=="function"&&h.push(r);function _(){f&&(clearTimeout(f),f=null)}function m(){c==="pending"&&(c="aborted"),_(),d.forEach(T=>{T.status==="pending"&&(T.status="aborted")}),d=[]}function v(T,R){R&&(h=[]),typeof T=="function"&&h.push(T)}function k(){return{startTime:l,payload:t,status:c,queriesSent:u,queriesPending:d.length,subscribe:v,abort:m}}function w(){c="failed",h.forEach(T=>{T(void 0,a)})}function g(){d.forEach(T=>{T.status==="pending"&&(T.status="aborted")}),d=[]}function b(T,R,U){const L=R!=="success";switch(d=d.filter(O=>O!==T),c){case"pending":break;case"failed":if(L||!e.dataAfterTimeout)return;break;default:return}if(R==="abort"){a=U,w();return}if(L){a=U,d.length||(i.length?E():w());return}if(_(),g(),!e.random){const O=e.resources.indexOf(T.resource);O!==-1&&O!==e.index&&(e.index=O)}c="completed",h.forEach(O=>{O(U)})}function E(){if(c!=="pending")return;_();const T=i.shift();if(T===void 0){if(d.length){f=setTimeout(()=>{_(),c==="pending"&&(g(),w())},e.timeout);return}w();return}const R={status:"pending",resource:T,callback:(U,L)=>{b(R,U,L)}};d.push(R),u++,f=setTimeout(E,e.rotate),n(T,t,R.callback)}return setTimeout(E),k}function ku(e){const t={..._y,...e};let n=[];function r(){n=n.filter(l=>l().status==="pending")}function o(l,c,u){const a=by(t,l,c,(f,d)=>{r(),u&&u(f,d)});return n.push(a),a}function s(l){return n.find(c=>l(c))||null}return{query:o,find:s,setIndex:l=>{t.index=l},getIndex:()=>t.index,cleanup:r}}function Ml(){}const Vo=Object.create(null);function vy(e){if(!Vo[e]){const t=_o(e);if(!t)return;const n=ku(t),r={config:t,redundancy:n};Vo[e]=r}return Vo[e]}function Eu(e,t,n){let r,o;if(typeof e=="string"){const s=ks(e);if(!s)return n(void 0,424),Ml;o=s.send;const i=vy(e);i&&(r=i.redundancy)}else{const s=ni(e);if(s){r=ku(s);const i=e.resources?e.resources[0]:"",l=ks(i);l&&(o=l.send)}}return!r||!o?(n(void 0,424),Ml):r.query(t,o,n)().abort}function Ll(){}function wy(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,py(e)}))}function ky(e){const t=[],n=[];return e.forEach(r=>{(r.match(fu)?t:n).push(r)}),{valid:t,invalid:n}}function In(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(!gu(e,n).length){r();return}}catch(o){console.error(o)}r(),wy(e)}function jl(e,t){e instanceof Promise?e.then(n=>{t(n)}).catch(()=>{t(null)}):t(e)}function Ey(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)){jl(e.loadIcons(o,r,n),a=>{In(e,o,a)});return}if(s){o.forEach(a=>{const f=s(a,r,n);jl(f,d=>{const h=d?{prefix:r,icons:{[a]:d}}:null;In(e,[a],h)})});return}const{valid:i,invalid:l}=ky(o);if(l.length&&In(e,l,null),!i.length)return;const c=r.match(fu)?ks(n):null;if(!c){In(e,i,null);return}c.prepare(n,r,i).forEach(a=>{Eu(n,a,f=>{In(e,a.icons,f)})})}))}const Su=(e,t)=>{const n=yy(e,!0,mu()),r=hy(n);if(!r.pending.length){let c=!0;return t&&setTimeout(()=>{c&&t(r.loaded,r.missing,r.pending,Ll)}),()=>{c=!1}}const o=Object.create(null),s=[];let i,l;return r.pending.forEach(c=>{const{provider:u,prefix:a}=c;if(a===l&&u===i)return;i=u,l=a,s.push(en(u,a));const f=o[u]||(o[u]=Object.create(null));f[a]||(f[a]=[])}),r.pending.forEach(c=>{const{provider:u,prefix:a,name:f}=c,d=en(u,a),h=d.pendingIcons||(d.pendingIcons=new Set);h.has(f)||(h.add(f),o[u][a].push(f))}),s.forEach(c=>{const u=o[c.provider][c.prefix];u.length&&Ey(c,u)}),t?my(t,r,s):Ll},w_=e=>new Promise((t,n)=>{const r=typeof e=="string"?ur(e,!0):e;if(!r){n(e);return}Su([r||e],o=>{if(o.length&&r){const s=ti(r);if(s){t({...Sn,...s});return}}n(e)})});function Sy(e,t,n){en("",t).loadIcons=e}function Ty(e,t){const n={...e};for(const r in t){const o=t[r],s=typeof o;r in yu?(o===null||o&&(s==="string"||s==="number"))&&(n[r]=o):s===typeof n[r]&&(n[r]=r==="rotate"?o%4:o)}return n}const Cy=/[\s,]+/;function Ry(e,t){t.split(Cy).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function xy(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 Ay(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 Py(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function Oy(e){return"data:image/svg+xml,"+Py(e)}function Iy(e){return'url("'+Oy(e)+'")'}const $l={..._u,inline:!1},My={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ly={display:"inline-block"},Es={backgroundColor:"currentColor"},Tu={backgroundColor:"transparent"},Nl={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},Hl={webkitMask:Es,mask:Es,background:Tu};for(const e in Hl){const t=Hl[e];for(const n in Nl)t[e+n]=Nl[n]}const Ir={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ir[e+"-flip"]=t,Ir[e.slice(0,1)+"-flip"]=t,Ir[e+"Flip"]=t});function Fl(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const Dl=(e,t)=>{const n=Ty($l,t),r={...My},o=t.mode||"svg",s={},i=t.style,l=typeof i=="object"&&!(i instanceof Array)?i:{};for(let m in t){const v=t[m];if(v!==void 0)switch(m){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":n[m]=v===!0||v==="true"||v===1;break;case"flip":typeof v=="string"&&Ry(n,v);break;case"color":s.color=v;break;case"rotate":typeof v=="string"?n[m]=xy(v):typeof v=="number"&&(n[m]=v);break;case"ariaHidden":case"aria-hidden":v!==!0&&v!=="true"&&delete r["aria-hidden"];break;default:{const k=Ir[m];k?(v===!0||v==="true"||v===1)&&(n[k]=!0):$l[m]===void 0&&(r[m]=v)}}}const c=Xm(e,n),u=c.attributes;if(n.inline&&(s.verticalAlign="-0.125em"),o==="svg"){r.style={...s,...l},Object.assign(r,u);let m=0,v=t.id;return typeof v=="string"&&(v=v.replace(/-/g,"_")),r.innerHTML=ny(c.body,v?()=>v+"ID"+m++:"iconifyVue"),pe("svg",r)}const{body:a,width:f,height:d}=e,h=o==="mask"||(o==="bg"?!1:a.indexOf("currentColor")!==-1),_=Ay(a,{...u,width:f+"",height:d+""});return r.style={...s,"--svg":Iy(_),width:Fl(u.width),height:Fl(u.height),...Ly,...h?Es:Tu,...l},pe("span",r)};mu(!0);bu("",dy);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"||!Km(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;vu(n,o)||console.error(r)}catch{console.error(r)}}}}const jy={...Sn,body:""},k_=ht((e,{emit:t})=>{const n=Ne(null);function r(){var u,a;n.value&&((a=(u=n.value).abort)==null||a.call(u),n.value=null)}const o=Ne(!!e.ssr),s=Ne(""),i=ft(null);function l(){const u=e.icon;if(typeof u=="object"&&u!==null&&typeof u.body=="string")return s.value="",{data:u};let a;if(typeof u!="string"||(a=ur(u,!1,!0))===null)return null;let f=ti(a);if(!f){const _=n.value;return(!_||_.name!==u)&&(f===null?n.value={name:u}:n.value={name:u,abort:Su([a],c)}),null}r(),s.value!==u&&(s.value=u,Ft(()=>{t("load",u)}));const d=e.customise;if(d){f=Object.assign({},f);const _=d(f.body,a.name,a.prefix,a.provider);typeof _=="string"&&(f.body=_)}const h=["iconify"];return a.prefix!==""&&h.push("iconify--"+a.prefix),a.provider!==""&&h.push("iconify--"+a.provider),{data:f,classes:h}}function c(){var a;const u=l();u?u.data!==((a=i.value)==null?void 0:a.data)&&(i.value=u):i.value=null}return o.value?c():_n(()=>{o.value=!0,c()}),tt(()=>e.icon,c),Hs(r),()=>{const u=i.value;if(!u)return Dl(jy,e);let a=e;return u.classes&&(a={...e,class:u.classes.join(" ")}),Dl({...Sn,...u.data},a)}},{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]}),Ul={getAPIConfig:_o,setAPIModule:bu,sendAPIQuery:Eu,setFetch:sy,getFetch:iy,listAPIProviders:ry},$y=Qe({name:"@nuxt/icon",setup(){var o,s;const e=ar(),t=uu().icon;Ul.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"?Ul.setFetch(()=>Promise.resolve(new Response)):n.push(t.iconifyApiEndpoint);async function r(i,l){try{const c=await $fetch(n[0]+"/"+l+".json",{query:{icons:i.join(",")}});if(!c||c.prefix!==l||!c.icons)throw new Error("Invalid data"+JSON.stringify(c));return c}catch(c){return console.error("Failed to load custom icons",c),null}}vu("",{resources:n});for(const i of t.customCollections||[])i&&Sy(r,i)}}),Ny=[x0,M0,gm,mm,ym,_m,vm,Em,Cm,Im,Nm,$y],Tr="