From b57a928135d8e63509a6d638c7cec6a0032be71c Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 07:16:07 +0000 Subject: [PATCH 01/49] Setting up GitHub Classroom Feedback From 284098774ff2a8e3fd829aca1be751ef55fc98ed Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 07:16:09 +0000 Subject: [PATCH 02/49] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 99c6d1b..0436ab3 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/xq5TwZF7) # rc2-template-proyecto-individual-final \ No newline at end of file From c63d988be79fc352325634d11298b366349adcdd Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Fri, 8 Mar 2024 19:28:52 +0100 Subject: [PATCH 03/49] initial commit --- README.md | 4 +-- docs/planning.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 docs/planning.md diff --git a/README.md b/README.md index 0436ab3..e470e3f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/xq5TwZF7) -# rc2-template-proyecto-individual-final \ No newline at end of file + +#####"Rescata los sabores de la memoria. Cocina con las recetas de la abuela, ahora en una app." \ No newline at end of file diff --git a/docs/planning.md b/docs/planning.md new file mode 100644 index 0000000..5ceef87 --- /dev/null +++ b/docs/planning.md @@ -0,0 +1,75 @@ + + + +Esta aplicación puede ayudar a preservar las tradiciones culinarias, fomentar la cocina casera y conectar a las personas a través de la comida. + +El mercado de aplicaciones de recetas es amplio y con un alto potencial de crecimiento. +Existe una gran demanda por recetas tradicionales y familiares. + + + +##Funcionalidades: + +- Registro de recetas: + + - Agregar recetas con nombre, descripción, ingredientes, pasos y fotos. + - Categorizar las recetas por tipo de plato, región, ocasión, etc. + - Importar recetas desde archivos PDF, libros o sitios web. + - Escanear recetas manuscritas con el OCR de la cámara. + + +- Búsqueda y filtrado: + + - Buscar recetas por nombre, ingrediente, categoría o palabra clave. + - Filtrar recetas por tipo de plato, región, dificultad, tiempo de preparación, etc. + - Guardar recetas favoritas para acceder a ellas fácilmente. + + +- Organización: + + - Crear colecciones personalizadas de recetas (menús, eventos, etc.). + - Compartir recetas con amigos y familiares a través de la aplicación o redes sociales. + - Exportar recetas a diferentes formatos (PDF, Word, etc.). + +Interactividad: + +Dejar comentarios y valoraciones en las recetas. +Subir fotos de tus platos y compartirlas con la comunidad. +Conectar con otros usuarios que comparten tus gustos culinarios. +Personalización: + +Ajustar las unidades de medida de los ingredientes (gramos, tazas, etc.). +Adaptar las recetas a tus preferencias (vegetarianas, veganas, sin gluten, etc.). +Crear un perfil con tus recetas favoritas, colecciones e historial de búsqueda. +Extras: + +Diccionario de términos culinarios. +Conversor de unidades de medida. +Temporizador y cronómetro para cocinar. +Planificador de comidas para organizar tus menús semanales. +Diseño: + +Interfaz intuitiva y fácil de usar. +Diseño atractivo y atemporal, con imágenes de alta calidad. +Opción de personalizar la interfaz con diferentes temas y colores. +Modelo de negocio: + +Aplicación gratuita con publicidad. +Suscripción premium para eliminar la publicidad y acceder a funciones adicionales. +Venta de contenido exclusivo (recetas premium, ebooks, cursos de cocina). +Público objetivo: + +Personas que buscan recetas tradicionales y familiares. +Amantes de la cocina que quieren aprender nuevas recetas y técnicas. +Familias que quieren cocinar de forma saludable y económica. +Personas que buscan preservar las recetas de sus ancestros. +Promoción: + +Marketing en redes sociales y plataformas online. +Colaboración con influencers y cocineros reconocidos. +Publicidad en medios especializados en gastronomía. +Campañas de email marketing y anuncios segmentados. + + + + From 34b96db735bc6d6a2ebb42e44f392c97cf88990e Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Fri, 8 Mar 2024 19:37:48 +0100 Subject: [PATCH 04/49] Planning --- README.md | 2 +- docs/planning.md | 84 ++++++++++++++++++++++++++---------------------- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index e470e3f..b6382de 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -#####"Rescata los sabores de la memoria. Cocina con las recetas de la abuela, ahora en una app." \ No newline at end of file +#"Rescata los sabores de la memoria. Cocina con las recetas de la abuela, ahora en una app." \ No newline at end of file diff --git a/docs/planning.md b/docs/planning.md index 5ceef87..1ed526e 100644 --- a/docs/planning.md +++ b/docs/planning.md @@ -1,4 +1,4 @@ - +#Los secretos de la abuela/guela Esta aplicación puede ayudar a preservar las tradiciones culinarias, fomentar la cocina casera y conectar a las personas a través de la comida. @@ -6,6 +6,12 @@ Esta aplicación puede ayudar a preservar las tradiciones culinarias, fomentar l El mercado de aplicaciones de recetas es amplio y con un alto potencial de crecimiento. Existe una gran demanda por recetas tradicionales y familiares. +- Público objetivo: + + - Personas que buscan recetas tradicionales y familiares. + - Amantes de la cocina que quieren aprender nuevas recetas y técnicas. + - Familias que quieren cocinar de forma saludable y económica. + - Personas que buscan preservar las recetas de sus ancestros. ##Funcionalidades: @@ -31,44 +37,44 @@ Existe una gran demanda por recetas tradicionales y familiares. - Compartir recetas con amigos y familiares a través de la aplicación o redes sociales. - Exportar recetas a diferentes formatos (PDF, Word, etc.). -Interactividad: - -Dejar comentarios y valoraciones en las recetas. -Subir fotos de tus platos y compartirlas con la comunidad. -Conectar con otros usuarios que comparten tus gustos culinarios. -Personalización: - -Ajustar las unidades de medida de los ingredientes (gramos, tazas, etc.). -Adaptar las recetas a tus preferencias (vegetarianas, veganas, sin gluten, etc.). -Crear un perfil con tus recetas favoritas, colecciones e historial de búsqueda. -Extras: - -Diccionario de términos culinarios. -Conversor de unidades de medida. -Temporizador y cronómetro para cocinar. -Planificador de comidas para organizar tus menús semanales. -Diseño: - -Interfaz intuitiva y fácil de usar. -Diseño atractivo y atemporal, con imágenes de alta calidad. -Opción de personalizar la interfaz con diferentes temas y colores. -Modelo de negocio: - -Aplicación gratuita con publicidad. -Suscripción premium para eliminar la publicidad y acceder a funciones adicionales. -Venta de contenido exclusivo (recetas premium, ebooks, cursos de cocina). -Público objetivo: - -Personas que buscan recetas tradicionales y familiares. -Amantes de la cocina que quieren aprender nuevas recetas y técnicas. -Familias que quieren cocinar de forma saludable y económica. -Personas que buscan preservar las recetas de sus ancestros. -Promoción: - -Marketing en redes sociales y plataformas online. -Colaboración con influencers y cocineros reconocidos. -Publicidad en medios especializados en gastronomía. -Campañas de email marketing y anuncios segmentados. +- Interactividad: + + - Dejar comentarios y valoraciones en las recetas. + - Subir fotos de tus platos y compartirlas con la comunidad. + - Conectar con otros usuarios que comparten tus gustos culinarios. + +- Personalización: + + - Ajustar las unidades de medida de los ingredientes (gramos, tazas, etc.). + - Adaptar las recetas a tus preferencias (vegetarianas, veganas, sin gluten, etc.). + - Crear un perfil con tus recetas favoritas, colecciones e historial de búsqueda. + +- Extras: + + - Diccionario de términos culinarios. + - Conversor de unidades de medida. + - Temporizador y cronómetro para cocinar. + - Planificador de comidas para organizar tus menús semanales. + +-Diseño: + + - Interfaz intuitiva y fácil de usar. + - Diseño atractivo y atemporal, con imágenes de alta calidad. + - Opción de personalizar la interfaz con diferentes temas y colores. + +-Modelo de negocio: + + - Aplicación gratuita con publicidad. + - Suscripción premium para eliminar la publicidad y acceder a funciones adicionales. + - Venta de contenido exclusivo (recetas premium, ebooks, cursos de cocina). + + +-Promoción: + + - Marketing en redes sociales y plataformas online. + - Colaboración con influencers y cocineros reconocidos. + - Publicidad en medios especializados en gastronomía. + - Campañas de email marketing y anuncios segmentados. From acbf37485e501d48d7c8c697afcb89d38998cd9f Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Fri, 8 Mar 2024 19:43:30 +0100 Subject: [PATCH 05/49] Format plannig --- docs/planning.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/planning.md b/docs/planning.md index 1ed526e..0608f90 100644 --- a/docs/planning.md +++ b/docs/planning.md @@ -14,7 +14,7 @@ Existe una gran demanda por recetas tradicionales y familiares. - Personas que buscan preservar las recetas de sus ancestros. -##Funcionalidades: +Funcionalidades: - Registro de recetas: @@ -56,20 +56,20 @@ Existe una gran demanda por recetas tradicionales y familiares. - Temporizador y cronómetro para cocinar. - Planificador de comidas para organizar tus menús semanales. --Diseño: +- Diseño: - Interfaz intuitiva y fácil de usar. - Diseño atractivo y atemporal, con imágenes de alta calidad. - Opción de personalizar la interfaz con diferentes temas y colores. --Modelo de negocio: +- Modelo de negocio: - Aplicación gratuita con publicidad. - Suscripción premium para eliminar la publicidad y acceder a funciones adicionales. - Venta de contenido exclusivo (recetas premium, ebooks, cursos de cocina). --Promoción: +- Promoción: - Marketing en redes sociales y plataformas online. - Colaboración con influencers y cocineros reconocidos. From 52c11102a78fefbcccc839fd7c832f2053360b39 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Mon, 18 Mar 2024 03:05:04 +0100 Subject: [PATCH 06/49] User Story Y user journey --- docs/img/logo.png | Bin 0 -> 22388 bytes docs/planning.md | 16 +++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 docs/img/logo.png diff --git a/docs/img/logo.png b/docs/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..412d7bcf770b36b10d9264562226169eb7251462 GIT binary patch literal 22388 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

