From 654da1cecbea881b7d1ca81e8cce3323c77be53b Mon Sep 17 00:00:00 2001 From: ANUGRAH NP Date: Sat, 30 May 2026 14:36:37 +0530 Subject: [PATCH 01/41] Initial backend monolith setup with SpringBoot and PostgreSQL --- backend/.gitattributes | 2 + backend/.gitignore | 34 ++ backend/.mvn/wrapper/maven-wrapper.properties | 3 + backend/mvnw | 295 ++++++++++++++++++ backend/mvnw.cmd | 189 +++++++++++ backend/pom.xml | 125 ++++++++ .../backend/BackendApplication.java | 13 + .../src/main/resources/application.properties | 8 + .../backend/BackendApplicationTests.java | 13 + 9 files changed, 682 insertions(+) create mode 100644 backend/.gitattributes create mode 100644 backend/.gitignore create mode 100644 backend/.mvn/wrapper/maven-wrapper.properties create mode 100644 backend/mvnw create mode 100644 backend/mvnw.cmd create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/com/bookmyvenue/backend/BackendApplication.java create mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/test/java/com/bookmyvenue/backend/BackendApplicationTests.java diff --git a/backend/.gitattributes b/backend/.gitattributes new file mode 100644 index 000000000..3b41682ac --- /dev/null +++ b/backend/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 000000000..a80d47bcb --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,34 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ +.idea/ \ No newline at end of file diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..216df0589 --- /dev/null +++ b/backend/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip diff --git a/backend/mvnw b/backend/mvnw new file mode 100644 index 000000000..bd8896bf2 --- /dev/null +++ b/backend/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd new file mode 100644 index 000000000..92450f932 --- /dev/null +++ b/backend/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 000000000..f529748b5 --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.14 + + + com.bookmyvenue + backend + 0.0.1-SNAPSHOT + + + + + + + + + + + + + + + + + 21 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-web + + + + org.postgresql + postgresql + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + compile + + compile + + + + + org.projectlombok + lombok + + + + + + default-testCompile + test-compile + + testCompile + + + + + org.projectlombok + lombok + + + + + + + + + + diff --git a/backend/src/main/java/com/bookmyvenue/backend/BackendApplication.java b/backend/src/main/java/com/bookmyvenue/backend/BackendApplication.java new file mode 100644 index 000000000..b74b600a1 --- /dev/null +++ b/backend/src/main/java/com/bookmyvenue/backend/BackendApplication.java @@ -0,0 +1,13 @@ +package com.bookmyvenue.backend; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class BackendApplication { + + public static void main(String[] args) { + SpringApplication.run(BackendApplication.class, args); + } + +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 000000000..f442a0a68 --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,8 @@ +spring.application.name=backend + +spring.datasource.url=jdbc:postgresql://localhost:5432/bookmyvenue +spring.datasource.username=postgres +spring.datasource.password=postgres123 + +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true diff --git a/backend/src/test/java/com/bookmyvenue/backend/BackendApplicationTests.java b/backend/src/test/java/com/bookmyvenue/backend/BackendApplicationTests.java new file mode 100644 index 000000000..01a122dc1 --- /dev/null +++ b/backend/src/test/java/com/bookmyvenue/backend/BackendApplicationTests.java @@ -0,0 +1,13 @@ +package com.bookmyvenue.backend; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class BackendApplicationTests { + + @Test + void contextLoads() { + } + +} From 5bfb822dd08e1bbbf5f2d68b81d14a203ee4293a Mon Sep 17 00:00:00 2001 From: Nikhilk70 Date: Sat, 30 May 2026 21:30:35 +0530 Subject: [PATCH 02/41] Added frontend pages and components --- Front-end | 1 + 1 file changed, 1 insertion(+) create mode 160000 Front-end diff --git a/Front-end b/Front-end new file mode 160000 index 000000000..9f5f6d52b --- /dev/null +++ b/Front-end @@ -0,0 +1 @@ +Subproject commit 9f5f6d52bd72e3b7d2463fd2c315db8d99905528 From ee835f0b9098b94b6edd21e124b3f77e00e4f114 Mon Sep 17 00:00:00 2001 From: Nikhilk70 Date: Sat, 30 May 2026 21:45:33 +0530 Subject: [PATCH 03/41] Add frontend React application --- Front-end | 1 - Front-end/.gitignore | 24 + Front-end/README.md | 16 + Front-end/eslint.config.js | 21 + Front-end/index.html | 14 + Front-end/package-lock.json | 3125 ++++++++++++++++++++++++ Front-end/package.json | 20 + Front-end/public/favicon.svg | 1 + Front-end/public/icons.svg | 24 + Front-end/src/App.css | 979 ++++++++ Front-end/src/App.jsx | 22 + Front-end/src/assets/BMV.png | Bin 0 -> 162618 bytes Front-end/src/assets/hero.png | Bin 0 -> 13057 bytes Front-end/src/assets/react.svg | 1 + Front-end/src/assets/vite.svg | 1 + Front-end/src/components/Footer.jsx | 64 + Front-end/src/components/Navbar.jsx | 104 + Front-end/src/components/SearchBar.jsx | 51 + Front-end/src/components/VenueCard.jsx | 36 + Front-end/src/context/AuthContext.jsx | 30 + Front-end/src/index.css | 0 Front-end/src/main.jsx | 9 + Front-end/src/pages/Admin.jsx | 0 Front-end/src/pages/Booking.jsx | 155 ++ Front-end/src/pages/Home.jsx | 185 ++ Front-end/src/pages/Login.jsx | 95 + Front-end/src/pages/Register.jsx | 97 + Front-end/src/pages/VenueDetails.jsx | 157 ++ Front-end/src/pages/Venues.jsx | 232 ++ Front-end/src/routes/AppRoutes.jsx | 20 + Front-end/src/services/Data.js | 58 + Front-end/src/services/api.js | 0 Front-end/vite.config.js | 6 + 33 files changed, 5547 insertions(+), 1 deletion(-) delete mode 160000 Front-end create mode 100644 Front-end/.gitignore create mode 100644 Front-end/README.md create mode 100644 Front-end/eslint.config.js create mode 100644 Front-end/index.html create mode 100644 Front-end/package-lock.json create mode 100644 Front-end/package.json create mode 100644 Front-end/public/favicon.svg create mode 100644 Front-end/public/icons.svg create mode 100644 Front-end/src/App.css create mode 100644 Front-end/src/App.jsx create mode 100644 Front-end/src/assets/BMV.png create mode 100644 Front-end/src/assets/hero.png create mode 100644 Front-end/src/assets/react.svg create mode 100644 Front-end/src/assets/vite.svg create mode 100644 Front-end/src/components/Footer.jsx create mode 100644 Front-end/src/components/Navbar.jsx create mode 100644 Front-end/src/components/SearchBar.jsx create mode 100644 Front-end/src/components/VenueCard.jsx create mode 100644 Front-end/src/context/AuthContext.jsx create mode 100644 Front-end/src/index.css create mode 100644 Front-end/src/main.jsx create mode 100644 Front-end/src/pages/Admin.jsx create mode 100644 Front-end/src/pages/Booking.jsx create mode 100644 Front-end/src/pages/Home.jsx create mode 100644 Front-end/src/pages/Login.jsx create mode 100644 Front-end/src/pages/Register.jsx create mode 100644 Front-end/src/pages/VenueDetails.jsx create mode 100644 Front-end/src/pages/Venues.jsx create mode 100644 Front-end/src/routes/AppRoutes.jsx create mode 100644 Front-end/src/services/Data.js create mode 100644 Front-end/src/services/api.js create mode 100644 Front-end/vite.config.js diff --git a/Front-end b/Front-end deleted file mode 160000 index 9f5f6d52b..000000000 --- a/Front-end +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9f5f6d52bd72e3b7d2463fd2c315db8d99905528 diff --git a/Front-end/.gitignore b/Front-end/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/Front-end/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Front-end/README.md b/Front-end/README.md new file mode 100644 index 000000000..a36934d87 --- /dev/null +++ b/Front-end/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/Front-end/eslint.config.js b/Front-end/eslint.config.js new file mode 100644 index 000000000..ea36dd3dc --- /dev/null +++ b/Front-end/eslint.config.js @@ -0,0 +1,21 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + parserOptions: { ecmaFeatures: { jsx: true } }, + }, + }, +]) diff --git a/Front-end/index.html b/Front-end/index.html new file mode 100644 index 000000000..4f8b3c81a --- /dev/null +++ b/Front-end/index.html @@ -0,0 +1,14 @@ + + + + + + + BookMyVenue — Find & Book Celebration Venues + + + +
+ + + \ No newline at end of file diff --git a/Front-end/package-lock.json b/Front-end/package-lock.json new file mode 100644 index 000000000..83861d8c6 --- /dev/null +++ b/Front-end/package-lock.json @@ -0,0 +1,3125 @@ +{ + "name": "bookamyvenue", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bookamyvenue", + "version": "0.0.0", + "dependencies": { + "axios": "^1.16.1", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@tailwindcss/vite": "^4.3.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "tailwindcss": "^4.3.0", + "vite": "^8.0.12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "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/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.132.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz", + "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", + "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz", + "integrity": "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz", + "integrity": "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz", + "integrity": "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz", + "integrity": "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz", + "integrity": "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz", + "integrity": "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz", + "integrity": "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz", + "integrity": "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz", + "integrity": "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz", + "integrity": "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz", + "integrity": "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz", + "integrity": "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz", + "integrity": "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", + "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "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/electron-to-chromium": { + "version": "1.5.361", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", + "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.0.tgz", + "integrity": "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.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==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "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/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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-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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "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/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "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-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "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.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.6" + } + }, + "node_modules/react-router": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", + "integrity": "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.15.1.tgz", + "integrity": "sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==", + "license": "MIT", + "dependencies": { + "react-router": "7.15.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/rolldown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz", + "integrity": "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.132.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.2", + "@rolldown/binding-darwin-arm64": "1.0.2", + "@rolldown/binding-darwin-x64": "1.0.2", + "@rolldown/binding-freebsd-x64": "1.0.2", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", + "@rolldown/binding-linux-arm64-gnu": "1.0.2", + "@rolldown/binding-linux-arm64-musl": "1.0.2", + "@rolldown/binding-linux-ppc64-gnu": "1.0.2", + "@rolldown/binding-linux-s390x-gnu": "1.0.2", + "@rolldown/binding-linux-x64-gnu": "1.0.2", + "@rolldown/binding-linux-x64-musl": "1.0.2", + "@rolldown/binding-openharmony-arm64": "1.0.2", + "@rolldown/binding-wasm32-wasi": "1.0.2", + "@rolldown/binding-win32-arm64-msvc": "1.0.2", + "@rolldown/binding-win32-x64-msvc": "1.0.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz", + "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.2", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/Front-end/package.json b/Front-end/package.json new file mode 100644 index 000000000..5df027d26 --- /dev/null +++ b/Front-end/package.json @@ -0,0 +1,20 @@ +{ + "name": "bookmyvenue", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.26.0" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.1", + "vite": "^5.4.1" + } +} \ No newline at end of file diff --git a/Front-end/public/favicon.svg b/Front-end/public/favicon.svg new file mode 100644 index 000000000..6893eb132 --- /dev/null +++ b/Front-end/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Front-end/public/icons.svg b/Front-end/public/icons.svg new file mode 100644 index 000000000..e9522193d --- /dev/null +++ b/Front-end/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Front-end/src/App.css b/Front-end/src/App.css new file mode 100644 index 000000000..693d771c2 --- /dev/null +++ b/Front-end/src/App.css @@ -0,0 +1,979 @@ +/* ================================================ + BookMyVenue — Global Styles + Font: Playfair Display + DM Sans + Theme: Warm Ivory + Deep Maroon + Gold + ================================================ */ + +@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@500;600;700;800&family=DM+Sans:wght@300;400;500;600;700&display=swap'); + +:root { + --primary: #8B1A2E; + --primary-light: #a82340; + --primary-dark: #6a1323; + --gold: #C9952A; + --gold-light: #e0b45a; + --bg: #FDFAF6; + --bg-warm: #F7F0E8; + --white: #ffffff; + --text: #1a1a1a; + --text-muted: #6b6b6b; + --border: #e8ddd0; + --shadow: 0 4px 20px rgba(0,0,0,0.08); + --shadow-lg: 0 12px 40px rgba(0,0,0,0.14); + --radius: 12px; + --radius-lg: 20px; + --font-display: 'Playfair Display', serif; + --font-body: 'DM Sans', sans-serif; +} + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +html { scroll-behavior: smooth; } + +body { + font-family: var(--font-body); + background: var(--bg); + color: var(--text); + line-height: 1.6; +} + +a { text-decoration: none; color: inherit; } +button { cursor: pointer; font-family: var(--font-body); border: none; outline: none; } +input, select, textarea { font-family: var(--font-body); outline: none; } +img { max-width: 100%; display: block; } + +/* ===================== LAYOUT ===================== */ +.app { min-height: 100vh; display: flex; flex-direction: column; } +.main-content { flex: 1; padding-top: 72px; } + +/* ===================== NAVBAR ===================== */ +.navbar { + position: fixed; top: 0; left: 0; right: 0; z-index: 1000; + background: var(--white); + border-bottom: 1px solid var(--border); + box-shadow: 0 2px 12px rgba(0,0,0,0.06); +} + +.nav-container { + max-width: 1280px; margin: 0 auto; + display: flex; align-items: center; gap: 24px; + padding: 0 24px; height: 72px; +} + +.nav-logo { + display: flex; align-items: center; gap: 8px; + font-family: var(--font-display); font-size: 1.4rem; font-weight: 700; + color: var(--primary); white-space: nowrap; +} +.nav-logo .logo-icon { + font-size: 1.3rem; + width: 40px; + box-shadow: 1px 1px 20px 0px #00000024; + border-radius: 10px; +} +.logo-accent { color: var(--gold); } + +.city-selector { + position: relative; display: flex; align-items: center; gap: 6px; + padding: 8px 14px; border: 1.5px solid var(--border); border-radius: 8px; + cursor: pointer; font-size: 0.9rem; font-weight: 500; white-space: nowrap; + transition: border-color 0.2s; +} +.city-selector:hover { border-color: var(--primary); } +.city-pin { font-size: 1rem; } +.city-arrow { font-size: 0.65rem; color: var(--text-muted); } + +.city-dropdown { + position: absolute; top: calc(100% + 8px); left: 0; + background: var(--white); border: 1px solid var(--border); + border-radius: var(--radius); box-shadow: var(--shadow-lg); + padding: 16px; min-width: 280px; z-index: 100; +} +.dropdown-label { font-size: 0.75rem; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 12px; } +.city-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px; } +.city-btn { + padding: 8px 12px; border-radius: 8px; border: 1.5px solid var(--border); + background: transparent; font-size: 0.85rem; text-align: left; + transition: all 0.2s; font-family: var(--font-body); +} +.city-btn:hover, .city-btn.active { background: var(--primary); color: var(--white); border-color: var(--primary); } + +.nav-links { display: flex; align-items: center; gap: 4px; flex: 1; } +.nav-link { + padding: 8px 14px; border-radius: 8px; font-size: 0.9rem; font-weight: 500; + color: var(--text); transition: all 0.2s; white-space: nowrap; +} +.nav-link:hover { background: var(--bg-warm); color: var(--primary); } + +.nav-auth { display: flex; align-items: center; gap: 10px; white-space: nowrap; } +.auth-buttons { display: flex; gap: 10px; align-items: center; } +.btn-login { + padding: 8px 20px; border-radius: 8px; font-size: 0.9rem; font-weight: 600; + color: var(--primary); border: 1.5px solid var(--primary); transition: all 0.2s; +} +.btn-login:hover { background: var(--primary); color: var(--white); } +.btn-signup { + padding: 8px 20px; border-radius: 8px; font-size: 0.9rem; font-weight: 600; + background: var(--primary); color: var(--white); transition: all 0.2s; +} +.btn-signup:hover { background: var(--primary-dark); } + +.user-menu-wrap { + position: relative; display: flex; align-items: center; gap: 8px; + cursor: pointer; padding: 6px 10px; border-radius: 8px; + transition: background 0.2s; +} +.user-menu-wrap:hover { background: var(--bg-warm); } +.user-avatar { + width: 36px; height: 36px; border-radius: 50%; + background: var(--primary); color: var(--white); + display: flex; align-items: center; justify-content: center; + font-weight: 700; font-size: 1rem; +} +.user-name-short { font-weight: 600; font-size: 0.9rem; } + +.user-dropdown { + position: absolute; top: calc(100% + 8px); right: 0; + background: var(--white); border: 1px solid var(--border); + border-radius: var(--radius); box-shadow: var(--shadow-lg); + min-width: 160px; overflow: hidden; +} +.dropdown-item { + display: block; padding: 12px 16px; font-size: 0.9rem; + color: var(--text); transition: background 0.15s; width: 100%; text-align: left; +} +.dropdown-item:hover { background: var(--bg-warm); } +.logout-btn { color: var(--primary); font-weight: 600; } + +.mobile-toggle { display: none; font-size: 1.3rem; padding: 6px; background: none; margin-left: auto; } +.mobile-menu { + background: var(--white); border-top: 1px solid var(--border); + padding: 16px 24px; display: flex; flex-direction: column; gap: 4px; +} +.mobile-link { padding: 10px 0; font-size: 1rem; font-weight: 500; border-bottom: 1px solid var(--border); } +.mobile-auth { display: flex; gap: 10px; padding-top: 12px; } + +/* ===================== HERO ===================== */ +.hero { + position: relative; min-height: 88vh; + display: flex; align-items: center; justify-content: center; + overflow: hidden; +} + +.hero-bg { + position: absolute; inset: 0; + background-image: url('https://images.unsplash.com/photo-1519167758481-83f550bb49b3?w=1600&q=80'); + background-size: cover; background-position: center; +} +.hero-overlay { + position: absolute; inset: 0; + background: linear-gradient(135deg, rgba(139,26,46,0.88) 0%, rgba(26,16,10,0.75) 100%); +} + +.hero-content { + position: relative; z-index: 1; + max-width: 900px; margin: 0 auto; + padding: 60px 24px; + text-align: center; color: var(--white); +} + +.hero-badge { + display: inline-flex; align-items: center; gap: 8px; + background: rgba(201,149,42,0.2); border: 1px solid var(--gold); + color: var(--gold-light); padding: 8px 20px; border-radius: 999px; + font-size: 0.85rem; font-weight: 600; letter-spacing: 0.03em; + margin-bottom: 28px; +} + +.hero-title { + font-family: var(--font-display); font-size: clamp(2.4rem, 5vw, 4rem); + font-weight: 800; line-height: 1.15; margin-bottom: 20px; + text-shadow: 0 2px 20px rgba(0,0,0,0.3); +} +.hero-highlight { color: var(--gold-light); } + +.hero-subtitle { + font-size: 1.1rem; opacity: 0.88; margin-bottom: 40px; line-height: 1.7; +} + +.hero-stats { + display: flex; align-items: center; justify-content: center; gap: 32px; + margin-top: 40px; flex-wrap: wrap; +} +.stat { display: flex; flex-direction: column; align-items: center; } +.stat-num { font-family: var(--font-display); font-size: 1.8rem; font-weight: 700; color: var(--gold-light); } +.stat-label { font-size: 0.8rem; opacity: 0.8; } +.stat-divider { width: 1px; height: 40px; background: rgba(255,255,255,0.25); } + +/* ===================== SEARCH BAR ===================== */ +.search-bar { + display: flex; gap: 0; background: var(--white); + border-radius: var(--radius); overflow: hidden; + box-shadow: 0 8px 32px rgba(0,0,0,0.2); + max-width: 780px; margin: 0 auto; +} +.search-bar-large { max-width: 820px; } + +.search-input-wrap { + display: flex; align-items: center; gap: 10px; + padding: 0 18px; flex: 1; border-right: 1px solid var(--border); +} +.search-icon { font-size: 1rem; opacity: 0.6; } +.search-input { + border: none; background: none; font-size: 0.95rem; + padding: 16px 0; width: 100%; color: var(--text); +} +.search-input::placeholder { color: var(--text-muted); } +.search-select { + border: none; border-right: 1px solid var(--border); + padding: 16px 18px; font-size: 0.9rem; background: none; + color: var(--text); cursor: pointer; min-width: 140px; +} +.search-btn { + padding: 16px 32px; background: var(--primary); color: var(--white); + font-size: 0.95rem; font-weight: 700; letter-spacing: 0.02em; + transition: background 0.2s; white-space: nowrap; +} +.search-btn:hover { background: var(--primary-dark); } + +/* ===================== SECTIONS ===================== */ +.section { max-width: 1280px; margin: 0 auto; padding: 72px 24px; } +.section-header { + display: flex; align-items: flex-end; justify-content: space-between; + margin-bottom: 40px; +} +.section-header h2 { + font-family: var(--font-display); font-size: clamp(1.6rem, 3vw, 2.2rem); + font-weight: 700; color: var(--text); +} +.section-header p { color: var(--text-muted); margin-top: 6px; font-size: 1rem; } +.see-all-link { color: var(--primary); font-weight: 600; font-size: 0.95rem; transition: opacity 0.2s; } +.see-all-link:hover { opacity: 0.7; } + +/* ===================== CATEGORIES ===================== */ +.categories-section { background: var(--bg-warm); max-width: 100%; } +.categories-section > * { max-width: 1280px; margin: 0 auto; } +.categories-section .section-header { max-width: 1280px; margin: 0 auto 40px; } + +.categories-grid { + max-width: 1280px; margin: 0 auto; + display: grid; grid-template-columns: repeat(6, 1fr); gap: 16px; + padding: 0 24px; +} + +.category-card { + display: flex; flex-direction: column; align-items: center; gap: 10px; + padding: 28px 16px; border-radius: var(--radius-lg); + background: var(--white); border: 2px solid transparent; + transition: all 0.25s; cursor: pointer; + box-shadow: var(--shadow); +} +.category-card:hover { border-color: var(--primary); transform: translateY(-4px); box-shadow: var(--shadow-lg); } +.cat-icon { font-size: 2.2rem; } +.cat-label { font-weight: 600; font-size: 0.9rem; color: var(--text); } +.cat-count { font-size: 0.75rem; color: var(--text-muted); } + +/* ===================== VENUE CARDS ===================== */ +.venues-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; } + +.venue-card { + background: var(--white); border-radius: var(--radius-lg); + overflow: hidden; box-shadow: var(--shadow); + transition: transform 0.25s, box-shadow 0.25s; cursor: pointer; +} +.venue-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); } + +.card-img-wrap { position: relative; height: 220px; overflow: hidden; } +.card-img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s; } +.venue-card:hover .card-img { transform: scale(1.05); } +.card-badge { + position: absolute; top: 12px; left: 12px; + background: var(--primary); color: var(--white); + font-size: 0.75rem; font-weight: 700; padding: 4px 12px; border-radius: 999px; + text-transform: uppercase; letter-spacing: 0.04em; +} +.card-featured { + position: absolute; top: 12px; right: 12px; + background: var(--gold); color: var(--white); + font-size: 0.75rem; font-weight: 700; padding: 4px 10px; border-radius: 999px; +} + +.card-body { padding: 20px; } +.card-title { font-family: var(--font-display); font-size: 1.15rem; font-weight: 700; margin-bottom: 6px; } +.card-location { color: var(--text-muted); font-size: 0.85rem; margin-bottom: 10px; } +.card-meta { display: flex; gap: 16px; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 12px; } +.card-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; } +.tag { padding: 3px 10px; border-radius: 999px; background: var(--bg-warm); font-size: 0.75rem; font-weight: 500; color: var(--text-muted); } + +.card-footer { display: flex; align-items: center; justify-content: space-between; border-top: 1px solid var(--border); padding-top: 14px; } +.card-price { display: flex; flex-direction: column; } +.price-label { font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } +.price-amount { font-family: var(--font-display); font-size: 1.2rem; font-weight: 700; color: var(--primary); } +.price-unit { font-size: 0.75rem; color: var(--text-muted); } +.card-btn { + padding: 9px 20px; background: var(--primary); color: var(--white); + border-radius: 8px; font-size: 0.85rem; font-weight: 600; transition: background 0.2s; +} +.card-btn:hover { background: var(--primary-dark); } + +/* ===================== WHY SECTION ===================== */ +.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } +.feature-card { + padding: 32px 24px; border-radius: var(--radius-lg); + background: var(--white); border: 1.5px solid var(--border); + transition: box-shadow 0.2s, border-color 0.2s; +} +.feature-card:hover { box-shadow: var(--shadow-lg); border-color: var(--primary); } +.feature-icon { font-size: 2.4rem; margin-bottom: 14px; display: block; } +.feature-card h3 { font-family: var(--font-display); font-size: 1.1rem; font-weight: 700; margin-bottom: 8px; } +.feature-card p { color: var(--text-muted); font-size: 0.9rem; line-height: 1.7; } + +/* ===================== TESTIMONIALS ===================== */ +.testimonials-section { background: var(--bg-warm); max-width: 100%; padding: 72px 24px; } +.testimonials-grid { max-width: 1280px; margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } +.testimonials-section .section-header { max-width: 1280px; margin: 0 auto 40px; } + +.testimonial-card { + background: var(--white); border-radius: var(--radius-lg); + padding: 32px; box-shadow: var(--shadow); position: relative; overflow: hidden; +} +.testimonial-quote { font-family: var(--font-display); font-size: 5rem; line-height: 0.7; color: var(--gold-light); opacity: 0.4; margin-bottom: 16px; } +.testimonial-text { color: var(--text); font-size: 0.95rem; line-height: 1.75; margin-bottom: 24px; } +.testimonial-author { display: flex; align-items: center; gap: 12px; } +.testimonial-avatar { + width: 44px; height: 44px; border-radius: 50%; + background: var(--primary); color: var(--white); + display: flex; align-items: center; justify-content: center; + font-weight: 700; font-size: 1.1rem; flex-shrink: 0; +} +.testimonial-name { font-weight: 700; font-size: 0.95rem; } +.testimonial-event { font-size: 0.8rem; color: var(--text-muted); } + +/* ===================== CTA ===================== */ +.cta-section { + background: linear-gradient(135deg, var(--primary), var(--primary-dark)); + padding: 72px 24px; text-align: center; color: var(--white); +} +.cta-content h2 { font-family: var(--font-display); font-size: 2.2rem; font-weight: 800; margin-bottom: 12px; } +.cta-content p { font-size: 1.1rem; opacity: 0.85; margin-bottom: 32px; } +.cta-btn { + padding: 16px 40px; background: var(--gold); color: var(--white); + border-radius: 10px; font-size: 1.05rem; font-weight: 700; + transition: background 0.2s, transform 0.2s; +} +.cta-btn:hover { background: var(--gold-light); transform: translateY(-2px); } + +/* ===================== VENUES PAGE ===================== */ +.venues-page {} +.venues-hero { + background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); + padding: 60px 24px; text-align: center; color: var(--white); +} +.venues-hero h1 { font-family: var(--font-display); font-size: 2.4rem; font-weight: 800; margin-bottom: 8px; } +.venues-hero p { opacity: 0.85; font-size: 1rem; margin-bottom: 28px; } +.venues-hero .search-bar { max-width: 680px; } +.venues-hero .search-input { color: var(--text); } + +.venues-layout { display: flex; gap: 32px; max-width: 1280px; margin: 0 auto; padding: 40px 24px; align-items: flex-start; } + +/* Sidebar */ +.filters-sidebar { + width: 260px; flex-shrink: 0; + background: var(--white); border-radius: var(--radius-lg); + padding: 24px; box-shadow: var(--shadow); + position: sticky; top: 88px; +} +.filter-heading { font-family: var(--font-display); font-size: 1.1rem; font-weight: 700; margin-bottom: 20px; } +.filter-group { margin-bottom: 24px; border-bottom: 1px solid var(--border); padding-bottom: 20px; } +.filter-label { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); margin-bottom: 10px; display: block; } +.filter-type-btn { + display: block; width: 100%; text-align: left; + padding: 8px 12px; border-radius: 8px; font-size: 0.9rem; + background: none; color: var(--text); transition: all 0.15s; margin-bottom: 4px; +} +.filter-type-btn:hover, .filter-type-btn.active { background: var(--primary); color: var(--white); } + +.range-value { font-size: 1rem; font-weight: 700; color: var(--primary); margin-bottom: 8px; } +.range-input { width: 100%; accent-color: var(--primary); } +.range-limits { display: flex; justify-content: space-between; font-size: 0.75rem; color: var(--text-muted); margin-top: 4px; } + +.checkbox-label { display: flex; align-items: center; gap: 8px; font-size: 0.9rem; margin-bottom: 8px; cursor: pointer; } +.checkbox-label input { accent-color: var(--primary); } + +.clear-filters-btn { + width: 100%; padding: 10px; border-radius: 8px; border: 1.5px solid var(--border); + background: none; font-size: 0.9rem; color: var(--text-muted); + transition: all 0.2s; +} +.clear-filters-btn:hover { border-color: var(--primary); color: var(--primary); } + +/* Venues Main */ +.venues-main { flex: 1; } +.venues-toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; } +.results-count { font-size: 0.95rem; color: var(--text-muted); font-weight: 500; } +.sort-select { padding: 10px 14px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 0.9rem; background: var(--white); cursor: pointer; } + +.no-results { text-align: center; padding: 80px 24px; color: var(--text-muted); } +.no-results span { font-size: 3rem; display: block; margin-bottom: 16px; } +.no-results h3 { font-family: var(--font-display); font-size: 1.4rem; margin-bottom: 8px; color: var(--text); } + +/* ===================== VENUE DETAILS ===================== */ +.venue-details-page { max-width: 1280px; margin: 0 auto; padding: 32px 24px; } + +.gallery { margin-bottom: 40px; } +.gallery-main { position: relative; border-radius: var(--radius-lg); overflow: hidden; height: 460px; } +.gallery-main img { width: 100%; height: 100%; object-fit: cover; } +.gallery-back { + position: absolute; top: 20px; left: 20px; + background: rgba(0,0,0,0.5); color: var(--white); + padding: 8px 16px; border-radius: 8px; font-size: 0.9rem; font-weight: 600; + backdrop-filter: blur(4px); transition: background 0.2s; +} +.gallery-back:hover { background: rgba(0,0,0,0.75); } +.gallery-thumbs { display: flex; gap: 10px; margin-top: 12px; } +.thumb { height: 80px; width: 120px; object-fit: cover; border-radius: 8px; cursor: pointer; border: 2px solid transparent; transition: border-color 0.2s; } +.thumb.active { border-color: var(--primary); } + +.details-layout { display: grid; grid-template-columns: 1fr 360px; gap: 40px; align-items: flex-start; } + +.details-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; gap: 20px; } +.details-type-badge { + display: inline-block; background: var(--bg-warm); color: var(--primary); + font-size: 0.78rem; font-weight: 700; text-transform: uppercase; + letter-spacing: 0.06em; padding: 4px 12px; border-radius: 999px; margin-bottom: 10px; +} +.details-title { font-family: var(--font-display); font-size: 2rem; font-weight: 800; margin-bottom: 8px; } +.details-location { color: var(--text-muted); font-size: 0.95rem; } +.details-rating-wrap { text-align: right; white-space: nowrap; } +.details-rating { font-family: var(--font-display); font-size: 1.4rem; font-weight: 700; color: var(--primary); } +.details-reviews { display: block; font-size: 0.85rem; color: var(--text-muted); } + +.details-highlights { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 36px; } +.highlight { + display: flex; flex-direction: column; align-items: center; gap: 6px; + padding: 16px; border-radius: var(--radius); background: var(--bg-warm); + font-size: 0.85rem; font-weight: 600; text-align: center; +} +.highlight span:first-child { font-size: 1.4rem; } + +.details-section { margin-bottom: 36px; } +.details-section h2 { font-family: var(--font-display); font-size: 1.25rem; font-weight: 700; margin-bottom: 14px; border-bottom: 2px solid var(--border); padding-bottom: 10px; } +.details-section p { color: var(--text-muted); line-height: 1.8; } + +.amenities-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } +.amenity-item { padding: 10px 14px; background: var(--bg-warm); border-radius: 8px; font-size: 0.875rem; font-weight: 500; color: var(--text); } + +.policy-list { list-style: none; display: flex; flex-direction: column; gap: 10px; } +.policy-list li { font-size: 0.9rem; color: var(--text-muted); padding: 10px 14px; background: var(--bg-warm); border-radius: 8px; } + +/* Booking Card */ +.booking-card { + background: var(--white); border-radius: var(--radius-lg); + padding: 28px; box-shadow: var(--shadow-lg); + border: 2px solid var(--border); position: sticky; top: 88px; +} +.booking-card h2 { font-family: var(--font-display); font-size: 1.3rem; font-weight: 700; margin-bottom: 12px; } +.booking-price { display: flex; align-items: baseline; gap: 6px; margin-bottom: 24px; } +.bp-amount { font-family: var(--font-display); font-size: 1.8rem; font-weight: 800; color: var(--primary); } +.bp-unit { font-size: 0.9rem; color: var(--text-muted); } + +.booking-form { display: flex; flex-direction: column; gap: 16px; } +.form-group { display: flex; flex-direction: column; gap: 6px; } +.form-group label { font-size: 0.85rem; font-weight: 600; color: var(--text); display: flex; justify-content: space-between; } +.form-input { + padding: 10px 14px; border: 1.5px solid var(--border); border-radius: 8px; + font-size: 0.9rem; color: var(--text); transition: border-color 0.2s; + background: var(--bg); font-family: var(--font-body); +} +.form-input:focus { border-color: var(--primary); background: var(--white); } +.form-textarea { min-height: 90px; resize: vertical; } + +.booking-summary { background: var(--bg-warm); border-radius: 10px; padding: 16px; } +.bs-row { display: flex; justify-content: space-between; font-size: 0.875rem; margin-bottom: 8px; color: var(--text-muted); } +.bs-total { font-weight: 700; color: var(--text); font-size: 1rem; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border); margin-bottom: 0; } + +.book-now-btn { + padding: 14px; background: var(--primary); color: var(--white); + border-radius: 10px; font-size: 1rem; font-weight: 700; + transition: background 0.2s, transform 0.15s; letter-spacing: 0.02em; +} +.book-now-btn:hover { background: var(--primary-dark); transform: translateY(-1px); } +.login-hint { text-align: center; font-size: 0.8rem; color: var(--text-muted); margin-top: -8px; } + +/* ===================== AUTH PAGES ===================== */ +.auth-page { display: flex; min-height: calc(100vh - 72px); } + +.auth-visual { + width: 45%; background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); + display: flex; align-items: center; justify-content: center; + padding: 60px; color: var(--white); position: sticky; top: 72px; height: calc(100vh - 72px); +} +.auth-visual-content { max-width: 360px; } +.auth-logo { + display: flex; align-items: center; gap: 10px; + font-family: var(--font-display); font-size: 1.8rem; font-weight: 800; + margin-bottom: 40px; +} +.auth-logo span:nth-child(2) span { color: var(--gold-light); } +.auth-visual h2 { font-family: var(--font-display); font-size: 2.2rem; font-weight: 800; margin-bottom: 16px; } +.auth-visual p { opacity: 0.85; font-size: 1rem; line-height: 1.75; } +.auth-decorations { font-size: 2.5rem; display: flex; gap: 20px; margin-top: 40px; } + +.auth-form-side { + flex: 1; display: flex; align-items: center; justify-content: center; + padding: 60px 40px; background: var(--bg); +} +.auth-form-wrap { width: 100%; max-width: 460px; } + +.auth-title { font-family: var(--font-display); font-size: 2rem; font-weight: 800; margin-bottom: 8px; } +.auth-subtitle { color: var(--text-muted); font-size: 0.95rem; margin-bottom: 28px; } +.auth-subtitle a { color: var(--primary); font-weight: 600; } + +.auth-error { background: #fff0f3; border: 1.5px solid #ffb3c1; color: var(--primary); border-radius: 8px; padding: 12px 16px; font-size: 0.9rem; margin-bottom: 20px; } +.auth-form { display: flex; flex-direction: column; gap: 18px; } + +.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } + +.forgot-link { color: var(--primary); font-size: 0.8rem; font-weight: 500; } + +.auth-submit-btn { + padding: 14px; background: var(--primary); color: var(--white); + border-radius: 10px; font-size: 1rem; font-weight: 700; + transition: background 0.2s; letter-spacing: 0.02em; margin-top: 4px; +} +.auth-submit-btn:hover:not(:disabled) { background: var(--primary-dark); } +.auth-submit-btn:disabled { opacity: 0.6; cursor: not-allowed; } + +.auth-divider { text-align: center; position: relative; margin: 24px 0; } +.auth-divider::before { content: ''; position: absolute; top: 50%; left: 0; right: 0; height: 1px; background: var(--border); } +.auth-divider span { position: relative; background: var(--bg); padding: 0 16px; font-size: 0.85rem; color: var(--text-muted); } + +.social-auth { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } +.social-auth-btn { + padding: 12px; border: 1.5px solid var(--border); border-radius: 10px; + font-size: 0.9rem; font-weight: 600; background: var(--white); + transition: border-color 0.2s; color: var(--text); +} +.social-auth-btn:hover { border-color: var(--primary); } + +.terms-label { font-size: 0.85rem; } +.terms-label a { color: var(--primary); } + +/* ===================== BOOKING PAGE ===================== */ +.booking-page { max-width: 1100px; margin: 0 auto; padding: 40px 24px; } +.booking-layout { display: grid; grid-template-columns: 1fr 340px; gap: 40px; align-items: flex-start; } + +.booking-steps { display: flex; align-items: center; margin-bottom: 36px; } +.step { font-size: 0.9rem; font-weight: 600; color: var(--text-muted); padding: 8px 0; } +.step.active { color: var(--primary); } +.step-line { flex: 1; height: 2px; background: var(--border); margin: 0 12px; } + +.booking-details-form, .booking-payment-form, .booking-confirm-form { display: flex; flex-direction: column; gap: 18px; } +.booking-details-form h2, .booking-payment-form h2, .booking-confirm-form h2 { + font-family: var(--font-display); font-size: 1.4rem; font-weight: 700; margin-bottom: 4px; +} + +.payment-note { color: var(--text-muted); font-size: 0.9rem; } +.advance-amount { font-family: var(--font-display); font-size: 2rem; font-weight: 800; color: var(--primary); } +.advance-amount span { font-size: 1rem; color: var(--text-muted); font-family: var(--font-body); } +.payment-methods { display: flex; flex-direction: column; gap: 10px; } +.payment-option { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 12px 14px; border-radius: 10px; border: 1.5px solid var(--border); font-size: 0.9rem; font-weight: 500; transition: border-color 0.2s; } +.payment-option:hover { border-color: var(--primary); } +.payment-option input { accent-color: var(--primary); } +.upi-input { display: flex; flex-direction: column; gap: 6px; } +.upi-input label { font-size: 0.85rem; font-weight: 600; } + +.step-buttons { display: flex; gap: 12px; } +.btn-primary { padding: 12px 28px; background: var(--primary); color: var(--white); border-radius: 10px; font-weight: 700; transition: background 0.2s; } +.btn-primary:hover { background: var(--primary-dark); } +.btn-secondary { padding: 12px 28px; border: 1.5px solid var(--border); border-radius: 10px; font-weight: 600; background: var(--white); color: var(--text); transition: all 0.2s; } +.btn-secondary:hover { border-color: var(--primary); color: var(--primary); } + +.confirm-details { background: var(--bg-warm); border-radius: 12px; padding: 20px; } +.cd-row { display: flex; justify-content: space-between; font-size: 0.9rem; margin-bottom: 10px; } +.cd-row span:last-child { font-weight: 600; } +.cd-total { font-size: 1rem; font-weight: 800; color: var(--primary); padding-top: 10px; border-top: 1px solid var(--border); margin-bottom: 0; } + +/* Booking Summary Side */ +.booking-summary-side { + background: var(--white); border-radius: var(--radius-lg); + padding: 24px; box-shadow: var(--shadow); position: sticky; top: 88px; +} +.booking-summary-side h3 { font-family: var(--font-display); font-size: 1.1rem; font-weight: 700; margin-bottom: 16px; } +.summary-img { width: 100%; height: 160px; object-fit: cover; border-radius: 10px; margin-bottom: 14px; } +.booking-summary-side h4 { font-family: var(--font-display); font-size: 1rem; font-weight: 700; margin-bottom: 4px; } +.booking-summary-side p { font-size: 0.85rem; color: var(--text-muted); margin-bottom: 16px; } +.summary-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 20px; } +.sg-item { display: flex; flex-direction: column; gap: 2px; font-size: 0.82rem; } +.sg-item span { color: var(--text-muted); } +.sg-item strong { font-weight: 700; color: var(--text); font-size: 0.9rem; } +.summary-price-breakdown { background: var(--bg-warm); border-radius: 10px; padding: 14px; } +.spb-row { display: flex; justify-content: space-between; font-size: 0.85rem; margin-bottom: 8px; color: var(--text-muted); } +.spb-total { font-weight: 700; color: var(--text); border-top: 1px solid var(--border); padding-top: 8px; margin-top: 4px; } +.spb-advance { color: var(--primary); font-weight: 700; font-size: 0.95rem; } + +/* ===================== BOOKING SUCCESS ===================== */ +.booking-success { display: flex; align-items: center; justify-content: center; padding: 80px 24px; } +.success-card { + background: var(--white); border-radius: var(--radius-lg); + padding: 48px 40px; text-align: center; max-width: 480px; width: 100%; + box-shadow: var(--shadow-lg); +} +.success-icon { font-size: 4rem; margin-bottom: 20px; display: block; } +.success-card h1 { font-family: var(--font-display); font-size: 2rem; font-weight: 800; margin-bottom: 12px; } +.success-card p { color: var(--text-muted); line-height: 1.75; margin-bottom: 20px; } +.booking-ref { background: var(--bg-warm); border-radius: 8px; padding: 12px 20px; font-size: 0.9rem; color: var(--text-muted); margin-bottom: 24px; } +.booking-ref strong { color: var(--primary); } +.success-details { background: var(--bg-warm); border-radius: 12px; padding: 20px; margin-bottom: 28px; } +.sd-row { display: flex; justify-content: space-between; font-size: 0.9rem; margin-bottom: 8px; } +.sd-row span:last-child { font-weight: 600; } +.success-actions { display: flex; gap: 12px; justify-content: center; } + +/* ===================== FOOTER ===================== */ +.footer { + background: #0f0a08; color: rgba(255,255,255,0.75); + padding: 64px 0 0; +} +.footer-top { + max-width: 1280px; margin: 0 auto; + display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr; + gap: 48px; padding: 0 24px 48px; + border-bottom: 1px solid rgba(255,255,255,0.08); +} +.footer-logo { + display: flex; align-items: center; gap: 8px; + font-family: var(--font-display); font-size: 1.3rem; font-weight: 700; + color: var(--white); margin-bottom: 16px; +} +.footer-tagline { font-size: 0.88rem; line-height: 1.75; color: rgba(255,255,255,0.55); margin-bottom: 24px; } +.footer-socials { display: flex; gap: 12px; } +.social-icon { + width: 38px; height: 38px; border-radius: 50%; + background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.1); + display: flex; align-items: center; justify-content: center; + font-size: 1rem; text-decoration: none; transition: background 0.2s; +} +.social-icon:hover { background: var(--primary); } + +.footer-links-group h4 { color: var(--white); font-size: 0.9rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 20px; } +.footer-links-group a { display: block; font-size: 0.875rem; color: rgba(255,255,255,0.55); margin-bottom: 10px; transition: color 0.2s; } +.footer-links-group a:hover { color: var(--gold-light); } + +.footer-bottom { + max-width: 1280px; margin: 0 auto; + padding: 20px 24px; + display: flex; justify-content: space-between; + font-size: 0.8rem; color: rgba(255,255,255,0.35); +} + +/* ===================== RESPONSIVE ===================== */ +@media (max-width: 1100px) { + .categories-grid { grid-template-columns: repeat(3, 1fr); } + .venues-grid { grid-template-columns: repeat(2, 1fr); } + .features-grid { grid-template-columns: repeat(2, 1fr); } + .footer-top { grid-template-columns: 1fr 1fr; gap: 32px; } +} + +@media (max-width: 900px) { + .nav-links { display: none; } + .mobile-toggle { display: block; } + .auth-visual { display: none; } + .auth-form-side { padding: 40px 24px; } + .details-layout { grid-template-columns: 1fr; } + .booking-layout { grid-template-columns: 1fr; } + .booking-summary-side { order: -1; position: static; } + .venues-layout { flex-direction: column; } + .filters-sidebar { width: 100%; position: static; } + .testimonials-grid { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .hero-title { font-size: 2rem; } + .search-bar { flex-direction: column; border-radius: var(--radius); } + .search-input-wrap, .search-select { border-right: none; border-bottom: 1px solid var(--border); } + .venues-grid { grid-template-columns: 1fr; } + .features-grid { grid-template-columns: 1fr; } + .categories-grid { grid-template-columns: repeat(2, 1fr); } + .details-highlights { grid-template-columns: repeat(2, 1fr); } + .hero-stats { gap: 16px; } + .stat-divider { display: none; } + .footer-top { grid-template-columns: 1fr; gap: 24px; } + .footer-bottom { flex-direction: column; gap: 6px; text-align: center; } + .form-row { grid-template-columns: 1fr; } + .booking-steps { font-size: 0.8rem; } +} + +/* ===================== QUICK CATEGORY PILLS ===================== */ +.quick-cats { + background: var(--white); + border-bottom: 1px solid var(--border); + padding: 0 24px; + position: sticky; top: 72px; z-index: 90; + box-shadow: 0 2px 8px rgba(0,0,0,0.04); +} +.quick-cats-inner { + max-width: 1280px; margin: 0 auto; + display: flex; gap: 10px; overflow-x: auto; + padding: 14px 0; + scrollbar-width: none; +} +.quick-cats-inner::-webkit-scrollbar { display: none; } +.quick-cat-pill { + display: flex; align-items: center; gap: 7px; + padding: 8px 20px; border-radius: 999px; + border: 1.5px solid var(--border); background: var(--bg); + font-size: 0.88rem; font-weight: 600; white-space: nowrap; + color: var(--text); transition: all 0.2s; cursor: pointer; +} +.quick-cat-pill:hover { border-color: var(--primary); background: var(--primary); color: var(--white); } + +/* ===================== CATEGORY ROWS (HOME) ===================== */ +.all-cat-rows { + max-width: 1380px; margin: 0 auto; + display: flex; flex-direction: column; gap: 0; + padding: 0 0 48px; +} + +.cat-row { + padding: 48px 32px 0; + border-bottom: 1px solid var(--border); + padding-bottom: 48px; +} +.cat-row:last-child { border-bottom: none; } + +.cat-row-header { + display: flex; align-items: center; justify-content: space-between; + margin-bottom: 24px; flex-wrap: wrap; gap: 12px; +} +.cat-row-title { + display: flex; align-items: center; gap: 14px; +} +.cat-row-icon { font-size: 2rem; } +.cat-row-title h2 { + font-family: var(--font-display); font-size: 1.5rem; font-weight: 700; margin: 0; +} +.cat-row-title p { color: var(--text-muted); font-size: 0.85rem; margin: 4px 0 0; } + +.cat-row-actions { display: flex; align-items: center; gap: 12px; } + +.scroll-btns { display: flex; gap: 6px; } +.scroll-btn { + width: 36px; height: 36px; border-radius: 50%; + border: 1.5px solid var(--border); background: var(--white); + font-size: 1.3rem; line-height: 1; display: flex; align-items: center; justify-content: center; + transition: all 0.2s; color: var(--text); +} +.scroll-btn:hover { border-color: var(--primary); background: var(--primary); color: var(--white); } + +.view-all-btn { + padding: 9px 20px; border-radius: 8px; + border: 1.5px solid var(--primary); color: var(--primary); + background: transparent; font-size: 0.88rem; font-weight: 700; + transition: all 0.2s; white-space: nowrap; +} +.view-all-btn:hover { background: var(--primary); color: var(--white); } + +/* Horizontal Scroll Track */ +.cat-scroll-wrap { position: relative; } +.cat-scroll-track { + display: flex; gap: 20px; + overflow-x: auto; scroll-snap-type: x mandatory; + padding-bottom: 12px; + scrollbar-width: thin; + scrollbar-color: var(--border) transparent; +} +.cat-scroll-track::-webkit-scrollbar { height: 5px; } +.cat-scroll-track::-webkit-scrollbar-track { background: transparent; } +.cat-scroll-track::-webkit-scrollbar-thumb { background: var(--border); border-radius: 999px; } + +.cat-scroll-item { + flex: 0 0 300px; scroll-snap-align: start; +} + +/* View More Card */ +.view-more-card { + height: 100%; min-height: 380px; + border: 2px dashed var(--border); border-radius: var(--radius-lg); + display: flex; flex-direction: column; align-items: center; justify-content: center; + gap: 10px; cursor: pointer; background: var(--bg-warm); + transition: all 0.25s; +} +.view-more-card:hover { border-color: var(--primary); background: var(--white); transform: translateY(-4px); box-shadow: var(--shadow-lg); } +.view-more-icon { font-size: 2.5rem; } +.view-more-num { font-family: var(--font-display); font-size: 2rem; font-weight: 800; color: var(--primary); } +.view-more-text { font-size: 0.9rem; font-weight: 600; color: var(--text-muted); text-align: center; padding: 0 20px; } +.view-more-arrow { font-size: 1.5rem; color: var(--primary); } + +/* ===================== TOP FILTER BAR (VENUES PAGE) ===================== */ +.top-filter-bar { + background: var(--white); + border-bottom: 1px solid var(--border); + position: sticky; top: 72px; z-index: 80; + box-shadow: 0 2px 8px rgba(0,0,0,0.04); +} +.top-filter-inner { + max-width: 1280px; margin: 0 auto; + display: flex; align-items: center; gap: 12px; + padding: 12px 24px; overflow-x: auto; + scrollbar-width: none; +} +.top-filter-inner::-webkit-scrollbar { display: none; } + +/* Type pills inside filter bar */ +.type-pills-scroll { + display: flex; gap: 8px; flex-shrink: 0; +} +.type-pill { + padding: 7px 18px; border-radius: 999px; + border: 1.5px solid var(--border); background: var(--bg); + font-size: 0.85rem; font-weight: 600; white-space: nowrap; + color: var(--text); transition: all 0.2s; +} +.type-pill:hover { border-color: var(--primary); color: var(--primary); } +.type-pill.active { background: var(--primary); color: var(--white); border-color: var(--primary); } + +.filter-bar-divider { width: 1px; height: 28px; background: var(--border); flex-shrink: 0; } + +.inline-sort-select { + padding: 8px 14px; border: 1.5px solid var(--border); border-radius: 8px; + font-size: 0.85rem; background: var(--white); cursor: pointer; + font-family: var(--font-body); color: var(--text); white-space: nowrap; flex-shrink: 0; +} + +.price-quick { + display: flex; align-items: center; gap: 10px; flex-shrink: 0; + background: var(--bg-warm); border: 1.5px solid var(--border); + border-radius: 8px; padding: 6px 14px; +} +.price-quick-label { font-size: 0.82rem; font-weight: 700; color: var(--primary); white-space: nowrap; } +.price-quick-range { width: 90px; accent-color: var(--primary); cursor: pointer; } + +.more-filters-btn { + display: flex; align-items: center; gap: 7px; + padding: 8px 18px; border-radius: 8px; + border: 1.5px solid var(--border); background: var(--white); + font-size: 0.85rem; font-weight: 700; color: var(--text); + white-space: nowrap; transition: all 0.2s; flex-shrink: 0; +} +.more-filters-btn:hover, .more-filters-btn.active { border-color: var(--primary); color: var(--primary); background: #fff0f3; } +.filter-badge { + background: var(--primary); color: var(--white); + font-size: 0.7rem; font-weight: 800; + width: 18px; height: 18px; border-radius: 50%; + display: inline-flex; align-items: center; justify-content: center; +} + +.clear-inline-btn { + padding: 8px 14px; border-radius: 8px; + border: 1.5px solid var(--border); background: none; + font-size: 0.82rem; font-weight: 600; color: var(--text-muted); + transition: all 0.2s; flex-shrink: 0; +} +.clear-inline-btn:hover { color: var(--primary); border-color: var(--primary); } + +/* Active Filter Chips */ +.active-chips { + max-width: 1280px; margin: 0 auto; + padding: 10px 24px; display: flex; flex-wrap: wrap; gap: 8px; +} +.chip { + display: inline-flex; align-items: center; gap: 6px; + background: #fff0f3; border: 1px solid #ffb3c1; + color: var(--primary); border-radius: 999px; + font-size: 0.8rem; font-weight: 600; padding: 4px 12px; +} +.chip button { background: none; border: none; color: var(--primary); cursor: pointer; font-size: 0.75rem; padding: 0; line-height: 1; } + +/* ===================== VENUES LAYOUT NEW ===================== */ +.venues-layout-new { + max-width: 1280px; margin: 0 auto; + padding: 28px 24px; position: relative; +} +.venues-main-new { width: 100%; } +.venues-main-new .results-count { font-size: 0.95rem; color: var(--text-muted); margin-bottom: 20px; } +.venues-main-new .results-count strong { color: var(--text); font-size: 1.05rem; } + +/* ===================== FILTER DRAWER (SLIDE-IN SIDEBAR) ===================== */ +.filter-drawer { + position: fixed; top: 0; right: -360px; width: 340px; height: 100vh; + background: var(--white); z-index: 1001; + box-shadow: -4px 0 32px rgba(0,0,0,0.15); + transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1); + display: flex; flex-direction: column; + overflow-y: auto; +} +.filter-drawer.open { right: 0; } + +.drawer-header { + display: flex; align-items: center; justify-content: space-between; + padding: 20px 24px; border-bottom: 1px solid var(--border); + position: sticky; top: 0; background: var(--white); z-index: 1; +} +.drawer-header h3 { font-family: var(--font-display); font-size: 1.2rem; font-weight: 700; } +.drawer-close { + width: 32px; height: 32px; border-radius: 50%; + border: 1.5px solid var(--border); background: none; + font-size: 1rem; display: flex; align-items: center; justify-content: center; + transition: all 0.2s; +} +.drawer-close:hover { background: var(--primary); color: var(--white); border-color: var(--primary); } + +.filter-drawer .filter-group { padding: 20px 24px; border-bottom: 1px solid var(--border); } +.filter-drawer .filter-label { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); margin-bottom: 12px; display: block; } +.filter-drawer .filter-type-btn { + display: block; width: 100%; text-align: left; + padding: 9px 14px; border-radius: 8px; font-size: 0.9rem; + background: none; color: var(--text); transition: all 0.15s; + margin-bottom: 4px; border: 1.5px solid transparent; +} +.filter-drawer .filter-type-btn:hover { background: var(--bg-warm); } +.filter-drawer .filter-type-btn.active { background: var(--primary); color: var(--white); border-color: var(--primary); } + +.amenity-check-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } +.amenity-check { + display: flex; align-items: center; gap: 8px; + padding: 9px 12px; border-radius: 8px; border: 1.5px solid var(--border); + font-size: 0.85rem; font-weight: 500; cursor: pointer; + transition: all 0.15s; +} +.amenity-check input { accent-color: var(--primary); } +.amenity-check.checked { border-color: var(--primary); background: #fff0f3; color: var(--primary); } + +.drawer-footer { + padding: 20px 24px; display: flex; gap: 12px; + position: sticky; bottom: 0; background: var(--white); + border-top: 1px solid var(--border); +} +.drawer-footer .clear-filters-btn { + flex: 1; padding: 12px; border-radius: 10px; + border: 1.5px solid var(--border); background: none; + font-size: 0.9rem; color: var(--text-muted); +} +.apply-btn { + flex: 2; padding: 12px; border-radius: 10px; + background: var(--primary); color: var(--white); + font-size: 0.9rem; font-weight: 700; border: none; + transition: background 0.2s; +} +.apply-btn:hover { background: var(--primary-dark); } + +.drawer-overlay { + position: fixed; inset: 0; background: rgba(0,0,0,0.4); + z-index: 1000; backdrop-filter: blur(2px); +} + +/* ===================== RESPONSIVE UPDATES ===================== */ +@media (max-width: 900px) { + .cat-scroll-item { flex: 0 0 260px; } + .cat-row { padding: 32px 16px; } + .cat-row-title h2 { font-size: 1.2rem; } + .scroll-btns { display: none; } + .top-filter-inner { padding: 10px 16px; } + .price-quick { display: none; } +} +@media (max-width: 640px) { + .cat-scroll-item { flex: 0 0 240px; } + .filter-drawer { width: 100%; right: -100%; } + .type-pill { font-size: 0.78rem; padding: 6px 14px; } + .all-cat-rows { padding-bottom: 32px; } +} \ No newline at end of file diff --git a/Front-end/src/App.jsx b/Front-end/src/App.jsx new file mode 100644 index 000000000..ca4c186d7 --- /dev/null +++ b/Front-end/src/App.jsx @@ -0,0 +1,22 @@ +import { BrowserRouter } from "react-router-dom"; +import { AuthProvider } from "./context/AuthContext"; +import AppRoutes from "./routes/AppRoutes"; +import Navbar from "./components/Navbar"; +import Footer from "./components/Footer"; +import "./App.css"; + +export default function App() { + return ( + + +
+ +
+ +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/Front-end/src/assets/BMV.png b/Front-end/src/assets/BMV.png new file mode 100644 index 0000000000000000000000000000000000000000..e50bee01a580934dd53ce3b632502c6a889f1dd0 GIT binary patch literal 162618 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�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 JPDHLkV1g&e```co literal 0 HcmV?d00001 diff --git a/Front-end/src/assets/hero.png b/Front-end/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/Front-end/src/assets/react.svg b/Front-end/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/Front-end/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Front-end/src/assets/vite.svg b/Front-end/src/assets/vite.svg new file mode 100644 index 000000000..5101b674d --- /dev/null +++ b/Front-end/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/Front-end/src/components/Footer.jsx b/Front-end/src/components/Footer.jsx new file mode 100644 index 000000000..560904e24 --- /dev/null +++ b/Front-end/src/components/Footer.jsx @@ -0,0 +1,64 @@ +import { Link } from "react-router-dom"; + +export default function Footer() { + return ( +

+ ); +} \ No newline at end of file diff --git a/Front-end/src/components/Navbar.jsx b/Front-end/src/components/Navbar.jsx new file mode 100644 index 000000000..11481d7bf --- /dev/null +++ b/Front-end/src/components/Navbar.jsx @@ -0,0 +1,104 @@ +import { useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import { useAuth } from "../context/AuthContext"; +import BMV from "../assets/BMV.png" + +const CITIES = [ + "Mumbai", "Delhi", "Bengaluru", "Hyderabad", "Chennai", + "Kolkata", "Pune", "Ahmedabad", "Jaipur", "Surat" +]; + +export default function Navbar() { + const { user, logout } = useAuth(); + const navigate = useNavigate(); + const [city, setCity] = useState("Bengaluru"); + const [showCityDropdown, setShowCityDropdown] = useState(false); + const [showUserMenu, setShowUserMenu] = useState(false); + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + return ( + + ); +} \ No newline at end of file diff --git a/Front-end/src/components/SearchBar.jsx b/Front-end/src/components/SearchBar.jsx new file mode 100644 index 000000000..f479d60d7 --- /dev/null +++ b/Front-end/src/components/SearchBar.jsx @@ -0,0 +1,51 @@ +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; + +export default function SearchBar({ large = false }) { + const [query, setQuery] = useState(""); + const [eventType, setEventType] = useState(""); + const [guests, setGuests] = useState(""); + const navigate = useNavigate(); + + const handleSearch = (e) => { + e.preventDefault(); + const params = new URLSearchParams(); + if (query) params.set("q", query); + if (eventType) params.set("type", eventType); + if (guests) params.set("guests", guests); + navigate(`/venues?${params.toString()}`); + }; + + return ( +
+
+ 🔍 + setQuery(e.target.value)} + className="search-input" + /> +
+ + + +
+ ); +} \ No newline at end of file diff --git a/Front-end/src/components/VenueCard.jsx b/Front-end/src/components/VenueCard.jsx new file mode 100644 index 000000000..7f4409589 --- /dev/null +++ b/Front-end/src/components/VenueCard.jsx @@ -0,0 +1,36 @@ +import { useNavigate } from "react-router-dom"; + +export default function VenueCard({ venue }) { + const navigate = useNavigate(); + + return ( +
navigate(`/venues/${venue.id}`)}> +
+ {venue.name} +
{venue.type}
+ {venue.featured &&
⭐ Featured
} +
+
+

{venue.name}

+

📍 {venue.location}, {venue.city}

+
+ 👥 Up to {venue.capacity} + ⭐ {venue.rating} ({venue.reviews}) +
+
+ {venue.amenities?.slice(0, 3).map(a => ( + {a} + ))} +
+
+
+ Starting from + ₹{venue.price?.toLocaleString()} + /day +
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/Front-end/src/context/AuthContext.jsx b/Front-end/src/context/AuthContext.jsx new file mode 100644 index 000000000..0ea62336a --- /dev/null +++ b/Front-end/src/context/AuthContext.jsx @@ -0,0 +1,30 @@ +import { createContext, useContext, useState } from "react"; + +const AuthContext = createContext(null); + +export function AuthProvider({ children }) { + const [user, setUser] = useState(() => { + const saved = localStorage.getItem("bmv_user"); + return saved ? JSON.parse(saved) : null; + }); + + const login = (userData) => { + setUser(userData); + localStorage.setItem("bmv_user", JSON.stringify(userData)); + }; + + const logout = () => { + setUser(null); + localStorage.removeItem("bmv_user"); + }; + + return ( + + {children} + + ); +} + +export function useAuth() { + return useContext(AuthContext); +} \ No newline at end of file diff --git a/Front-end/src/index.css b/Front-end/src/index.css new file mode 100644 index 000000000..e69de29bb diff --git a/Front-end/src/main.jsx b/Front-end/src/main.jsx new file mode 100644 index 000000000..de3343ea2 --- /dev/null +++ b/Front-end/src/main.jsx @@ -0,0 +1,9 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) \ No newline at end of file diff --git a/Front-end/src/pages/Admin.jsx b/Front-end/src/pages/Admin.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/Front-end/src/pages/Booking.jsx b/Front-end/src/pages/Booking.jsx new file mode 100644 index 000000000..33ffe7c0e --- /dev/null +++ b/Front-end/src/pages/Booking.jsx @@ -0,0 +1,155 @@ +import { useState } from "react"; +import { useLocation, useNavigate } from "react-router-dom"; +import { useAuth } from "../context/AuthContext"; + +export default function Booking() { + const { state } = useLocation(); + const navigate = useNavigate(); + const { user } = useAuth(); + const [step, setStep] = useState(1); + const [confirmed, setConfirmed] = useState(false); + const [form, setForm] = useState({ name: user?.name || "", email: user?.email || "", phone: "", notes: "" }); + + if (!state?.venue) return
No booking details found.
; + + const { venue, date, guests, eventType } = state; + const total = Math.round(venue.price * 1.05); + const advance = Math.round(total * 0.5); + + const set = (k) => (e) => setForm(f => ({ ...f, [k]: e.target.value })); + + const handleConfirm = (e) => { + e.preventDefault(); + setConfirmed(true); + }; + + if (confirmed) { + return ( +
+
+
🎉
+

Booking Confirmed!

+

Your venue has been successfully booked. Check your email for confirmation details.

+
Booking ID: BMV{Date.now().toString().slice(-8)}
+
+
Venue{venue.name}
+
Date{date || "TBD"}
+
Guests{guests}
+
Advance Paid₹{advance.toLocaleString()}
+
+
+ + +
+
+
+ ); + } + + return ( +
+
+ {/* Left: Form */} +
+
+
= 1 ? "active" : ""}`}>1. Details
+
+
= 2 ? "active" : ""}`}>2. Payment
+
+
= 3 ? "active" : ""}`}>3. Confirm
+
+ + {step === 1 && ( +
setStep(2)}> +

Your Details

+
+ + +
+
+ + +
+
+ + +
+
+ +