v3V2A} 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 Date: Tue, 19 Mar 2024 23:01:49 +0100 Subject: [PATCH 07/49] Enlace a Figma --- docs/planning.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/planning.md b/docs/planning.md index cb2930e..64b55c7 100644 --- a/docs/planning.md +++ b/docs/planning.md @@ -92,4 +92,6 @@ Funcionalidades: ## User Story Mapping y User Story Journey -[Enlace al Mural](https://miro.com/app/board/uXjVNh9V25g=/) \ No newline at end of file +[Enlace al Mural](https://miro.com/app/board/uXjVNh9V25g=/) + +[Enlace al Figma] (https://www.figma.com/file/tZvfMCCzUnU73bt2WPEJHI/Los-secretos-de-la-abuela?type=design&node-id=0-1&mode=design&t=TaD7mTvaFzTGI2RK-0s) \ No newline at end of file From 01c89689b8a50289fea4efa2a48ca78f79ee69af Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Sat, 23 Mar 2024 11:49:55 +0100 Subject: [PATCH 08/49] inicializacion del proyecto frontend y backend --- backend/.gitignore | 33 + backend/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes backend/.mvn/wrapper/maven-wrapper.properties | 2 + backend/mvnw | 308 ++ backend/mvnw.cmd | 205 + backend/pom.xml | 56 + .../backend/BackendApplication.java | 13 + .../src/main/resources/application.properties | 1 + .../backend/BackendApplicationTests.java | 13 + docs/planning.md | 2 +- frontend/.eslintrc.cjs | 20 + frontend/.gitignore | 24 + frontend/README.md | 8 + frontend/index.html | 13 + frontend/package-lock.json | 4255 +++++++++++++++++ frontend/package.json | 26 + frontend/public/vite.svg | 1 + frontend/src/App.css | 42 + frontend/src/App.jsx | 35 + frontend/src/assets/react.svg | 1 + frontend/src/index.css | 68 + frontend/src/main.jsx | 10 + frontend/vite.config.js | 7 + 23 files changed, 5142 insertions(+), 1 deletion(-) create mode 100644 backend/.gitignore create mode 100644 backend/.mvn/wrapper/maven-wrapper.jar create mode 100644 backend/.mvn/wrapper/maven-wrapper.properties create mode 100755 backend/mvnw create mode 100644 backend/mvnw.cmd create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/org/factoriaf5/backend/BackendApplication.java create mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/test/java/org/factoriaf5/backend/BackendApplicationTests.java create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.jsx create mode 100644 frontend/vite.config.js diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,33 @@ +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/ diff --git a/backend/.mvn/wrapper/maven-wrapper.jar b/backend/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 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 A?*IS* literal 0 HcmV?d00001 diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..5f0536e --- /dev/null +++ b/backend/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/backend/mvnw b/backend/mvnw new file mode 100755 index 0000000..66df285 --- /dev/null +++ b/backend/mvnw @@ -0,0 +1,308 @@ +#!/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 +# +# https://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.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/backend/mvnw.cmd @@ -0,0 +1,205 @@ +@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 https://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.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..f4c50c2 --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.4 + + + org.factoriaf5 + backend + 0.0.1-SNAPSHOT + backend + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.h2database + h2 + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/backend/src/main/java/org/factoriaf5/backend/BackendApplication.java b/backend/src/main/java/org/factoriaf5/backend/BackendApplication.java new file mode 100644 index 0000000..fac81a8 --- /dev/null +++ b/backend/src/main/java/org/factoriaf5/backend/BackendApplication.java @@ -0,0 +1,13 @@ +package org.factoriaf5.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 0000000..3ca17a4 --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=backend diff --git a/backend/src/test/java/org/factoriaf5/backend/BackendApplicationTests.java b/backend/src/test/java/org/factoriaf5/backend/BackendApplicationTests.java new file mode 100644 index 0000000..963193a --- /dev/null +++ b/backend/src/test/java/org/factoriaf5/backend/BackendApplicationTests.java @@ -0,0 +1,13 @@ +package org.factoriaf5.backend; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class BackendApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/docs/planning.md b/docs/planning.md index 64b55c7..fe45797 100644 --- a/docs/planning.md +++ b/docs/planning.md @@ -92,6 +92,6 @@ Funcionalidades: ## User Story Mapping y User Story Journey -[Enlace al Mural](https://miro.com/app/board/uXjVNh9V25g=/) +[Enlace al MIRO](https://miro.com/app/board/uXjVNh9V25g=/) [Enlace al Figma] (https://www.figma.com/file/tZvfMCCzUnU73bt2WPEJHI/Los-secretos-de-la-abuela?type=design&node-id=0-1&mode=design&t=TaD7mTvaFzTGI2RK-0s) \ No newline at end of file diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000..4dcb439 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.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/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,8 @@ +# 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/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..0c589ec --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +

+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..e4fc857 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,4255 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.43", + "@types/react-dom": "^18.2.17", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.55.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "vite": "^5.0.8" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.69", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.69.tgz", + "integrity": "sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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 + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "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 + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.715", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "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, + "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, + "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, + "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 + }, + "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 + }, + "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 + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.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, + "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": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "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, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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 + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "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, + "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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.4.tgz", + "integrity": "sha512-vjFghvHWidBTinu5TCymJk/lRHlR5ljqB83yugr0HA1xspUPdOZHqbqDLnZ8f9/jINrtFHTCYYyIUi+o+Q5iyg==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.36", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..56b6cdd --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,26 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.43", + "@types/react-dom": "^18.2.17", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.55.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "vite": "^5.0.8" + } +} diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..b8b8473 --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> + +

Vite + React

+
+ +

+ Edit src/App.jsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx new file mode 100644 index 0000000..54b39dd --- /dev/null +++ b/frontend/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From 4946a592918bbdf755da77a5635543d1704e9ea9 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Mon, 25 Mar 2024 23:01:25 +0100 Subject: [PATCH 09/49] Header --- frontend/index.html | 4 +- frontend/package-lock.json | 41 ++++++++- frontend/package.json | 3 +- frontend/src/App.css | 40 +-------- frontend/src/App.jsx | 38 ++------ frontend/src/index.css | 84 +++++------------- frontend/src/midleware/router/AppRouter.jsx | 15 ++++ frontend/src/presentation/assets/logo.png | Bin 0 -> 22388 bytes frontend/src/presentation/assets/logo1.png | Bin 0 -> 12262 bytes .../src/{ => presentation}/assets/react.svg | 0 .../presentation/components/Header/Header.css | 34 +++++++ .../presentation/components/Header/Header.jsx | 15 ++++ frontend/src/presentation/pages/HomePage.css | 2 + frontend/src/presentation/pages/HomePage.jsx | 13 +++ 14 files changed, 153 insertions(+), 136 deletions(-) create mode 100644 frontend/src/midleware/router/AppRouter.jsx create mode 100644 frontend/src/presentation/assets/logo.png create mode 100644 frontend/src/presentation/assets/logo1.png rename frontend/src/{ => presentation}/assets/react.svg (100%) create mode 100644 frontend/src/presentation/components/Header/Header.css create mode 100644 frontend/src/presentation/components/Header/Header.jsx create mode 100644 frontend/src/presentation/pages/HomePage.css create mode 100644 frontend/src/presentation/pages/HomePage.jsx diff --git a/frontend/index.html b/frontend/index.html index 0c589ec..88858f7 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,9 +2,9 @@ - + - Vite + React + Los secretos de la abuela
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e4fc857..07a42ee 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,7 +9,8 @@ "version": "0.0.0", "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3" }, "devDependencies": { "@types/react": "^18.2.43", @@ -927,6 +928,14 @@ "node": ">= 8" } }, + "node_modules/@remix-run/router": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", @@ -3512,6 +3521,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "dependencies": { + "@remix-run/router": "1.15.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "dependencies": { + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", diff --git a/frontend/package.json b/frontend/package.json index 56b6cdd..e4d2178 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3" }, "devDependencies": { "@types/react": "^18.2.43", diff --git a/frontend/src/App.css b/frontend/src/App.css index b9d355d..778fcea 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,42 +1,6 @@ #root { max-width: 1280px; margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} + text-align: center; +} \ No newline at end of file diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index b8b8473..24540b4 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,35 +1,13 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +import "./App.css"; +import { AppRouter } from "./midleware/router/AppRouter"; +//import { ActivitiesProvider } from './midleware/context/ActivitiesContext'; function App() { - const [count, setCount] = useState(0) - return ( - <> - -

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) + + + + ); } -export default App +export default App; diff --git a/frontend/src/index.css b/frontend/src/index.css index 6119ad9..473dac7 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,68 +1,24 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { +* { margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; + padding: 0; + box-sizing:border-box; + text-decoration: none; + list-style: none; + font-size: 62.5%; + font-family: 'Roboto'; + border: none; } - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; +:root { + --background-color: #D9D9D9; + --light-pink: #FDE8E9; + --pink: #E3BAC6; + --dark-pink:#BC9EC1; + --dark-green:#074F57; + --green:#58A4B0; + --turquoise:#074F57; } - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } +body { + background-color: var(--background-color); + background-size: cover; + height: 100vh; } diff --git a/frontend/src/midleware/router/AppRouter.jsx b/frontend/src/midleware/router/AppRouter.jsx new file mode 100644 index 0000000..6f61510 --- /dev/null +++ b/frontend/src/midleware/router/AppRouter.jsx @@ -0,0 +1,15 @@ +import { BrowserRouter, Route, Routes } from "react-router-dom"; +import { HomePage } from "../../presentation/pages/HomePage"; + + + +export const AppRouter = () => { + return ( + + + }> + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/presentation/assets/logo.png b/frontend/src/presentation/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..412d7bcf770b36b10d9264562226169eb7251462 GIT binary patch literal 22388 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

v3V2A} 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 XD_T{ZY4y^x|ANueHiXt{Iz<03T@C9J literal 0 HcmV?d00001 diff --git a/frontend/src/assets/react.svg b/frontend/src/presentation/assets/react.svg similarity index 100% rename from frontend/src/assets/react.svg rename to frontend/src/presentation/assets/react.svg diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css new file mode 100644 index 0000000..535fd48 --- /dev/null +++ b/frontend/src/presentation/components/Header/Header.css @@ -0,0 +1,34 @@ + + +img { + width: 15rem; + margin-left: 1.5rem; + margin-top: 1.5rem; + + +} +header { + display: flex; + flex-direction: column; + background-color: var(--light-pink); + width: 25rem; + height: 75rem; + border-radius: 25px; + margin-left: -5rem; + + + +} + +ul { + justify-content: center; +} +li { +font-size: 3rem; +color:var(--dark-pink); +padding-top: 20rem; +text-align: center; + + + +} \ No newline at end of file diff --git a/frontend/src/presentation/components/Header/Header.jsx b/frontend/src/presentation/components/Header/Header.jsx new file mode 100644 index 0000000..f38b73f --- /dev/null +++ b/frontend/src/presentation/components/Header/Header.jsx @@ -0,0 +1,15 @@ +import './Header.css'; +import logo from '../../assets/logo.png'; + + +export const Header = () => { + return ( +

+ Los secretos de la abuela +
    +
  • Home
  • +
+
+ + ) +} diff --git a/frontend/src/presentation/pages/HomePage.css b/frontend/src/presentation/pages/HomePage.css new file mode 100644 index 0000000..139597f --- /dev/null +++ b/frontend/src/presentation/pages/HomePage.css @@ -0,0 +1,2 @@ + + diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx new file mode 100644 index 0000000..8a76538 --- /dev/null +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -0,0 +1,13 @@ +import { Outlet } from "react-router-dom"; +import { Header } from "../components/Header/Header"; + +export const HomePage = () => { + return ( + <> + +
+ + + + ); +}; From aae903de79269ad2706443e8999256434fe75e4a Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Tue, 26 Mar 2024 00:13:32 +0100 Subject: [PATCH 10/49] Card Recipe --- .../components/CardRecipe/CardRecipe.css | 29 +++++++++++++++++++ .../components/CardRecipe/CardRecipe.jsx | 14 +++++++++ frontend/src/presentation/pages/HomePage.jsx | 2 ++ 3 files changed, 45 insertions(+) create mode 100644 frontend/src/presentation/components/CardRecipe/CardRecipe.css create mode 100644 frontend/src/presentation/components/CardRecipe/CardRecipe.jsx diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.css b/frontend/src/presentation/components/CardRecipe/CardRecipe.css new file mode 100644 index 0000000..d08bfb8 --- /dev/null +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.css @@ -0,0 +1,29 @@ +.card { +width: 25rem; +height: 25rem; +background-color: var(--dark-green); +border-radius: 30px; +padding-top: 3rem; +} +.titulo { + background-color:white; + height: 3rem; + width: 25rem; + display: flex; + justify-content: center; + align-items: center; +} +h2 { + font-size: 1.5rem; +} +.photo { + margin: auto; + margin-top: 3rem; + width: 20rem; + height: 12rem; + background-color: aqua; +} + + + +} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx new file mode 100644 index 0000000..99d8871 --- /dev/null +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx @@ -0,0 +1,14 @@ +import "./CardRecipe.css"; + +export const CardRecipe = () => { + return ( +
+
+

Titulo receta

+
+
+ +
+
+ ); +}; diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 8a76538..5555342 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -1,11 +1,13 @@ import { Outlet } from "react-router-dom"; import { Header } from "../components/Header/Header"; +import { CardRecipe } from "../components/CardRecipe/CardRecipe"; export const HomePage = () => { return ( <>
+ From 05fb08d3ef8e02da7427b97423752dbfe39ae799 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Tue, 26 Mar 2024 11:55:01 +0100 Subject: [PATCH 11/49] CardLastSeen --- frontend/src/App.css | 2 -- frontend/src/index.css | 3 +++ frontend/src/midleware/router/AppRouter.jsx | 4 +++ .../components/CardRecipe/CardRecipe.css | 4 ++- .../presentation/components/Header/Header.css | 25 ++++++------------- .../presentation/components/Header/Header.jsx | 2 +- frontend/src/presentation/pages/HomePage.css | 8 +++++- frontend/src/presentation/pages/HomePage.jsx | 3 +++ 8 files changed, 29 insertions(+), 22 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index 778fcea..0167bd3 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,6 +1,4 @@ #root { max-width: 1280px; margin: 0 auto; - - text-align: center; } \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css index 473dac7..93ee963 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -16,9 +16,12 @@ --dark-green:#074F57; --green:#58A4B0; --turquoise:#074F57; + --light-turquoise:#9CF6F6; } body { background-color: var(--background-color); background-size: cover; height: 100vh; + margin: 0; + padding: 0; } diff --git a/frontend/src/midleware/router/AppRouter.jsx b/frontend/src/midleware/router/AppRouter.jsx index 6f61510..bc34f44 100644 --- a/frontend/src/midleware/router/AppRouter.jsx +++ b/frontend/src/midleware/router/AppRouter.jsx @@ -1,5 +1,7 @@ import { BrowserRouter, Route, Routes } from "react-router-dom"; import { HomePage } from "../../presentation/pages/HomePage"; +import { CardRecipe } from "../../presentation/components/CardRecipe/CardRecipe"; +import { CardLastSeen } from "../../presentation/components/CardLastSeen/CardLastSeen"; @@ -8,6 +10,8 @@ export const AppRouter = () => { }> + + diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.css b/frontend/src/presentation/components/CardRecipe/CardRecipe.css index d08bfb8..60b8bfd 100644 --- a/frontend/src/presentation/components/CardRecipe/CardRecipe.css +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.css @@ -4,9 +4,11 @@ height: 25rem; background-color: var(--dark-green); border-radius: 30px; padding-top: 3rem; +margin-top: 5rem; + } .titulo { - background-color:white; + background-color:#9CF6F6 ; height: 3rem; width: 25rem; display: flex; diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css index 535fd48..7242e4f 100644 --- a/frontend/src/presentation/components/Header/Header.css +++ b/frontend/src/presentation/components/Header/Header.css @@ -1,25 +1,19 @@ - - -img { - width: 15rem; - margin-left: 1.5rem; - margin-top: 1.5rem; - - -} header { + margin-top: 5rem; display: flex; flex-direction: column; background-color: var(--light-pink); width: 25rem; height: 75rem; - border-radius: 25px; - margin-left: -5rem; - - - + border-radius: 25px; } +.logo { + width: 15rem; + margin-left: 1.5rem; + margin-top: 1.5rem; +} + ul { justify-content: center; } @@ -28,7 +22,4 @@ font-size: 3rem; color:var(--dark-pink); padding-top: 20rem; text-align: center; - - - } \ No newline at end of file diff --git a/frontend/src/presentation/components/Header/Header.jsx b/frontend/src/presentation/components/Header/Header.jsx index f38b73f..57199ec 100644 --- a/frontend/src/presentation/components/Header/Header.jsx +++ b/frontend/src/presentation/components/Header/Header.jsx @@ -5,7 +5,7 @@ import logo from '../../assets/logo.png'; export const Header = () => { return (
- Los secretos de la abuela + Los secretos de la abuela
  • Home
diff --git a/frontend/src/presentation/pages/HomePage.css b/frontend/src/presentation/pages/HomePage.css index 139597f..68da39d 100644 --- a/frontend/src/presentation/pages/HomePage.css +++ b/frontend/src/presentation/pages/HomePage.css @@ -1,2 +1,8 @@ - +body { + display: flex; + flex-direction:row; + gap: 8rem; + /*justify-content: center; + align-items: center;*/ +} diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 5555342..5837ff6 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -1,5 +1,7 @@ import { Outlet } from "react-router-dom"; import { Header } from "../components/Header/Header"; +import "./HomePage.css"; +import { CardLastSeen } from "../components/CardLastSeen/CardLastSeen"; import { CardRecipe } from "../components/CardRecipe/CardRecipe"; export const HomePage = () => { @@ -8,6 +10,7 @@ export const HomePage = () => {
+ From 3aa1c740f2049a26bcdef6c29574ac0d6439067a Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Tue, 26 Mar 2024 11:55:50 +0100 Subject: [PATCH 12/49] CardLastSeen --- .../components/CardLastSeen/CardLastSeen.css | 19 +++++++++++++++++++ .../components/CardLastSeen/CardLastSeen.jsx | 13 +++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 frontend/src/presentation/components/CardLastSeen/CardLastSeen.css create mode 100644 frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx diff --git a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css new file mode 100644 index 0000000..5ec25c2 --- /dev/null +++ b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css @@ -0,0 +1,19 @@ +.cardLastSeen { + width: 35rem; + height: 20rem; + background-color: var(--green); + margin-top: 5rem; + display: flex; + gap:3rem; + justify-content: center; + align-items: center; + border-radius: 15px; +} + +.imgLastSeen { + width: 20rem; + background-color: white; + height: 15rem; + border-radius: 10px; + +} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx new file mode 100644 index 0000000..d938280 --- /dev/null +++ b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx @@ -0,0 +1,13 @@ + import "./CardLastSeen.css"; + +export const CardLastSeen = () => { + return ( +<> +
+ +

Titulo Receta

+ +
+ + ); +}; \ No newline at end of file From 957fb89cd74e5aa3ccd0dea11fe789136cd8ceaa Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Wed, 27 Mar 2024 10:31:55 +0100 Subject: [PATCH 13/49] AddButton --- frontend/src/App.css | 4 --- frontend/src/midleware/router/AppRouter.jsx | 5 +-- .../src/presentation/assets/botoncazo.png | Bin 0 -> 7832 bytes .../components/AddButton/AddButton.css | 15 +++++++++ .../components/AddButton/AddButton.jsx | 11 +++++++ .../components/CardLastSeen/CardLastSeen.css | 29 +++++++++--------- .../components/CardRecipe/CardRecipe.css | 12 ++++---- .../components/CardRecipe/CardRecipe.jsx | 2 +- .../presentation/components/Header/Header.css | 3 +- frontend/src/presentation/pages/HomePage.css | 5 +-- frontend/src/presentation/pages/HomePage.jsx | 3 ++ 11 files changed, 56 insertions(+), 33 deletions(-) create mode 100644 frontend/src/presentation/assets/botoncazo.png create mode 100644 frontend/src/presentation/components/AddButton/AddButton.css create mode 100644 frontend/src/presentation/components/AddButton/AddButton.jsx diff --git a/frontend/src/App.css b/frontend/src/App.css index 0167bd3..e69de29 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,4 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; -} \ No newline at end of file diff --git a/frontend/src/midleware/router/AppRouter.jsx b/frontend/src/midleware/router/AppRouter.jsx index bc34f44..1eb4556 100644 --- a/frontend/src/midleware/router/AppRouter.jsx +++ b/frontend/src/midleware/router/AppRouter.jsx @@ -1,7 +1,6 @@ import { BrowserRouter, Route, Routes } from "react-router-dom"; import { HomePage } from "../../presentation/pages/HomePage"; -import { CardRecipe } from "../../presentation/components/CardRecipe/CardRecipe"; -import { CardLastSeen } from "../../presentation/components/CardLastSeen/CardLastSeen"; + @@ -10,8 +9,6 @@ export const AppRouter = () => { }> - - diff --git a/frontend/src/presentation/assets/botoncazo.png b/frontend/src/presentation/assets/botoncazo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7993f9993c881cda638cde77c007cb7050ff42 GIT binary patch literal 7832 zcmcIo2UJtpx(R7OCQBG?c?=}40< z9aI!SsVYsXQbd~cD(_%noOv_%de?m~Yn|kry}$j}@BjDC3DMWp+_UT8E)WQ`M+<{C z0Den>%b$4%@NIUiV*v!(?MYNu*GChnE>2i45C{`;-PFSu2i2U$hKdc$w+MFv89}TFukz!Wp7{ z9jm4F8PrVu(q?15odI-H34Jnot#5H76P6Tr`54g8Z zFs6i2Fy}a5RLVe<$)EvN7DNr0iw=eig3K83(Q0vfb84xx_|v(d-3*kxQ(Sj;-BUT< zc=N`I6bFSnx3A%|_M6{%&itfciOA0AP&kT1zAJ+lp~#ujv1B$dI1DGi?vL0Uz{i#6a9t`)9b9&C;COMkUJuY)P8 z>Wp#3!Nl8aZU*9)Pqoac6`th65>Z}B$+thFDlkdxkukmLng$vcmt~s{C5tJUb7;>- z&j?Dy7u~E+jAH0uEYKsGUzWY0YYI>AvPX}I8f&G;AV1EiwbTjfpymvoss}SO-@61V zIjVXXFLBrH?p_CS0(jd+AI!jg4Q~hnyp3@?8l$T4C2*TT^un{>)tPn}M5~?;uSgs2 zX7t*7UiCoIQ4Mzf09E)PIEd2`7NORXaU-m+=J*2Cjh$(4A`>M#;QY9MHNCkB!xI?X z4jJRuIIqeU#rGoY?DL0-9gIY6WFTw8`;U8((X96?MnTAjso_mNZy8Mved7PLE90&k z?t&9*TWbAjhad|@bx}%H?DmOM^p;ARJm0CH=JR`-hYN(190ZU7tcjY2j($p9TUONf13H^X9d0hVka$@Nt1>BXJDl`B>F1OSzDet6{5?+VPIz~#=S zj;ANU54VA5RB(`;{mqQkAKuu%98jn}vx}F=m2n%f=L92&MTw`HbN|Ehj8+2-(51u7 z_k*8e1R-4JJZ$h?`nz{T!S>|C*;sNpGaj?|QePm#7PxuHvu z@@QU>#=Xu@_Y6vYzU8S~enj+|Ud*+(Nm2@dyTMQDWQOna5dbOxx&>@j~~hx&K=Gb zGw(LvX`X6kYQ~po>LlA8JMnnI{`tfFj^D@A$2G?HjQftCa6h!Fyebs*B)9(&^@2hO zFS};#?dRqVolg{=mDGLgFK=mill$g#Ye?&hx2H#6wxqxA%%U2NBs8kuU9?iq=J4Q= zi##@O*rn*gyRSq4R?O9U$VpbVbb*t)PUtLv=|NYd|kxcFfH?vY(Ei;R?rviKVD&$s# zS1!)u=7mEb%|pjjWcm-v9|$~fMee9vnzZ~`mzsNR5$8soj!JVLXoO`Vl<=Of zrjsK>TJ#gqiMELvC(5oi@}LmIJc@@j4{Bc-IY^dK#`^RHB3xnYF~K^Oh)z37ebSR? z=P}!Z=PVpbo9F0l``aX?a8d&KwEP!##&()7yIzS>?PtxXCCmF}*N07C_08u`a=+E< zBCA$atV=G?d;E`YG=FLR!nM9QU)8#C_xEZ@YeJpvZH>FN&e~nAuP6mWf(=)1q>3x< zyv53V5X`R+Kf4jomx(zhmx0en2X>i8%Zh@c+^`}Oi=0AbY!4Af;&3!{$Zs7^dxf*) z=-z92d*Wm_uE?MHB@=dA$=R#@N%tBW>m{G*Iv3Yw*G^Vcg!;y;^RD_X6!UqqGO&8F z9^;GQE#-CQ(^SxGA2=_3ptt$wyI>ev^pBJ(JEC%`R@+DZ0a$t#r6% zk$Lv$Y})5XiXA>KYyAorKkZQA8aTB~uE&#Kpm#FFtIM>6R()ZtB#I*@$e@jJxvw zdGgb&&@%3+{Y_8hu0S-e@)p{@&SFYs(onO8?89-G3ij$!v|?_}%{nZMCbbwR3J9|4 z#NBuoYkLiGnBY;L@p}5TP`X^3RoiQ#&c_`eacv&SRgJ-QW^pZX3W8Mc;S%u%adQ)2 zSrJ7PoxacjkHnc={mAo4(Y?1Lg@c88>##%k595u?;FFxj zp*F+MhO?U{_OaAv)anV|zjpoF^VYK;DIcGd_m>ZOh0k1^HT|F>$#YuYyjhf^{_Tr6 zu4kMiF(2z_vx3Al%ecdRrkRGZhCUc<=23%K@m$f{R;?*C(?-K0JziPYH%}#n!#ZtF zMu#2CGQIsE`oXND>3sWG8R0O&m_Qaz)DVS+ zM$Av`xyvu>+pydA#N?Hf+pJO}jpMhtQ0GRRddCwws~SJY=KD1Eogw(Vfwg;2W|k~g zg?%Zti~FKv*IP)wP}wOR9|yhDmsd@%>DnGICdg&a?Jb#UwSW z;=JM;&b|*Nd@W}^82Toz#Y-A2|L-^4AV{HIO(&af3N6~4BauF~&2 z*wNK2TRt&b%g!Bs=JKPthM|szk!(RLVp)v){7PYNdsmKjwo2*Ys?X!ad40Wov2LMm z8G}Uw6ZMKF9uGF8rd3wE*1N*rU42CVVpCsnXR&rMe$8fOH7KlvZI0haxxn|)r^xoi zC*g_w#b4mV;b9{6B2$VZ>%_T{mDFrK|CM8NIkVQct@)a6+4nSYS3LC0eNT?Bx?>|; zQ9k=%>CI|87g@Y_+~?4A(X#ckvY;su-+mvnS=avOm-JlYNp9R89>+AUFoTXWfM;g{ zMifC6;?+r9{a0JYFMvR5`BmFuHozMdIi1`LAiwG`eX#TXy?xA1PE4_O3~MLAza4ix ziXl(+hQB>ITV5euvb4L}yRB#a@xgv+kihN9$;CsZWhx}bv_r?=qhGP^0y(Ll%|8UP z;>pfH3$%@=o|)@dWWtci0&}PhmXYufDhRY+X!BywG7y{wfmoJ_ zMrJfKol{60*;x{cC)*MvJ)Kh|wgh`32?d!dtAc=ucof7`MhB+j zqE2uiV!SB?LvLLpocB4L0v@8G3|8_)0s@=~G%VQD*@;9&dZHj-M9=!4bC6arXQ5+;Fz!DPX53X*VHX*n4waWDdgfJ0#jC|pJY4oAu$kZ>vR z_YVZnM#0-54bUgP>jIuo5CTf_!XNSch2;QzYcY*z_YZ3~Xa3|A z!ISt8(9M}Gs0&h^Lcr1pXy8IY0A5H-z@#MLaz-!(q_jLzM(!94j)cKBt#?7{knu!2 zufISQjNo!eX;~!f&rpDrcq|S3OW?02kSRuFveOUx>iOmW5nSs*%N?Fmp9l05{xm0P4b*@;X6Yy}*W`gvRncwImt+Yz0BiSMrszWSx3 zgG7^YZkue2jt-Fuu`^IJX}JaATJ{!jRUeJ50fTHNMWVz;Igs=JA#5V z1iVRyO)-E=*v$e&LEzs9%{FQ2#r;Roi-pVIH2CZPMiJ#t(HRg;U1A> z2au77mHY>-zp`>uJ9M*&e+w}5A5!qOlOi!hDveC>`W_xbg6kiF`r15^Sll=I;RzI? zI{^;?e;aneQh*fEfNY{5I5NqdK%o)vU^@!g8N5~JU>X^Wb#ZYb0?qd*S9*q^i!|E5TPt+>7k^>82nW%X0X1lk}BhLnQ+=$PMNRI(k-14|*O+J9y8 zx6N7qUv#%`%Ww`@l05-97C`?ScjOTYFsz)NgdAK73-lZuOhN%JCnI48R6AbA4ljd~ zll>9=zqs?iyZZmTJ6kFLVbafh_{xHRllV<;Y!T(3!}jZ}`@hlmZ&~+iTf^V7?*BJU zUn~Aw{X+j*+TWhh-zxaTW{rM5*&zS6tbUP)z)=SY?7Le#@qf1GebZ0=Z}-lvR`=8S z^+)#u4#k_dTc>g0Ve33kAOY1%0Z!{XF%Sp{w7o_Pt!m^MJ8`$i?UUHv6VE-8v!Wx4 zqa#@JOiEp3Bx`;jQtpV|n;;MvaQl2ke4`%ZYF1VgPOy1s{k^vEfa2_kq)rBi%La{B zKGRq5N&eNmUpJ@1qKutW5J$~{_SK2QrJ4qZ&)v_-OB<&H1ZSwEZHj`MuOY;8r#q`!5qfC_QcXrj14zFN8Pw3vV2dSUz}sY5iiS# zbzWn%=8Q6!u8^vsIa3LyA4o-OQurd)$5p+Xd9H117 z0V-S_nAM5!jducOW$P;Uppd6jZ;U3Duwmxi+%+^QXTYn70!i5RI|)(4%7@=St0Y)z&4S-VYWP?v z?GV19SiE05Jn^@5kO7OZ)(;1Z#@uF<^o|Vy&KvsBJ7qynurka$$s^D0f`SMu^(mL_pu*^9( z_{6728s0vXZkCDtP7_5}KdsApBsA5>MWlChZ5zp(M^|xwyfxgV$v(`~ zg2l8Rs|jX(vaca*6t+E>)i7WbCf&rIL`Iw1EzqsKTde0gr$Tq|VQ9Cup@T&A+3zk4 zF|2#3{CMW@U0C?NC>bh<-2IA*c&1@IXKr{`dWtQi_kdu#sx|P$*TvDKXToib=kL^- z^-GGH)(KW-#Po(IUl+DPKYi+WTIm8h{t5wxG&X4LqKKv3DC049XHngkFFe<~8rNpy zSlO5*bMaJ&BqDBnzYx@yO!doIbhK{ry)=>Y)?Swu>54BF_F^jvGoP5}4p-8Dl{9+f z>}krx5U72@8ae3hDPtYlz)jb6J2#c==FN+1dlJh3ygl-raEb=^XHmtD_wl1Q1Y`y^ z+#875J@Myo$}NmH2vxo0z8gY2H4{QRqEXCYABvWRN{1GN&T6?sMV0B@kU{YlMpbv6 zfeH*Oo7H8>nF#A+Jt!^R7?q_Xr9lfqDaGS)fCzBtug`)je{^#4hPHSF6w60n3}wMhomr+^RFE zJdI-coPua}8%Eyu&C`QNC0;s246pL?Yihb%g1z|FZD89lqWkU|6*Cay^js5;lu2Uz zt{7&qz zd~kE1)G&7fi{>5N37nk`CB0;f&Fz%pkCznrZ`!K^SKHQ?J+cf+FZ3hR^uppa zJek@xtmmrJ9v^wM=VdTIkLr@=QLY;2v$}J~#nxu~=62Nw%oT;2w=m{P?@tz~@I7lY zcT47D{6@RahPJ6kWcSW&bhy^`26KMzDSStn4nz7n#cN}!HT%8@U4#+BR==ScD`|O; T^YZr1_cmG@y69}Rvlspcgb_69 literal 0 HcmV?d00001 diff --git a/frontend/src/presentation/components/AddButton/AddButton.css b/frontend/src/presentation/components/AddButton/AddButton.css new file mode 100644 index 0000000..6a9a575 --- /dev/null +++ b/frontend/src/presentation/components/AddButton/AddButton.css @@ -0,0 +1,15 @@ +.addButtonConteiner { + position: absolute; + top: 0; + right: 0; + display: flex; + justify-content:end; + align-items:end; +} + +.addButton { + width: 6rem; + height: 4rem; + margin-top: 2rem; + margin-right: 2rem; +} diff --git a/frontend/src/presentation/components/AddButton/AddButton.jsx b/frontend/src/presentation/components/AddButton/AddButton.jsx new file mode 100644 index 0000000..518bcba --- /dev/null +++ b/frontend/src/presentation/components/AddButton/AddButton.jsx @@ -0,0 +1,11 @@ +import "./AddButton.css"; +import logoButton from "../../assets/botoncazo.png"; + +export const AddButton = () => { + return ( +
+ + +
+ ); +}; diff --git a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css index 5ec25c2..ec317e8 100644 --- a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css +++ b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css @@ -1,19 +1,18 @@ .cardLastSeen { - width: 35rem; - height: 20rem; - background-color: var(--green); - margin-top: 5rem; - display: flex; - gap:3rem; - justify-content: center; - align-items: center; - border-radius: 15px; + width: 35rem; + height: 20rem; + background-color: var(--green); + margin-top: 10rem; + display: flex; + gap: 3rem; + justify-content: center; + align-items: center; + border-radius: 15px; } .imgLastSeen { - width: 20rem; - background-color: white; - height: 15rem; - border-radius: 10px; - -} \ No newline at end of file + width: 20rem; + background-color: white; + height: 15rem; + border-radius: 10px; +} diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.css b/frontend/src/presentation/components/CardRecipe/CardRecipe.css index 60b8bfd..56c7d70 100644 --- a/frontend/src/presentation/components/CardRecipe/CardRecipe.css +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.css @@ -1,16 +1,16 @@ .card { -width: 25rem; -height: 25rem; +width: 20rem; +height: 20rem; background-color: var(--dark-green); border-radius: 30px; padding-top: 3rem; -margin-top: 5rem; +margin-top: 15rem; } .titulo { background-color:#9CF6F6 ; height: 3rem; - width: 25rem; + width: 20rem; display: flex; justify-content: center; align-items: center; @@ -21,8 +21,8 @@ h2 { .photo { margin: auto; margin-top: 3rem; - width: 20rem; - height: 12rem; + width: 15rem; + height: 8rem; background-color: aqua; } diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx index 99d8871..4ae222d 100644 --- a/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx @@ -7,7 +7,7 @@ export const CardRecipe = () => {

Titulo receta

- +
); diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css index 7242e4f..acab8b0 100644 --- a/frontend/src/presentation/components/Header/Header.css +++ b/frontend/src/presentation/components/Header/Header.css @@ -1,5 +1,6 @@ header { - margin-top: 5rem; + margin-left: 2rem; + margin-top: 2rem; display: flex; flex-direction: column; background-color: var(--light-pink); diff --git a/frontend/src/presentation/pages/HomePage.css b/frontend/src/presentation/pages/HomePage.css index 68da39d..3d2de94 100644 --- a/frontend/src/presentation/pages/HomePage.css +++ b/frontend/src/presentation/pages/HomePage.css @@ -1,7 +1,8 @@ body { - display: flex; + + display:flex; flex-direction:row; - gap: 8rem; + gap: 3rem; /*justify-content: center; align-items: center;*/ } diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 5837ff6..4e1af1e 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -3,14 +3,17 @@ import { Header } from "../components/Header/Header"; import "./HomePage.css"; import { CardLastSeen } from "../components/CardLastSeen/CardLastSeen"; import { CardRecipe } from "../components/CardRecipe/CardRecipe"; +import { AddButton } from "../components/AddButton/AddButton"; export const HomePage = () => { return ( <>
+ + From 6c8d612181be1f81b67f585b0a9092248875682f Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Wed, 27 Mar 2024 13:31:46 +0100 Subject: [PATCH 14/49] Conteiner and Link --- frontend/src/App.css | 7 + frontend/src/data/data.json | 254 ++++++++++++++++++ .../components/AddButton/AddButton.jsx | 8 +- .../components/CardLastSeen/CardLastSeen.css | 2 +- .../components/CardLastSeen/CardLastSeen.jsx | 5 +- .../CardLastSeenConteiner.css | 9 + .../CardLastSeenConteiner.jsx | 12 + .../components/CardRecipe/CardRecipe.css | 8 +- .../components/CardRecipe/CardRecipe.jsx | 7 +- .../CardRecipeConteiner.css | 9 + .../CardRecipeConteiner.jsx | 18 ++ .../presentation/components/Header/Header.css | 2 +- .../presentation/components/Header/Header.jsx | 5 +- frontend/src/presentation/pages/HomePage.jsx | 10 +- 14 files changed, 337 insertions(+), 19 deletions(-) create mode 100644 frontend/src/data/data.json create mode 100644 frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.css create mode 100644 frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.jsx create mode 100644 frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.css create mode 100644 frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.jsx diff --git a/frontend/src/App.css b/frontend/src/App.css index e69de29..54a5dbd 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -0,0 +1,7 @@ + {display: grid; + grid-template-columns: repeat(3, 1fr); + grid-template-rows: repeat(4, 1fr); + grid-column-gap: 4px; + grid-row-gap: 4px; + justify-content: center; + } \ No newline at end of file diff --git a/frontend/src/data/data.json b/frontend/src/data/data.json new file mode 100644 index 0000000..37cbfc5 --- /dev/null +++ b/frontend/src/data/data.json @@ -0,0 +1,254 @@ +{ + "page": 1, + "results": [ + { + "titulo": "Tortilla de patatas española", + "tiempo_preparacion": "30 minutos", + "personas": 4, + "etiquetas": ["Fácil", "Económico", "Vegetariano"], + "categorias": ["Desayunos", "Entrantes"], + "coleccion": "Recetas tradicionales españolas", + "plato": "Principal", + "ingredientes": [ + { + "nombre": "Patatas", + "cantidad": 500, + "unidad": "gramos" + }, + { + "nombre": "Huevos", + "cantidad": 6, + "unidad": "unidades" + }, + { + "nombre": "Cebolla", + "cantidad": 1, + "unidad": "unidad" + }, + { + "nombre": "Aceite de oliva virgen extra", + "cantidad": 2, + "unidad": "cucharadas soperas" + }, + { + "nombre": "Sal", + "cantidad": "Al gusto" + } + ], + "pasos": [ + "Pelar y cortar las patatas en rodajas finas.", + "Picar la cebolla en dados pequeños.", + "Calentar el aceite de oliva en una sartén a fuego medio.", + "Freír las patatas hasta que estén doradas por ambos lados.", + "Escurrir las patatas y reservarlas.", + "Pochar la cebolla en el mismo aceite hasta que esté transparente.", + "Añadir las patatas a la sartén y mezclar con la cebolla.", + "Batir los huevos con un poco de sal y añadirlos a la sartén.", + "Cocinar la tortilla a fuego lento hasta que esté cuajada por ambos lados.", + "Dar la vuelta a la tortilla con la ayuda de un plato y cocinar por el otro lado.", + "Servir la tortilla caliente o templada." + ], + "imagenes": [ + "https://imagen1.jpg", + "https://imagen2.jpg", + "https://imagen3.jpg" + ], + "notas": [ + "Se puede añadir otras verduras a la tortilla, como pimientos o calabacín.", + "También se puede añadir chorizo o jamón a la tortilla.", + "Para una tortilla más cuajada, se puede cocinar durante más tiempo a fuego lento." + ] + }, + { + "titulo": "Paella valenciana", + "tiempo_preparacion": "60 minutos", + "personas": 6, + "etiquetas": ["Arroz", "Mariscos", "Tradicional"], + "categorias": ["Platos principales", "Arroces"], + "coleccion": "Recetas regionales españolas", + "plato": "Principal", + "ingredientes": [ + { + "nombre": "Arroz bomba", + "cantidad": 500, + "unidad": "gramos" + }, + { + "nombre": "Agua", + "cantidad": 1, + "unidad": "litro" + }, + { + "nombre": "Aceite de oliva virgen extra", + "cantidad": 4, + "unidad": "cucharadas soperas" + }, + { + "nombre": "Cebolla", + "cantidad": 1, + "unidad": "unidad" + }, + { + "nombre": "Pimiento rojo", + "cantidad": 1, + "unidad": "unidad" + }, + { + "nombre": "Tomate triturado", + "cantidad": 200, + "unidad": "gramos" + }, + { + "nombre": "Azafrán", + "cantidad": "Unas hebras" + }, + { + "nombre": "Sal", + "cantidad": "Al gusto" + }, + { + "nombre": "Garrofón", + "cantidad": 200, + "unidad": "gramos" + }, + { + "nombre": "Judías verdes", + "cantidad": 100, + "unidad": "gramos" + }, + { + "nombre": " Pollo", + "cantidad": 400, + "unidad": "gramos" + }, + { + "nombre": "Conejo", + "cantidad": 400, + "unidad": "gramos" + }, + { + "nombre": "Gambas", + "cantidad": 200, + "unidad": "gramos" + }, + { + "nombre": "Mejillones", + "cantidad": 200, + "unidad": "gramos" + }, + { + "nombre": "Almejas", + "cantidad": 200, + "unidad": "gramos" + }, + { + "nombre": "Limón", + "cantidad": 1, + "unidad": "unidad" + } + ], + "pasos": [ + "Calentar el aceite de oliva en una paella a fuego medio.", + "Añadir la cebolla picada y cocinar hasta que esté transparente.", + "Agregar el pimiento rojo picado y cocinar hasta que esté blando.", + "Incorporar el tomate triturado y cocinar durante unos minutos.", + "Añadir el azafrán y la sal al gusto.", + "Agregar el arroz y remover para que se impregne de los sabores.", + "Verter el agua y llevar a ebullición.", + "Cocinar a fuego lento durante 18 minutos.", + "Agregar el garrofón y las judías verdes y cocinar durante 10 minutos más.", + "Incorporar el pollo y el conejo troceados y cocinar durante 10 minutos más.", + "Añadir las gambas, los mejillones y las almejas y cocinar hasta que se abran.", + "Dejar reposar la paella durante 5 minutos antes de servir.", + "Decorar con rodajas de limón." + ], + "imagenes": [ + "https://imagen1.jpg", + "https://imagen2.jpg", + "https://imagen3.jpg" + ], + "notas": + [ + "La cantidad de agua puede variar según el tipo de arroz que se utilice."] + }, + { + "titulo": "Gazpacho andaluz", + "tiempo_preparacion": "30 minutos", + "personas": 4, + "etiquetas": ["Sopa fría", "Refrescante", "Verduras"], + "categorias": "Sopas y cremas", + "coleccion": "Recetas tradicionales españolas", + "plato": "Entrante", + "ingredientes": [ + { + "nombre": "Tomates maduros", + "cantidad": 1, + "unidad": "kilo" + }, + { + "nombre": "Pepino", + "cantidad": 1, + "unidad": "unidad" + }, + { + "nombre": "Pimiento verde", + "cantidad": 1, + "unidad": "unidad" + }, + { + "nombre": "Cebolla", + "cantidad": 1/4, + "unidad": "unidad" + }, + { + "nombre": "Dientes de ajo", + "cantidad": 2, + "unidad": "unidades" + }, + { + "nombre": "Vinagre de Jerez", + "cantidad": 2, + "unidad": "cucharadas soperas" + }, + { + "nombre": "Aceite de oliva virgen extra", + "cantidad": 4, + "unidad": "cucharadas soperas" + }, + { + "nombre": "Sal", + "cantidad": "Al gusto" + }, + { + "nombre": "Huevo duro", + "cantidad": 1, + "unidad": "unidad" (opcional) + }, + { + "nombre": "Pan duro", + "cantidad": 100, + "unidad": "gramos" (opcional) + } + ], + "pasos": [ + "Lavar y trocear los tomates, el pepino, el pimiento verde y la cebolla.", + "Pelar los dientes de ajo.", + "Poner todos los ingredientes en un vaso de batidora y triturar hasta obtener una crema fina.", + "Añadir el vinagre, el aceite de oliva y la sal al gusto y volver a batir.", + "Colar el gazpacho para eliminar las pieles y las semillas.", + "Refrigerar el gazpacho durante al menos 2 horas antes de servir.", + "Servir el gazpacho con picatostes, huevo duro picado y jamón serrano picado (opcional)." + ], + "imagenes": [ + "https://imagen1.jpg", + "https://imagen2.jpg", + "https://imagen3.jpg" + ], + "notas": + [ + "Se puede añadir un poco de agua al gazpacho si está demasiado espeso.", + "El gazpacho se puede conservar en la nevera durante 2-3 días." + ] + } +] +} \ No newline at end of file diff --git a/frontend/src/presentation/components/AddButton/AddButton.jsx b/frontend/src/presentation/components/AddButton/AddButton.jsx index 518bcba..8431580 100644 --- a/frontend/src/presentation/components/AddButton/AddButton.jsx +++ b/frontend/src/presentation/components/AddButton/AddButton.jsx @@ -1,11 +1,13 @@ import "./AddButton.css"; import logoButton from "../../assets/botoncazo.png"; +import { Link } from 'react-router-dom'; + export const AddButton = () => { return ( -
- +
+ Añadir receta -
+ ); }; diff --git a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css index ec317e8..0e7ba68 100644 --- a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css +++ b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.css @@ -2,7 +2,7 @@ width: 35rem; height: 20rem; background-color: var(--green); - margin-top: 10rem; + display: flex; gap: 3rem; justify-content: center; diff --git a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx index d938280..7eefb72 100644 --- a/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx +++ b/frontend/src/presentation/components/CardLastSeen/CardLastSeen.jsx @@ -1,11 +1,12 @@ import "./CardLastSeen.css"; + import { Link } from 'react-router-dom'; export const CardLastSeen = () => { return ( <>
- -

Titulo Receta

+ +

Titulo Receta

diff --git a/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.css b/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.css new file mode 100644 index 0000000..6019577 --- /dev/null +++ b/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.css @@ -0,0 +1,9 @@ +.recipeLastSeenConteiner { + display: grid; + + grid-template-rows: repeat(3, 1fr); + grid-column-gap: 4rem; + grid-row-gap: 4rem; + justify-content: center; + margin-top: 7rem; +} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.jsx b/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.jsx new file mode 100644 index 0000000..d88c168 --- /dev/null +++ b/frontend/src/presentation/components/CardLastSeenConteiner/CardLastSeenConteiner.jsx @@ -0,0 +1,12 @@ +import { CardLastSeen } from "../CardLastSeen/CardLastSeen"; +import "./CardLastSeenConteiner.css"; + +export const CardLastSeenConteiner = () => { + return ( +
+ + + +
+ ) +} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.css b/frontend/src/presentation/components/CardRecipe/CardRecipe.css index 56c7d70..ee54f44 100644 --- a/frontend/src/presentation/components/CardRecipe/CardRecipe.css +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.css @@ -4,7 +4,7 @@ height: 20rem; background-color: var(--dark-green); border-radius: 30px; padding-top: 3rem; -margin-top: 15rem; + } .titulo { @@ -25,7 +25,9 @@ h2 { height: 8rem; background-color: aqua; } - +.recipePhoto { + width: 15rem; + height: 8rem; +} -} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx index 4ae222d..6238a8d 100644 --- a/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx +++ b/frontend/src/presentation/components/CardRecipe/CardRecipe.jsx @@ -1,14 +1,17 @@ import "./CardRecipe.css"; +import { Link } from 'react-router-dom'; + export const CardRecipe = () => { return (
-

Titulo receta

+

Titulo receta

- +
); }; + diff --git a/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.css b/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.css new file mode 100644 index 0000000..e05f5b5 --- /dev/null +++ b/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.css @@ -0,0 +1,9 @@ +.recipeConteiner { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-template-rows: repeat(4, 1fr); + grid-column-gap: 4rem; + grid-row-gap: 4rem; + justify-content: center; + margin-top: 7rem; +} \ No newline at end of file diff --git a/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.jsx b/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.jsx new file mode 100644 index 0000000..6621be1 --- /dev/null +++ b/frontend/src/presentation/components/CardRecipeConteiner/CardRecipeConteiner.jsx @@ -0,0 +1,18 @@ +import "./CardRecipeConteiner.css"; +import { CardRecipe } from "../CardRecipe/CardRecipe"; + +export const CardRecipeConteiner = () => { + return ( +
+ + + + + + + + + +
+ ) +} \ No newline at end of file diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css index acab8b0..b356055 100644 --- a/frontend/src/presentation/components/Header/Header.css +++ b/frontend/src/presentation/components/Header/Header.css @@ -4,7 +4,7 @@ header { display: flex; flex-direction: column; background-color: var(--light-pink); - width: 25rem; + width: 20rem; height: 75rem; border-radius: 25px; } diff --git a/frontend/src/presentation/components/Header/Header.jsx b/frontend/src/presentation/components/Header/Header.jsx index 57199ec..85c9fd5 100644 --- a/frontend/src/presentation/components/Header/Header.jsx +++ b/frontend/src/presentation/components/Header/Header.jsx @@ -1,13 +1,14 @@ import './Header.css'; import logo from '../../assets/logo.png'; +import { Link } from 'react-router-dom'; export const Header = () => { return (
- Los secretos de la abuela + Los secretos de la abuela
    -
  • Home
  • +
  • Home
diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 4e1af1e..23525e2 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -1,19 +1,19 @@ import { Outlet } from "react-router-dom"; import { Header } from "../components/Header/Header"; import "./HomePage.css"; -import { CardLastSeen } from "../components/CardLastSeen/CardLastSeen"; -import { CardRecipe } from "../components/CardRecipe/CardRecipe"; import { AddButton } from "../components/AddButton/AddButton"; +import { CardRecipeConteiner } from "../components/CardRecipeConteiner/CardRecipeConteiner"; +import { CardLastSeenConteiner } from "../components/CardLastSeenConteiner/CardLastSeenConteiner"; + export const HomePage = () => { return ( <>
- - - + + From a9c8bf6db2bdd0e0e1a757bf5f68955b7894a3fb Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Thu, 28 Mar 2024 11:26:21 +0100 Subject: [PATCH 15/49] AddModal --- frontend/src/App.css | 8 +---- .../components/AddButton/AddButton.css | 4 +++ .../components/AddButton/AddButton.jsx | 5 ++- .../components/AddModal/AddModal.css | 34 +++++++++++++++++++ .../components/AddModal/AddModal.jsx | 16 +++++++++ frontend/src/presentation/pages/HomePage.jsx | 3 ++ 6 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 frontend/src/presentation/components/AddModal/AddModal.css create mode 100644 frontend/src/presentation/components/AddModal/AddModal.jsx diff --git a/frontend/src/App.css b/frontend/src/App.css index 54a5dbd..991aa1a 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,7 +1 @@ - {display: grid; - grid-template-columns: repeat(3, 1fr); - grid-template-rows: repeat(4, 1fr); - grid-column-gap: 4px; - grid-row-gap: 4px; - justify-content: center; - } \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/presentation/components/AddButton/AddButton.css b/frontend/src/presentation/components/AddButton/AddButton.css index 6a9a575..9875540 100644 --- a/frontend/src/presentation/components/AddButton/AddButton.css +++ b/frontend/src/presentation/components/AddButton/AddButton.css @@ -5,6 +5,7 @@ display: flex; justify-content:end; align-items:end; + } .addButton { @@ -13,3 +14,6 @@ margin-top: 2rem; margin-right: 2rem; } +.btt-addRecipe{ + background-color: transparent; +} diff --git a/frontend/src/presentation/components/AddButton/AddButton.jsx b/frontend/src/presentation/components/AddButton/AddButton.jsx index 8431580..b26a238 100644 --- a/frontend/src/presentation/components/AddButton/AddButton.jsx +++ b/frontend/src/presentation/components/AddButton/AddButton.jsx @@ -1,13 +1,12 @@ import "./AddButton.css"; import logoButton from "../../assets/botoncazo.png"; -import { Link } from 'react-router-dom'; + export const AddButton = () => { return (
- Añadir receta - +
); }; diff --git a/frontend/src/presentation/components/AddModal/AddModal.css b/frontend/src/presentation/components/AddModal/AddModal.css new file mode 100644 index 0000000..8efcb97 --- /dev/null +++ b/frontend/src/presentation/components/AddModal/AddModal.css @@ -0,0 +1,34 @@ +.modal-conteiner { + position: fixed; + background-color: rgb(253,232, 233, 0.5); + width: 100%; + height: 100vh; + top: 0; + left: 0; + display: grid; + place-items: center; +} +.modal-boby { + background-color: white; + width:25rem ; + min-width: 10rem; + border-radius: 2rem; + height: 30rem; + position: relative; + padding: 2rem 3rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + +} + +.close-modal { + width: 5rem; + height: 2rem; + border-radius: 2rem; + position: absolute; + bottom: 0; + margin-bottom: 2rem; + +} \ No newline at end of file diff --git a/frontend/src/presentation/components/AddModal/AddModal.jsx b/frontend/src/presentation/components/AddModal/AddModal.jsx new file mode 100644 index 0000000..9e4c557 --- /dev/null +++ b/frontend/src/presentation/components/AddModal/AddModal.jsx @@ -0,0 +1,16 @@ +import { Link } from "react-router-dom" +import "./AddModal.css" + +export const AddModal = () => { + return ( +<> +
+
+

Añadir receta propia

+ + +
+
+ +) +} \ No newline at end of file diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 23525e2..42b8738 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -4,6 +4,7 @@ import "./HomePage.css"; import { AddButton } from "../components/AddButton/AddButton"; import { CardRecipeConteiner } from "../components/CardRecipeConteiner/CardRecipeConteiner"; import { CardLastSeenConteiner } from "../components/CardLastSeenConteiner/CardLastSeenConteiner"; +import { AddModal } from "../components/AddModal/AddModal"; export const HomePage = () => { @@ -12,8 +13,10 @@ export const HomePage = () => {
+ + From 1fe84509cb939b8ba087a313e96c7e0a59f48cfd Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Thu, 28 Mar 2024 23:57:43 +0100 Subject: [PATCH 16/49] AddModal funcion --- .../presentation/components/AddButton/AddButton.jsx | 11 +++++++++-- .../src/presentation/components/AddModal/AddModal.css | 1 - .../src/presentation/components/AddModal/AddModal.jsx | 8 +++++--- frontend/src/presentation/pages/HomePage.jsx | 7 +++---- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/frontend/src/presentation/components/AddButton/AddButton.jsx b/frontend/src/presentation/components/AddButton/AddButton.jsx index b26a238..1ade327 100644 --- a/frontend/src/presentation/components/AddButton/AddButton.jsx +++ b/frontend/src/presentation/components/AddButton/AddButton.jsx @@ -1,12 +1,19 @@ import "./AddButton.css"; import logoButton from "../../assets/botoncazo.png"; +import { AddModal } from "../AddModal/AddModal"; +import { useState } from "react"; export const AddButton = () => { + + const [mostrar, setMostrar] = useState (false); + return (
- + + setMostrar(false)} /> +
); -}; +}; diff --git a/frontend/src/presentation/components/AddModal/AddModal.css b/frontend/src/presentation/components/AddModal/AddModal.css index 8efcb97..68776b6 100644 --- a/frontend/src/presentation/components/AddModal/AddModal.css +++ b/frontend/src/presentation/components/AddModal/AddModal.css @@ -5,7 +5,6 @@ height: 100vh; top: 0; left: 0; - display: grid; place-items: center; } .modal-boby { diff --git a/frontend/src/presentation/components/AddModal/AddModal.jsx b/frontend/src/presentation/components/AddModal/AddModal.jsx index 9e4c557..53078f1 100644 --- a/frontend/src/presentation/components/AddModal/AddModal.jsx +++ b/frontend/src/presentation/components/AddModal/AddModal.jsx @@ -1,13 +1,15 @@ import { Link } from "react-router-dom" import "./AddModal.css" -export const AddModal = () => { + +export const AddModal = ({ isOpen, onClose }) => { + return ( <> -
+

Añadir receta propia

- +
diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index 42b8738..c23f973 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -4,19 +4,18 @@ import "./HomePage.css"; import { AddButton } from "../components/AddButton/AddButton"; import { CardRecipeConteiner } from "../components/CardRecipeConteiner/CardRecipeConteiner"; import { CardLastSeenConteiner } from "../components/CardLastSeenConteiner/CardLastSeenConteiner"; -import { AddModal } from "../components/AddModal/AddModal"; - export const HomePage = () => { + + return ( <>
- - + From db2faee566b453fad008230e74d0222fcf52f425 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Fri, 29 Mar 2024 13:40:21 +0100 Subject: [PATCH 17/49] form --- frontend/src/midleware/router/AppRouter.jsx | 3 + .../components/AddButton/AddButton.css | 1 + .../components/AddModal/AddModal.jsx | 2 +- .../components/NewRecipe/NewRecipe.css | 22 ++++++++ .../components/NewRecipe/NewRecipe.jsx | 55 +++++++++++++++++++ frontend/src/presentation/pages/HomePage.jsx | 1 - .../src/presentation/pages/NewRecipePage.css | 0 .../src/presentation/pages/NewRecipePage.jsx | 20 +++++++ 8 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 frontend/src/presentation/components/NewRecipe/NewRecipe.css create mode 100644 frontend/src/presentation/components/NewRecipe/NewRecipe.jsx create mode 100644 frontend/src/presentation/pages/NewRecipePage.css create mode 100644 frontend/src/presentation/pages/NewRecipePage.jsx diff --git a/frontend/src/midleware/router/AppRouter.jsx b/frontend/src/midleware/router/AppRouter.jsx index 1eb4556..54a658f 100644 --- a/frontend/src/midleware/router/AppRouter.jsx +++ b/frontend/src/midleware/router/AppRouter.jsx @@ -1,5 +1,6 @@ import { BrowserRouter, Route, Routes } from "react-router-dom"; import { HomePage } from "../../presentation/pages/HomePage"; +import { NewRecipePage } from "../../presentation/pages/NewRecipePage"; @@ -10,6 +11,8 @@ export const AppRouter = () => { }> + }> + ); diff --git a/frontend/src/presentation/components/AddButton/AddButton.css b/frontend/src/presentation/components/AddButton/AddButton.css index 9875540..c06bb0b 100644 --- a/frontend/src/presentation/components/AddButton/AddButton.css +++ b/frontend/src/presentation/components/AddButton/AddButton.css @@ -13,6 +13,7 @@ height: 4rem; margin-top: 2rem; margin-right: 2rem; + cursor: pointer; } .btt-addRecipe{ background-color: transparent; diff --git a/frontend/src/presentation/components/AddModal/AddModal.jsx b/frontend/src/presentation/components/AddModal/AddModal.jsx index 53078f1..73b14c0 100644 --- a/frontend/src/presentation/components/AddModal/AddModal.jsx +++ b/frontend/src/presentation/components/AddModal/AddModal.jsx @@ -8,7 +8,7 @@ export const AddModal = ({ isOpen, onClose }) => { <>
-

Añadir receta propia

+

Añadir receta propia

diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.css b/frontend/src/presentation/components/NewRecipe/NewRecipe.css new file mode 100644 index 0000000..6ff4124 --- /dev/null +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.css @@ -0,0 +1,22 @@ +.newrecipe-conteiner { + background-color:#E3BAC6 ; + width:95rem; + height: 75rem; + border-radius: 2rem; + margin-left: 2rem; + margin-top: 2rem; + +} +form { + margin: 2rem; + height: 5rem; +} +label { + + display: grid; + +} + + + + diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx new file mode 100644 index 0000000..628b428 --- /dev/null +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -0,0 +1,55 @@ +import "./NewRecipe.css" + +export const NewRecipe = () => { + return ( + +
+
+ {/* titulo */} + + + + {/* tiempo */} + + + + {/* Raciones */} + + + + {/* etiquetas */} + + + + {/* plato */} + + + + {/* coleccion */} + + + + {/* categoria */} + + + + {/* ingredientes */} + + + + {/* instruciones */} + + + + {/* imagenes */} + + + + {/* notas */} + + + +
+
+); +}; diff --git a/frontend/src/presentation/pages/HomePage.jsx b/frontend/src/presentation/pages/HomePage.jsx index c23f973..9d1fcfd 100644 --- a/frontend/src/presentation/pages/HomePage.jsx +++ b/frontend/src/presentation/pages/HomePage.jsx @@ -15,7 +15,6 @@ export const HomePage = () => { - diff --git a/frontend/src/presentation/pages/NewRecipePage.css b/frontend/src/presentation/pages/NewRecipePage.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/presentation/pages/NewRecipePage.jsx b/frontend/src/presentation/pages/NewRecipePage.jsx new file mode 100644 index 0000000..a3d93a2 --- /dev/null +++ b/frontend/src/presentation/pages/NewRecipePage.jsx @@ -0,0 +1,20 @@ +import { Outlet } from "react-router-dom"; +import { Header } from "../components/Header/Header"; +import "./NewRecipePage.css"; +import { AddButton } from "../components/AddButton/AddButton"; +import { NewRecipe } from "../components/NewRecipe/NewRecipe"; + +export const NewRecipePage = () => { + + + return ( + <> + +
+ + + + + + ); +}; From 2466403e4fd3e602dfd80c7cb02ba59a2cb2618b Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Fri, 29 Mar 2024 17:29:07 +0100 Subject: [PATCH 18/49] format form --- .../components/NewRecipe/NewRecipe.css | 102 +++++++++++++++--- .../components/NewRecipe/NewRecipe.jsx | 76 +++++++------ 2 files changed, 133 insertions(+), 45 deletions(-) diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.css b/frontend/src/presentation/components/NewRecipe/NewRecipe.css index 6ff4124..1b116da 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.css +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.css @@ -1,22 +1,98 @@ .newrecipe-conteiner { - background-color:#E3BAC6 ; - width:95rem; - height: 75rem; - border-radius: 2rem; - margin-left: 2rem; - margin-top: 2rem; - + background-color: #e3bac6; + width: 95rem; + height: 75rem; + border-radius: 2rem; + margin-left: rem; + margin-top: 2rem; + } form { - margin: 2rem; - height: 5rem; + display: grid; + margin: 4rem; + grid-template-columns: repeat(4, 1fr) 1.5fr 0.5fr repeat(2, 1fr); + grid-template-rows: repeat(8, 1fr); + grid-row-gap: 1rem; } label { - - display: grid; - + display: grid; + color: white; + font-size: 2.5rem; } +input { + height: 5rem; + border-radius: 1rem; + margin-top: 1rem; + font-size:auto; +} +.title-conteiner { + grid-area: 1 / 1 / 2 / 5; +} +.time-conteiner { + display: flex; + align-items: center; + gap: 1rem; + grid-area: 1 / 5 / 2 / 7; + margin-top: 2rem; +} +.servings-conteiner { + grid-area: 1 / 7 / 2 / 9; + display: flex; + align-items: center; + gap: 1rem; + margin-top: 2rem; +} +.tags-conteiner { + grid-area: 2 / 1 / 3 / 4; +} +.dishtype-conteiner { + grid-area: 3 / 1 / 4 / 4; +} +.collection-conteiner { + grid-area: 4 / 1 / 5 / 4; +} +.category-conteiner { + grid-area: 5 / 1 / 6 / 4; +} +.ingredients-conteiner { + grid-area: 2 / 4 / 6 / 6; +} +.instructions-conteiner { + grid-area: 2 / 6 / 6 / 9; +} +.images-conteiner { + grid-area: 6/ 1 / 8 / 5; +} +.notes-conteiner { + grid-area: 6 / 5 / 8 / 9; +} +.form-title { + width: 43rem; +} +.form-category, +.form-collection, +.form-tags, +.form-dishtype { + width: 30rem; +} +.form-notes, +.form-images { + width: 43rem; + height: 13rem; +} +.form-ingredients, +.form-isntruccion { + width: 26rem; + height: 34rem; +} +.save-recipe { + width: 12rem; + height: 4rem; + color: white; + font-size: 2.5rem; + border-radius: 2rem; + grid-area: 8 / 8 / 9 / 9; - +} diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index 628b428..cefc035 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -1,55 +1,67 @@ -import "./NewRecipe.css" +import "./NewRecipe.css"; export const NewRecipe = () => { return ( - -
-
- {/* titulo */} - - - +
+ +
+ {/* titulo */} + + +
+
{/* tiempo */} - - + +
+
{/* Raciones */} - - + +
+
{/* etiquetas */} - - + +
+
{/* plato */} - - + +
+
{/* coleccion */} - - + +
+
{/* categoria */} - - + +
+
{/* ingredientes */} - - + +
+
{/* instruciones */} - - + +
+
{/* imagenes */} - - + +
+
{/* notas */} - - - - -
-); + + +
+ + + + + ); }; From 492ca6faa38e30a2872c125c5769a37524bfe143 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Sat, 30 Mar 2024 16:55:24 +0100 Subject: [PATCH 19/49] form new recite --- frontend/src/midleware/router/AppRouter.jsx | 3 +- .../components/NewRecipe/NewRecipe.css | 2 +- .../components/NewRecipe/NewRecipe.jsx | 31 +++++++++++-------- .../src/presentation/pages/NewRecipePage.css | 7 +++++ .../src/presentation/pages/NewRecipePage.jsx | 10 +++--- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/frontend/src/midleware/router/AppRouter.jsx b/frontend/src/midleware/router/AppRouter.jsx index 54a658f..ba4b620 100644 --- a/frontend/src/midleware/router/AppRouter.jsx +++ b/frontend/src/midleware/router/AppRouter.jsx @@ -9,8 +9,7 @@ export const AppRouter = () => { return ( - }> - + }> }> diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.css b/frontend/src/presentation/components/NewRecipe/NewRecipe.css index 1b116da..4e1f515 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.css +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.css @@ -9,7 +9,7 @@ } form { display: grid; - margin: 4rem; + margin: 3rem; grid-template-columns: repeat(4, 1fr) 1.5fr 0.5fr repeat(2, 1fr); grid-template-rows: repeat(8, 1fr); grid-row-gap: 1rem; diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index cefc035..8c56ce0 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -1,65 +1,70 @@ import "./NewRecipe.css"; +import {useForm} from "react-hook-form"; export const NewRecipe = () => { +const { register, handleSubmit } = useForm () + + return (
-
+ {console.log (data)})}>
{/* titulo */} - +
{/* tiempo */} - +
{/* Raciones */} - +
{/* etiquetas */} - +
{/* plato */} - +
{/* coleccion */} - +
{/* categoria */} - +
{/* ingredientes */} - +
{/* instruciones */} - +
{/* imagenes */} - +
{/* notas */} - +
- + +
diff --git a/frontend/src/presentation/pages/NewRecipePage.css b/frontend/src/presentation/pages/NewRecipePage.css index e69de29..24d21e9 100644 --- a/frontend/src/presentation/pages/NewRecipePage.css +++ b/frontend/src/presentation/pages/NewRecipePage.css @@ -0,0 +1,7 @@ + .newRecipe-conteiner{ + display: flex; + + gap: 3rem; + +} + diff --git a/frontend/src/presentation/pages/NewRecipePage.jsx b/frontend/src/presentation/pages/NewRecipePage.jsx index a3d93a2..0b8f90b 100644 --- a/frontend/src/presentation/pages/NewRecipePage.jsx +++ b/frontend/src/presentation/pages/NewRecipePage.jsx @@ -5,16 +5,14 @@ import { AddButton } from "../components/AddButton/AddButton"; import { NewRecipe } from "../components/NewRecipe/NewRecipe"; export const NewRecipePage = () => { - - return ( - <> - + +
- - +
+ ); }; From c72f5aca8d9d0f13aa2cd9bab710a35361a49aca Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Sat, 30 Mar 2024 18:11:31 +0100 Subject: [PATCH 20/49] SavedModal --- .../components/NewRecipe/NewRecipe.jsx | 3 +- .../components/SavedModal/SavedModal.css | 38 +++++++++++++++++++ .../components/SavedModal/SavedModal.jsx | 13 +++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 frontend/src/presentation/components/SavedModal/SavedModal.css create mode 100644 frontend/src/presentation/components/SavedModal/SavedModal.jsx diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index 8c56ce0..2853dd6 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -1,3 +1,4 @@ +import { SavedModal } from "../SavedModal/SavedModal"; import "./NewRecipe.css"; import {useForm} from "react-hook-form"; @@ -64,7 +65,7 @@ const { register, handleSubmit } = useForm ()
- + diff --git a/frontend/src/presentation/components/SavedModal/SavedModal.css b/frontend/src/presentation/components/SavedModal/SavedModal.css new file mode 100644 index 0000000..3d9a4fb --- /dev/null +++ b/frontend/src/presentation/components/SavedModal/SavedModal.css @@ -0,0 +1,38 @@ +.savedmodal-conteiner { + position: fixed; + background-color:transparent; + width: 100%; + height: 100vh; + top: 0; + left: 0; + place-items: center; +} +.savedmodal-body { + background-color: rgb(253, 232, 233); + width: 40rem; + height: 30rem; + border-radius: 2rem; + position: relative; + top: 30%; + left: 40%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap:3rem + +} +.sms { +font-size: 2.5rem; + +} +.savedclose-modal { + width: 5rem; + height: 2rem; + border-radius: 2rem; + position: absolute; /* Position the button relative to its parent */ + top: 1rem; /* Adjust for spacing as needed */ + right: 1rem; /* Adjust for spacing as needed */ + width: 5rem; + height: 2rem; +} \ No newline at end of file diff --git a/frontend/src/presentation/components/SavedModal/SavedModal.jsx b/frontend/src/presentation/components/SavedModal/SavedModal.jsx new file mode 100644 index 0000000..0d47906 --- /dev/null +++ b/frontend/src/presentation/components/SavedModal/SavedModal.jsx @@ -0,0 +1,13 @@ +import "./SavedModal.css"; + +export const SavedModal = () => { + return ( +
+
+ +

Receta guardada correctamente

+ +
+
+ ); +}; From 34da3798da00d0ae6e89cdc974cc7379eaa60964 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Sat, 30 Mar 2024 20:12:51 +0100 Subject: [PATCH 21/49] Saved Modal funcional --- frontend/index.html | 28 +++++++++++-------- .../components/NewRecipe/NewRecipe.jsx | 17 +++++++---- .../components/SavedModal/SavedModal.css | 9 ++++-- .../components/SavedModal/SavedModal.jsx | 5 ++-- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 88858f7..a0a62cb 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,13 +1,19 @@ - - - - - Los secretos de la abuela - - -
- - - + + + + + + + + + Los secretos de la abuela + + + +
+ + + + \ No newline at end of file diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index 2853dd6..ca5144d 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -1,14 +1,22 @@ +import { useState } from "react"; import { SavedModal } from "../SavedModal/SavedModal"; import "./NewRecipe.css"; -import {useForm} from "react-hook-form"; +import { useForm } from "react-hook-form"; export const NewRecipe = () => { -const { register, handleSubmit } = useForm () + const { register, handleSubmit } = useForm(); + const [isModalOpen, setIsModalOpen] = useState(false); + const handleCloseModal = () => setIsModalOpen(false); + + const onSubmit = (data) => { + console.log(data); + setIsModalOpen(true); + }; return (
-
{console.log (data)})}> +
{/* titulo */} @@ -65,9 +73,8 @@ const { register, handleSubmit } = useForm ()
- - + {isModalOpen && }
); }; diff --git a/frontend/src/presentation/components/SavedModal/SavedModal.css b/frontend/src/presentation/components/SavedModal/SavedModal.css index 3d9a4fb..8ec1d1c 100644 --- a/frontend/src/presentation/components/SavedModal/SavedModal.css +++ b/frontend/src/presentation/components/SavedModal/SavedModal.css @@ -23,16 +23,19 @@ } .sms { -font-size: 2.5rem; +font-size: 4rem; +font-family: "Italianno", cursive; +color:#E3BAC6; } .savedclose-modal { - width: 5rem; - height: 2rem; + width: 3rem; + height: 1rem; border-radius: 2rem; position: absolute; /* Position the button relative to its parent */ top: 1rem; /* Adjust for spacing as needed */ right: 1rem; /* Adjust for spacing as needed */ width: 5rem; height: 2rem; + background-color: #E3BAC6; } \ No newline at end of file diff --git a/frontend/src/presentation/components/SavedModal/SavedModal.jsx b/frontend/src/presentation/components/SavedModal/SavedModal.jsx index 0d47906..78787de 100644 --- a/frontend/src/presentation/components/SavedModal/SavedModal.jsx +++ b/frontend/src/presentation/components/SavedModal/SavedModal.jsx @@ -1,12 +1,11 @@ import "./SavedModal.css"; -export const SavedModal = () => { +export const SavedModal = ({ isOpen, onClose }) => { return (
- +

Receta guardada correctamente

-
); From 3b2b34a6b6e2e4936dc47085f044b85599e4700e Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Mon, 1 Apr 2024 17:15:32 +0200 Subject: [PATCH 22/49] campos requeridos --- frontend/src/index.css | 1 - .../presentation/components/Header/Header.css | 37 ++++++++++--------- .../components/NewRecipe/NewRecipe.css | 16 +++++--- .../components/NewRecipe/NewRecipe.jsx | 20 +++++++--- 4 files changed, 45 insertions(+), 29 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index 93ee963..08545c1 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -21,7 +21,6 @@ body { background-color: var(--background-color); background-size: cover; - height: 100vh; margin: 0; padding: 0; } diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css index b356055..ca9b021 100644 --- a/frontend/src/presentation/components/Header/Header.css +++ b/frontend/src/presentation/components/Header/Header.css @@ -1,26 +1,27 @@ header { - margin-left: 2rem; - margin-top: 2rem; - display: flex; - flex-direction: column; - background-color: var(--light-pink); - width: 20rem; - height: 75rem; - border-radius: 25px; + margin-left: 2rem; + margin-top: 2rem; + margin-bottom: 1rem; + display: flex; + flex-direction: column; + background-color: var(--light-pink); + width: 20rem; + height: 100vh; + border-radius: 2rem; } .logo { - width: 15rem; - margin-left: 1.5rem; - margin-top: 1.5rem; + width: 15rem; + margin-left: 1.5rem; + margin-top: 1.5rem; } - + ul { - justify-content: center; + justify-content: center; } li { -font-size: 3rem; -color:var(--dark-pink); -padding-top: 20rem; -text-align: center; -} \ No newline at end of file + font-size: 3rem; + color: var(--dark-pink); + padding-top: 20rem; + text-align: center; +} diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.css b/frontend/src/presentation/components/NewRecipe/NewRecipe.css index 4e1f515..45440e6 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.css +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.css @@ -1,12 +1,14 @@ .newrecipe-conteiner { background-color: #e3bac6; width: 95rem; - height: 75rem; + height: 100%; border-radius: 2rem; margin-left: rem; margin-top: 2rem; + margin-bottom: 2rem; } + form { display: grid; margin: 3rem; @@ -23,7 +25,7 @@ input { height: 5rem; border-radius: 1rem; margin-top: 1rem; - font-size:auto; + font-size:2.5rem; } .title-conteiner { grid-area: 1 / 1 / 2 / 5; @@ -69,6 +71,9 @@ input { .form-title { width: 43rem; } +.form-time, .form-servings { + width: 12rem; +} .form-category, .form-collection, .form-tags, @@ -92,7 +97,8 @@ input { font-size: 2.5rem; border-radius: 2rem; grid-area: 8 / 8 / 9 / 9; - - - } +span { + color:#4e015d; + font-size: 1.25rem; +} \ No newline at end of file diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index ca5144d..2402add 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -4,7 +4,7 @@ import "./NewRecipe.css"; import { useForm } from "react-hook-form"; export const NewRecipe = () => { - const { register, handleSubmit } = useForm(); + const { register, handleSubmit,formState: {errors } } = useForm(); const [isModalOpen, setIsModalOpen] = useState(false); const handleCloseModal = () => setIsModalOpen(false); @@ -20,12 +20,18 @@ export const NewRecipe = () => {
{/* titulo */} - + + { errors.Titulo && Titulo requerido}
{/* tiempo */} - + + { errors.Tiempo && Tiempo requerido}
{/* Raciones */} @@ -55,12 +61,16 @@ export const NewRecipe = () => {
{/* ingredientes */} - + + { errors.Ingredientes && Ingredientes requerido}
{/* instruciones */} - + + { errors.Pasos && Pasos requerido}
{/* imagenes */} From 95f8abd6e8cfe2e192556ed517776fb6c68a8719 Mon Sep 17 00:00:00 2001 From: mfg1985 Date: Tue, 2 Apr 2024 11:58:04 +0200 Subject: [PATCH 23/49] Ajustes texto textarea --- .../presentation/components/Header/Header.css | 6 +- .../components/NewRecipe/NewRecipe.css | 15 +- .../components/NewRecipe/NewRecipe.jsx | 131 ++++++++++++------ 3 files changed, 101 insertions(+), 51 deletions(-) diff --git a/frontend/src/presentation/components/Header/Header.css b/frontend/src/presentation/components/Header/Header.css index ca9b021..73c2fe9 100644 --- a/frontend/src/presentation/components/Header/Header.css +++ b/frontend/src/presentation/components/Header/Header.css @@ -1,12 +1,12 @@ header { margin-left: 2rem; margin-top: 2rem; - margin-bottom: 1rem; + margin-bottom: 2rem; display: flex; flex-direction: column; background-color: var(--light-pink); - width: 20rem; - height: 100vh; + width: 15vw; + height: 100%vh; border-radius: 2rem; } diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.css b/frontend/src/presentation/components/NewRecipe/NewRecipe.css index 45440e6..1bf44dd 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.css +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.css @@ -27,6 +27,10 @@ input { margin-top: 1rem; font-size:2.5rem; } +textarea { + border-radius: 2rem; + margin-top: 1rem; +} .title-conteiner { grid-area: 1 / 1 / 2 / 5; } @@ -80,15 +84,20 @@ input { .form-dishtype { width: 30rem; } -.form-notes, -.form-images { - width: 43rem; +.form-notes + { + width: 46rem; height: 13rem; + text-align: center; +} +.form-images { + font-size: 1rem; } .form-ingredients, .form-isntruccion { width: 26rem; height: 34rem; + text-align: center; } .save-recipe { width: 12rem; diff --git a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx index 2402add..a36f912 100644 --- a/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx +++ b/frontend/src/presentation/components/NewRecipe/NewRecipe.jsx @@ -4,7 +4,11 @@ import "./NewRecipe.css"; import { useForm } from "react-hook-form"; export const NewRecipe = () => { - const { register, handleSubmit,formState: {errors } } = useForm(); + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); const [isModalOpen, setIsModalOpen] = useState(false); const handleCloseModal = () => setIsModalOpen(false); @@ -20,71 +24,108 @@ export const NewRecipe = () => {
{/* titulo */} - - { errors.Titulo && Titulo requerido} + + {errors.Titulo && Titulo requerido}
- {/* tiempo */} - - - { errors.Tiempo && Tiempo requerido} + {/* tiempo */} + + + {errors.Tiempo && Tiempo requerido}
- {/* Raciones */} - - + {/* Raciones */} + +
- {/* etiquetas */} - - + {/* etiquetas */} + +
- {/* plato */} - - + {/* plato */} + +
- {/* coleccion */} - - + {/* coleccion */} + +
-
- {/* categoria */} - - +
+ {/* categoria */} + +
- {/* ingredientes */} - - - { errors.Ingredientes && Ingredientes requerido} + {/* ingredientes */} + +