diff --git a/Dockerfile b/Dockerfile index 0747509..8a2024d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -98,4 +98,4 @@ EXPOSE 80 HEALTHCHECK --start-period=10s --start-interval=2s --interval=30s --timeout=5s --retries=10 \ CMD wget --no-verbose --tries=1 --spider http://localhost:80/api/health_check || exit 1 -CMD ["java", "-Xms64M", "-Xmx1G", "-cp", "/application/application.jar", "org.kar.karideo.WebLauncher"] +CMD ["java", "-Xms64M", "-Xmx1G", "-cp", "/application/application.jar", "org.atriasoft.karideo.WebLauncher"] diff --git a/back/README.md b/back/README.md index 93e303c..25bc94b 100644 --- a/back/README.md +++ b/back/README.md @@ -11,7 +11,7 @@ mvn package // download all dependency in out/maven/dependency mvn dependency:copy-dependencies -java -cp out/maven/kar-karideo-0.1.0.jar org.kar.karideo.WebLauncher +java -cp out/maven/kar-karideo-0.1.0.jar org.atriasoft.karideo.WebLauncher // create a single package jar @@ -19,7 +19,7 @@ mvn clean compile assembly:single -java -cp out/maven/karideo-0.1.0-jar-with-dependencies.jar org.kar.karideo.WebLauncher +java -cp out/maven/karideo-0.1.0-jar-with-dependencies.jar org.atriasoft.karideo.WebLauncher diff --git a/back/pom.xml b/back/pom.xml index fbf908d..6863232 100644 --- a/back/pom.xml +++ b/back/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.kar + org.atriasoft karideo 0.3.0 @@ -10,17 +10,11 @@ 23 3.1.1 - - - gitea - https://gitea.atria-soft.org/api/packages/kangaroo-and-rabbit/maven - - - kangaroo-and-rabbit + org.atria-soft archidata - 0.24.0 + 0.28.0 @@ -112,7 +106,7 @@ java - org.kar.karideo.WebLauncher + org.atriasoft.karideo.WebLauncher @@ -121,7 +115,7 @@ java - org.kar.karideo.WebLauncherLocal + org.atriasoft.karideo.WebLauncherLocal @@ -130,7 +124,7 @@ java - org.kar.karideo.GenerateApi + org.atriasoft.karideo.GenerateApi diff --git a/back/release_karideo_back/propertyies.txt b/back/release_karideo_back/propertyies.txt index b9d43f2..ea3ab45 100644 --- a/back/release_karideo_back/propertyies.txt +++ b/back/release_karideo_back/propertyies.txt @@ -1,9 +1,9 @@ -org.kar.karideo.dataTmpFolder=/application/data/tmp -org.kar.karideo.dataTmpFolder=/application/data/media -org.kar.karideo.rest.oauth=http://192.168.1.156:21080/oauth/api/ -org.kar.karideo.db.host=1992.156.1.156 -org.kar.karideo.db.port=20306 -org.kar.karideo.db.login=root -org.kar.karideo.db.port=klkhj456gkgtkhjgvkujfhjgkjhgsdfhb3467465fgdhdesfgh -org.kar.karideo.db.name=karideo -org.kar.karideo.address=http://0.0.0.0:18080/karideo/api/ +org.atriasoft.karideo.dataTmpFolder=/application/data/tmp +org.atriasoft.karideo.dataTmpFolder=/application/data/media +org.atriasoft.karideo.rest.oauth=http://192.168.1.156:21080/oauth/api/ +org.atriasoft.karideo.db.host=1992.156.1.156 +org.atriasoft.karideo.db.port=20306 +org.atriasoft.karideo.db.login=root +org.atriasoft.karideo.db.port=klkhj456gkgtkhjgvkujfhjgkjhgsdfhb3467465fgdhdesfgh +org.atriasoft.karideo.db.name=karideo +org.atriasoft.karideo.address=http://0.0.0.0:18080/karideo/api/ diff --git a/back/src/org/kar/karideo/GenerateApi.java b/back/src/org/atriasoft/karideo/GenerateApi.java similarity index 81% rename from back/src/org/kar/karideo/GenerateApi.java rename to back/src/org/atriasoft/karideo/GenerateApi.java index 1e68c7d..c3a8f84 100644 --- a/back/src/org/kar/karideo/GenerateApi.java +++ b/back/src/org/atriasoft/karideo/GenerateApi.java @@ -1,6 +1,6 @@ -package org.kar.karideo; +package org.atriasoft.karideo; -import org.kar.karideo.migration.Initialization; +import org.atriasoft.karideo.migration.Initialization; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/kar/karideo/WebLauncher.java b/back/src/org/atriasoft/karideo/WebLauncher.java similarity index 74% rename from back/src/org/kar/karideo/WebLauncher.java rename to back/src/org/atriasoft/karideo/WebLauncher.java index 4653ea0..332ba8e 100755 --- a/back/src/org/kar/karideo/WebLauncher.java +++ b/back/src/org/atriasoft/karideo/WebLauncher.java @@ -1,38 +1,40 @@ -package org.kar.karideo; +package org.atriasoft.karideo; import java.net.URI; import java.util.logging.LogManager; +import org.atriasoft.archidata.UpdateJwtPublicKey; +import org.atriasoft.archidata.api.DataResource; +import org.atriasoft.archidata.catcher.GenericCatcher; +import org.atriasoft.archidata.db.DbConfig; +import org.atriasoft.archidata.filter.CORSFilter; +import org.atriasoft.archidata.filter.OptionFilter; +import org.atriasoft.archidata.migration.MigrationEngine; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.ContextGenericTools; +import org.atriasoft.karideo.api.Front; +import org.atriasoft.karideo.api.HealthCheck; +import org.atriasoft.karideo.api.MediaResource; +import org.atriasoft.karideo.api.SeasonResource; +import org.atriasoft.karideo.api.SeriesResource; +import org.atriasoft.karideo.api.TypeResource; +import org.atriasoft.karideo.api.UserMediaAdvancementResource; +import org.atriasoft.karideo.api.UserResource; +import org.atriasoft.karideo.filter.KarideoAuthenticationFilter; +import org.atriasoft.karideo.migration.Initialization; +import org.atriasoft.karideo.migration.Migration20230810; +import org.atriasoft.karideo.migration.Migration20231015; +import org.atriasoft.karideo.migration.Migration20231126; +import org.atriasoft.karideo.migration.Migration20240226; +import org.atriasoft.karideo.migration.Migration20240611; +import org.atriasoft.karideo.migration.Migration20250214; +import org.atriasoft.karideo.migration.Migration20250414; import org.glassfish.grizzly.http.server.HttpServer; import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; -import org.kar.archidata.UpdateJwtPublicKey; -import org.kar.archidata.api.DataResource; -import org.kar.archidata.catcher.GenericCatcher; -import org.kar.archidata.db.DbConfig; -import org.kar.archidata.filter.CORSFilter; -import org.kar.archidata.filter.OptionFilter; -import org.kar.archidata.migration.MigrationEngine; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.ContextGenericTools; -import org.kar.karideo.api.Front; -import org.kar.karideo.api.HealthCheck; -import org.kar.karideo.api.MediaResource; -import org.kar.karideo.api.SeasonResource; -import org.kar.karideo.api.SeriesResource; -import org.kar.karideo.api.TypeResource; -import org.kar.karideo.api.UserMediaAdvancementResource; -import org.kar.karideo.api.UserResource; -import org.kar.karideo.filter.KarideoAuthenticationFilter; -import org.kar.karideo.migration.Initialization; -import org.kar.karideo.migration.Migration20230810; -import org.kar.karideo.migration.Migration20231015; -import org.kar.karideo.migration.Migration20231126; -import org.kar.karideo.migration.Migration20240226; -import org.kar.karideo.migration.Migration20240611; -import org.kar.karideo.migration.Migration20250214; +import org.glassfish.jersey.server.validation.ValidationFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.bridge.SLF4JBridgeHandler; @@ -64,6 +66,7 @@ public class WebLauncher { migrationEngine.add(new Migration20240226()); migrationEngine.add(new Migration20240611()); migrationEngine.add(new Migration20250214()); + migrationEngine.add(new Migration20250414()); WebLauncher.LOGGER.info("Migrate the DB [START]"); migrationEngine.migrateWaitAdmin(new DbConfig()); WebLauncher.LOGGER.info("Migrate the DB [STOP]"); @@ -116,6 +119,8 @@ public class WebLauncher { ContextGenericTools.addJsr310(rc); // add jackson to be discover when we are ins stand-alone server rc.register(JacksonFeature.class); + // enable jersey specific validations (@Valid) + rc.register(ValidationFeature.class); // enable this to show low level request // rc.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, Level.WARNING.getName()); diff --git a/back/src/org/kar/karideo/WebLauncherLocal.java b/back/src/org/atriasoft/karideo/WebLauncherLocal.java similarity index 91% rename from back/src/org/kar/karideo/WebLauncherLocal.java rename to back/src/org/atriasoft/karideo/WebLauncherLocal.java index a6c3827..cf20607 100755 --- a/back/src/org/kar/karideo/WebLauncherLocal.java +++ b/back/src/org/atriasoft/karideo/WebLauncherLocal.java @@ -1,10 +1,10 @@ -package org.kar.karideo; +package org.atriasoft.karideo; import java.util.logging.LogManager; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.karideo.migration.Initialization; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.karideo.migration.Initialization; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.bridge.SLF4JBridgeHandler; diff --git a/back/src/org/kar/karideo/api/Front.java b/back/src/org/atriasoft/karideo/api/Front.java similarity index 56% rename from back/src/org/kar/karideo/api/Front.java rename to back/src/org/atriasoft/karideo/api/Front.java index dd28177..a531e5f 100644 --- a/back/src/org/kar/karideo/api/Front.java +++ b/back/src/org/atriasoft/karideo/api/Front.java @@ -1,10 +1,10 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; -import org.kar.archidata.api.FrontGeneric; +import org.atriasoft.archidata.api.FrontGeneric; import jakarta.ws.rs.Path; -import org.kar.karideo.util.ConfigVariable; +import org.atriasoft.karideo.util.ConfigVariable; @Path("/front") public class Front extends FrontGeneric { diff --git a/back/src/org/kar/karideo/api/HealthCheck.java b/back/src/org/atriasoft/karideo/api/HealthCheck.java similarity index 82% rename from back/src/org/kar/karideo/api/HealthCheck.java rename to back/src/org/atriasoft/karideo/api/HealthCheck.java index 1b3e8fb..480ecbe 100644 --- a/back/src/org/kar/karideo/api/HealthCheck.java +++ b/back/src/org/atriasoft/karideo/api/HealthCheck.java @@ -1,8 +1,8 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; -import org.kar.archidata.exception.FailException; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.JWTWrapper; +import org.atriasoft.archidata.exception.FailException; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.JWTWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/kar/karideo/api/MediaResource.java b/back/src/org/atriasoft/karideo/api/MediaResource.java similarity index 87% rename from back/src/org/kar/karideo/api/MediaResource.java rename to back/src/org/atriasoft/karideo/api/MediaResource.java index 15ea728..c2fea58 100644 --- a/back/src/org/kar/karideo/api/MediaResource.java +++ b/back/src/org/atriasoft/karideo/api/MediaResource.java @@ -1,37 +1,38 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import java.util.List; -import java.util.UUID; +import org.atriasoft.archidata.annotation.apiGenerator.ApiAsyncType; +import org.atriasoft.archidata.annotation.apiGenerator.ApiTypeScriptProgress; +import org.atriasoft.archidata.api.DataResource; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.dataAccess.addOnSQL.AddOnDataJson; +import org.atriasoft.archidata.exception.FailException; +import org.atriasoft.archidata.exception.InputException; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.tools.DataTools; +import org.atriasoft.karideo.model.Media; +import org.atriasoft.karideo.model.Season; +import org.atriasoft.karideo.model.Series; +import org.atriasoft.karideo.model.Type; +import org.bson.types.ObjectId; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; -import org.kar.archidata.annotation.AsyncType; -import org.kar.archidata.annotation.TypeScriptProgress; -import org.kar.archidata.api.DataResource; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.addOnSQL.AddOnDataJson; -import org.kar.archidata.exception.FailException; -import org.kar.archidata.exception.InputException; -import org.kar.archidata.model.Data; -import org.kar.archidata.tools.DataTools; -import org.kar.karideo.model.Media; -import org.kar.karideo.model.Season; -import org.kar.karideo.model.Series; -import org.kar.karideo.model.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -57,14 +58,15 @@ public class MediaResource { return DataAccess.get(Media.class, id); } - @PATCH + @PUT @Path("{id}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Modify a specific Media", tags = "GLOBAL") - public Media patch(@PathParam("id") final Long id, @AsyncType(Media.class) final String jsonRequest) throws Exception { - LOGGER.info("update video {} ==> '{}'", id, jsonRequest); - DataAccess.updateWithJson(Media.class, id, jsonRequest); + public Media patch(@PathParam("id") final Long id, @Valid final Media media) throws Exception { + LOGGER.info("update video {} ==> '{}'", id, media); + media.id = id; + DataAccess.update(media, id); return DataAccess.get(Media.class, id); } @@ -88,7 +90,7 @@ public class MediaResource { @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @Operation(description = "Create a new Media", tags = "GLOBAL") - @TypeScriptProgress + @ApiTypeScriptProgress public Media uploadMedia( // // @AsyncType(Long.class) @FormDataParam("universeId") String universeId, // // @AsyncType(Long.class) @FormDataParam("typeId") String typeId, // @@ -174,7 +176,7 @@ public class MediaResource { DataResource.removeTemporaryFile(tmpUID); throw new InputException("seriesId", "seriesId does not exist ..."); } - if (seriesNode.parentId != typeNode.id) { + if (seriesNode.parentId.equals(typeNode.id)) { DataResource.removeTemporaryFile(tmpUID); throw new InputException("seriesId", "seriesId object have not the correct parent..."); } @@ -233,9 +235,9 @@ public class MediaResource { @Path("{id}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) - @AsyncType(Media.class) + @ApiAsyncType(Media.class) @Operation(description = "Upload a new season cover media", tags = "GLOBAL") - @TypeScriptProgress + @ApiTypeScriptProgress public Media uploadCover( // @PathParam("id") final Long id, // @FormDataParam("file") final InputStream fileInputStream, // @@ -253,7 +255,7 @@ public class MediaResource { @Operation(description = "Remove a specific cover of a media", tags = "GLOBAL") public Media removeCover( // @PathParam("id") final Long id, // - @PathParam("coverId") final UUID coverId // + @PathParam("coverId") final ObjectId coverId // ) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { AddOnDataJson.removeLink(dbIo, Media.class, "id", id, "covers", coverId); diff --git a/back/src/org/kar/karideo/api/SeasonResource.java b/back/src/org/atriasoft/karideo/api/SeasonResource.java similarity index 78% rename from back/src/org/kar/karideo/api/SeasonResource.java rename to back/src/org/atriasoft/karideo/api/SeasonResource.java index 773c04f..79f838d 100644 --- a/back/src/org/kar/karideo/api/SeasonResource.java +++ b/back/src/org/atriasoft/karideo/api/SeasonResource.java @@ -1,31 +1,31 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.io.InputStream; import java.util.List; -import java.util.UUID; +import org.atriasoft.archidata.annotation.apiGenerator.ApiTypeScriptProgress; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.dataAccess.QueryAnd; +import org.atriasoft.archidata.dataAccess.QueryCondition; +import org.atriasoft.archidata.dataAccess.addOnSQL.AddOnDataJson; +import org.atriasoft.archidata.dataAccess.options.Condition; +import org.atriasoft.archidata.tools.DataTools; +import org.atriasoft.karideo.model.Season; +import org.bson.types.ObjectId; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; -import org.kar.archidata.annotation.AsyncType; -import org.kar.archidata.annotation.TypeScriptProgress; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.QueryAnd; -import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.addOnSQL.AddOnDataJson; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.tools.DataTools; -import org.kar.karideo.model.Season; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -58,17 +58,18 @@ public class SeasonResource { @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Create a new season", tags = "GLOBAL") - public Season post(final Season jsonRequest) throws Exception { + public Season post(@Valid final Season jsonRequest) throws Exception { return DataAccess.insert(jsonRequest); } - @PATCH + @PUT @Path("{id}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Modify a specific season", tags = "GLOBAL") - public Season patch(@PathParam("id") final Long id, @AsyncType(Season.class) final String jsonRequest) throws Exception { - DataAccess.updateWithJson(Season.class, id, jsonRequest); + public Season patch(@PathParam("id") final Long id, @Valid final Season season) throws Exception { + season.id = id; + DataAccess.update(season, id); return DataAccess.get(Season.class, id); } @@ -85,7 +86,7 @@ public class SeasonResource { @RolesAllowed("ADMIN") @Consumes(MediaType.MULTIPART_FORM_DATA) @Operation(description = "Upload a new season cover season", tags = "GLOBAL") - @TypeScriptProgress + @ApiTypeScriptProgress public Season uploadCover(@PathParam("id") final Long id, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { @@ -98,7 +99,7 @@ public class SeasonResource { @Path("{id}/cover/{coverId}") @RolesAllowed("ADMIN") @Operation(description = "Remove a specific cover of a season", tags = "GLOBAL") - public Season removeCover(@PathParam("id") final Long id, @PathParam("coverId") final UUID coverId) throws Exception { + public Season removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { AddOnDataJson.removeLink(dbIo, Season.class, "id", id, "covers", coverId); return dbIo.get(Season.class, id); diff --git a/back/src/org/kar/karideo/api/SeriesResource.java b/back/src/org/atriasoft/karideo/api/SeriesResource.java similarity index 78% rename from back/src/org/kar/karideo/api/SeriesResource.java rename to back/src/org/atriasoft/karideo/api/SeriesResource.java index 53ee895..4201647 100644 --- a/back/src/org/kar/karideo/api/SeriesResource.java +++ b/back/src/org/atriasoft/karideo/api/SeriesResource.java @@ -1,31 +1,31 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.io.InputStream; import java.util.List; -import java.util.UUID; +import org.atriasoft.archidata.annotation.apiGenerator.ApiTypeScriptProgress; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.dataAccess.QueryAnd; +import org.atriasoft.archidata.dataAccess.QueryCondition; +import org.atriasoft.archidata.dataAccess.addOnSQL.AddOnDataJson; +import org.atriasoft.archidata.dataAccess.options.Condition; +import org.atriasoft.archidata.tools.DataTools; +import org.atriasoft.karideo.model.Series; +import org.bson.types.ObjectId; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; -import org.kar.archidata.annotation.AsyncType; -import org.kar.archidata.annotation.TypeScriptProgress; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.QueryAnd; -import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.addOnSQL.AddOnDataJson; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.tools.DataTools; -import org.kar.karideo.model.Series; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -61,17 +61,18 @@ public class SeriesResource { @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Create a new Series", tags = "GLOBAL") - public Series post(final Series jsonRequest) throws Exception { + public Series post(@Valid final Series jsonRequest) throws Exception { return DataAccess.insert(jsonRequest); } - @PATCH + @PUT @Path("{id}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Modify a specific Series", tags = "GLOBAL") - public Series patch(@PathParam("id") final Long id, @AsyncType(Series.class) final String jsonRequest) throws Exception { - DataAccess.updateWithJson(Series.class, id, jsonRequest); + public Series patch(@PathParam("id") final Long id, @Valid final Series series) throws Exception { + series.id = id; + DataAccess.update(series, id); return DataAccess.get(Series.class, id); } @@ -88,7 +89,7 @@ public class SeriesResource { @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @Operation(description = "Upload a new season cover Series", tags = "GLOBAL") - @TypeScriptProgress + @ApiTypeScriptProgress public Series uploadCover(@PathParam("id") final Long id, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { @@ -101,7 +102,7 @@ public class SeriesResource { @Path("{id}/cover/{coverId}") @RolesAllowed("ADMIN") @Operation(description = "Remove a specific Series of a season", tags = "GLOBAL") - public Series removeCover(@PathParam("id") final Long id, @PathParam("coverId") final UUID coverId) throws Exception { + public Series removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { AddOnDataJson.removeLink(dbIo, Series.class, "id", id, "covers", coverId); return dbIo.get(Series.class, id); diff --git a/back/src/org/kar/karideo/api/TypeResource.java b/back/src/org/atriasoft/karideo/api/TypeResource.java similarity index 79% rename from back/src/org/kar/karideo/api/TypeResource.java rename to back/src/org/atriasoft/karideo/api/TypeResource.java index dc5c495..efd1371 100644 --- a/back/src/org/kar/karideo/api/TypeResource.java +++ b/back/src/org/atriasoft/karideo/api/TypeResource.java @@ -1,30 +1,30 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.io.InputStream; import java.util.List; -import java.util.UUID; +import org.atriasoft.archidata.annotation.apiGenerator.ApiTypeScriptProgress; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.dataAccess.QueryCondition; +import org.atriasoft.archidata.dataAccess.addOnSQL.AddOnDataJson; +import org.atriasoft.archidata.dataAccess.options.Condition; +import org.atriasoft.archidata.tools.DataTools; +import org.atriasoft.karideo.model.Type; +import org.bson.types.ObjectId; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; -import org.kar.archidata.annotation.AsyncType; -import org.kar.archidata.annotation.TypeScriptProgress; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.addOnSQL.AddOnDataJson; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.tools.DataTools; -import org.kar.karideo.model.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -61,17 +61,18 @@ public class TypeResource { @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Create a new Type", tags = "GLOBAL") - public Type post(final Type jsonRequest) throws Exception { + public Type post(@Valid final Type jsonRequest) throws Exception { return DataAccess.insert(jsonRequest); } - @PATCH + @PUT @Path("{id}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Modify a specific Type", tags = "GLOBAL") - public Type patch(@PathParam("id") final Long id, @AsyncType(Type.class) final String jsonRequest) throws Exception { - DataAccess.updateWithJson(Type.class, id, jsonRequest); + public Type patch(@PathParam("id") final Long id, @Valid final Type type) throws Exception { + type.id = id; + DataAccess.update(type, id); return DataAccess.get(Type.class, id); } @@ -88,7 +89,7 @@ public class TypeResource { @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @Operation(description = "Upload a new season cover Type", tags = "GLOBAL") - @TypeScriptProgress + @ApiTypeScriptProgress public Type uploadCover(@PathParam("id") final Long id, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { @@ -101,7 +102,7 @@ public class TypeResource { @Path("{id}/cover/{coverId}") @RolesAllowed("ADMIN") @Operation(description = "Remove a specific cover of a type", tags = "GLOBAL") - public Type removeCover(@PathParam("id") final Long id, @PathParam("coverId") final UUID coverId) throws Exception { + public Type removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess dbIo = DBAccess.createInterface()) { AddOnDataJson.removeLink(dbIo, Type.class, "id", id, "covers", coverId); diff --git a/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java b/back/src/org/atriasoft/karideo/api/UserMediaAdvancementResource.java similarity index 87% rename from back/src/org/kar/karideo/api/UserMediaAdvancementResource.java rename to back/src/org/atriasoft/karideo/api/UserMediaAdvancementResource.java index 82c0f6f..7e34232 100644 --- a/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java +++ b/back/src/org/atriasoft/karideo/api/UserMediaAdvancementResource.java @@ -1,22 +1,23 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.util.List; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.QueryAnd; -import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.filter.GenericContext; -import org.kar.karideo.model.UserMediaAdvancement; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.dataAccess.QueryAnd; +import org.atriasoft.archidata.dataAccess.QueryCondition; +import org.atriasoft.archidata.dataAccess.options.Condition; +import org.atriasoft.archidata.filter.GenericContext; +import org.atriasoft.karideo.model.UserMediaAdvancement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; @@ -69,12 +70,12 @@ public class UserMediaAdvancementResource { public record MediaInformationsDelta(int time, float percent, boolean addCount) { } - @PATCH + @PUT @Path("{id}") @RolesAllowed("USER") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Modify a user advancement", tags = "GLOBAL") - public UserMediaAdvancement patch(@Context final SecurityContext sc, @PathParam("id") final Long id, final MediaInformationsDelta data) throws Exception { + public UserMediaAdvancement patch(@Context final SecurityContext sc, @PathParam("id") final Long id, @Valid final MediaInformationsDelta data) throws Exception { final UserMediaAdvancement elem = get(sc, id); if (elem == null) { // insert element diff --git a/back/src/org/kar/karideo/api/UserResource.java b/back/src/org/atriasoft/karideo/api/UserResource.java similarity index 92% rename from back/src/org/kar/karideo/api/UserResource.java rename to back/src/org/atriasoft/karideo/api/UserResource.java index 609a449..30ac749 100755 --- a/back/src/org/kar/karideo/api/UserResource.java +++ b/back/src/org/atriasoft/karideo/api/UserResource.java @@ -1,10 +1,10 @@ -package org.kar.karideo.api; +package org.atriasoft.karideo.api; import java.util.List; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.filter.GenericContext; -import org.kar.karideo.model.UserKarideo; +import org.atriasoft.archidata.dataAccess.DataAccess; +import org.atriasoft.archidata.filter.GenericContext; +import org.atriasoft.karideo.model.UserKarideo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/kar/karideo/filter/KarideoAuthenticationFilter.java b/back/src/org/atriasoft/karideo/filter/KarideoAuthenticationFilter.java similarity index 82% rename from back/src/org/kar/karideo/filter/KarideoAuthenticationFilter.java rename to back/src/org/atriasoft/karideo/filter/KarideoAuthenticationFilter.java index 79fdcad..749e134 100644 --- a/back/src/org/kar/karideo/filter/KarideoAuthenticationFilter.java +++ b/back/src/org/atriasoft/karideo/filter/KarideoAuthenticationFilter.java @@ -1,6 +1,6 @@ -package org.kar.karideo.filter; +package org.atriasoft.karideo.filter; -import org.kar.archidata.filter.AuthenticationFilter; +import org.atriasoft.archidata.filter.AuthenticationFilter; import jakarta.ws.rs.Priorities; import jakarta.ws.rs.ext.Provider; diff --git a/back/src/org/kar/karideo/internal/Log.java b/back/src/org/atriasoft/karideo/internal/Log.java similarity index 97% rename from back/src/org/kar/karideo/internal/Log.java rename to back/src/org/atriasoft/karideo/internal/Log.java index 71d6346..457781e 100644 --- a/back/src/org/kar/karideo/internal/Log.java +++ b/back/src/org/atriasoft/karideo/internal/Log.java @@ -1,4 +1,4 @@ -package org.kar.karideo.internal; +package org.atriasoft.karideo.internal; //import io.scenarium.logger.LogLevel; //import io.scenarium.logger.Logger; diff --git a/back/src/org/kar/karideo/migration/Initialization.java b/back/src/org/atriasoft/karideo/migration/Initialization.java similarity index 71% rename from back/src/org/kar/karideo/migration/Initialization.java rename to back/src/org/atriasoft/karideo/migration/Initialization.java index ddd978d..1fa2453 100644 --- a/back/src/org/kar/karideo/migration/Initialization.java +++ b/back/src/org/atriasoft/karideo/migration/Initialization.java @@ -1,28 +1,29 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; import java.util.List; -import org.kar.archidata.api.DataResource; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.externalRestApi.AnalyzeApi; -import org.kar.archidata.externalRestApi.TsGenerateApi; -import org.kar.archidata.migration.MigrationSqlStep; -import org.kar.archidata.model.Data; -import org.kar.archidata.model.User; -import org.kar.archidata.model.token.JwtToken; -import org.kar.karideo.api.Front; -import org.kar.karideo.api.HealthCheck; -import org.kar.karideo.api.MediaResource; -import org.kar.karideo.api.SeasonResource; -import org.kar.karideo.api.SeriesResource; -import org.kar.karideo.api.TypeResource; -import org.kar.karideo.api.UserMediaAdvancementResource; -import org.kar.karideo.api.UserResource; -import org.kar.karideo.model.Media; -import org.kar.karideo.model.Season; -import org.kar.karideo.model.Series; -import org.kar.karideo.model.Type; -import org.kar.karideo.model.UserMediaAdvancement; +import org.atriasoft.archidata.api.DataResource; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.externalRestApi.AnalyzeApi; +import org.atriasoft.archidata.externalRestApi.TsGenerateApi; +import org.atriasoft.archidata.filter.PartRight; +import org.atriasoft.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.User; +import org.atriasoft.archidata.model.token.JwtToken; +import org.atriasoft.karideo.api.Front; +import org.atriasoft.karideo.api.HealthCheck; +import org.atriasoft.karideo.api.MediaResource; +import org.atriasoft.karideo.api.SeasonResource; +import org.atriasoft.karideo.api.SeriesResource; +import org.atriasoft.karideo.api.TypeResource; +import org.atriasoft.karideo.api.UserMediaAdvancementResource; +import org.atriasoft.karideo.api.UserResource; +import org.atriasoft.karideo.model.Media; +import org.atriasoft.karideo.model.Season; +import org.atriasoft.karideo.model.Series; +import org.atriasoft.karideo.model.Type; +import org.atriasoft.karideo.model.UserMediaAdvancement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,6 +46,7 @@ public class Initialization extends MigrationSqlStep { final AnalyzeApi api = new AnalyzeApi(); api.addAllApi(listOfResources); api.addModel(JwtToken.class); + api.addModel(PartRight.class); TsGenerateApi.generateApi(api, "../front/src/back-api/"); LOGGER.info("Generate APIs (DONE)"); } diff --git a/back/src/org/kar/karideo/migration/Migration20230810.java b/back/src/org/atriasoft/karideo/migration/Migration20230810.java similarity index 72% rename from back/src/org/kar/karideo/migration/Migration20230810.java rename to back/src/org/atriasoft/karideo/migration/Migration20230810.java index 892af80..a0f51bd 100644 --- a/back/src/org/kar/karideo/migration/Migration20230810.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20230810.java @@ -1,7 +1,7 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; -import org.kar.archidata.migration.MigrationSqlStep; -import org.kar.karideo.model.UserMediaAdvancement; +import org.atriasoft.archidata.migration.MigrationSqlStep; +import org.atriasoft.karideo.model.UserMediaAdvancement; public class Migration20230810 extends MigrationSqlStep { diff --git a/back/src/org/kar/karideo/migration/Migration20231015.java b/back/src/org/atriasoft/karideo/migration/Migration20231015.java similarity index 87% rename from back/src/org/kar/karideo/migration/Migration20231015.java rename to back/src/org/atriasoft/karideo/migration/Migration20231015.java index c7a7868..ff5a55d 100644 --- a/back/src/org/kar/karideo/migration/Migration20231015.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20231015.java @@ -1,8 +1,8 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; import java.util.List; -import org.kar.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.migration.MigrationSqlStep; public class Migration20231015 extends MigrationSqlStep { diff --git a/back/src/org/kar/karideo/migration/Migration20231126.java b/back/src/org/atriasoft/karideo/migration/Migration20231126.java similarity index 99% rename from back/src/org/kar/karideo/migration/Migration20231126.java rename to back/src/org/atriasoft/karideo/migration/Migration20231126.java index 4c54bb2..28b9df0 100644 --- a/back/src/org/kar/karideo/migration/Migration20231126.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20231126.java @@ -1,6 +1,6 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; -import org.kar.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.migration.MigrationSqlStep; public class Migration20231126 extends MigrationSqlStep { diff --git a/back/src/org/kar/karideo/migration/Migration20240226.java b/back/src/org/atriasoft/karideo/migration/Migration20240226.java similarity index 82% rename from back/src/org/kar/karideo/migration/Migration20240226.java rename to back/src/org/atriasoft/karideo/migration/Migration20240226.java index ee1e280..086fac4 100644 --- a/back/src/org/kar/karideo/migration/Migration20240226.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20240226.java @@ -1,6 +1,6 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; -import org.kar.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.migration.MigrationSqlStep; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/kar/karideo/migration/Migration20240611.java b/back/src/org/atriasoft/karideo/migration/Migration20240611.java similarity index 85% rename from back/src/org/kar/karideo/migration/Migration20240611.java rename to back/src/org/atriasoft/karideo/migration/Migration20240611.java index 6ebd66a..da7ee2c 100644 --- a/back/src/org/kar/karideo/migration/Migration20240611.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20240611.java @@ -1,6 +1,6 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; -import org.kar.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.migration.MigrationSqlStep; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/kar/karideo/migration/Migration20250214.java b/back/src/org/atriasoft/karideo/migration/Migration20250214.java similarity index 89% rename from back/src/org/kar/karideo/migration/Migration20250214.java rename to back/src/org/atriasoft/karideo/migration/Migration20250214.java index 9fe1dee..8c2d515 100644 --- a/back/src/org/kar/karideo/migration/Migration20250214.java +++ b/back/src/org/atriasoft/karideo/migration/Migration20250214.java @@ -1,4 +1,4 @@ -package org.kar.karideo.migration; +package org.atriasoft.karideo.migration; import java.io.FileWriter; import java.io.IOException; @@ -11,15 +11,15 @@ import java.util.List; import java.util.UUID; import org.bson.types.ObjectId; -import org.kar.archidata.api.DataResource; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.options.AccessDeletedItems; -import org.kar.archidata.dataAccess.options.OverrideTableName; -import org.kar.archidata.migration.MigrationSqlStep; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.karideo.migration.model.CoverConversion; -import org.kar.karideo.migration.model.MediaConversion; -import org.kar.karideo.migration.model.OIDConversion; +import org.atriasoft.archidata.api.DataResource; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.options.AccessDeletedItems; +import org.atriasoft.archidata.dataAccess.options.OverrideTableName; +import org.atriasoft.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.karideo.migration.model.CoverConversion; +import org.atriasoft.karideo.migration.model.MediaConversion; +import org.atriasoft.karideo.migration.model.OIDConversion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/src/org/atriasoft/karideo/migration/Migration20250414.java b/back/src/org/atriasoft/karideo/migration/Migration20250414.java new file mode 100644 index 0000000..d175bcf --- /dev/null +++ b/back/src/org/atriasoft/karideo/migration/Migration20250414.java @@ -0,0 +1,24 @@ +package org.atriasoft.karideo.migration; + +import org.atriasoft.archidata.migration.MigrationSqlStep; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Migration20250414 extends MigrationSqlStep { + private static final Logger LOGGER = LoggerFactory.getLogger(Migration20240226.class); + + public static final int KARSO_INITIALISATION_ID = 1; + + @Override + public String getName() { + return "migration-2025-04-14: update to archidata 0.28.0"; + } + + @Override + public void generateStep() throws Exception { + addAction(""" + ALTER TABLE `media` ADD `datePublication` timestamp(3) NULL; + """); + } + +} diff --git a/back/src/org/kar/karideo/migration/model/CoverConversion.java b/back/src/org/atriasoft/karideo/migration/model/CoverConversion.java similarity index 73% rename from back/src/org/kar/karideo/migration/model/CoverConversion.java rename to back/src/org/atriasoft/karideo/migration/model/CoverConversion.java index 2182f2a..bd5a4b5 100644 --- a/back/src/org/kar/karideo/migration/model/CoverConversion.java +++ b/back/src/org/atriasoft/karideo/migration/model/CoverConversion.java @@ -1,10 +1,10 @@ -package org.kar.karideo.migration.model; +package org.atriasoft.karideo.migration.model; import java.util.List; import java.util.UUID; import org.bson.types.ObjectId; -import org.kar.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.DataJson; import jakarta.persistence.Id; diff --git a/back/src/org/kar/karideo/migration/model/MediaConversion.java b/back/src/org/atriasoft/karideo/migration/model/MediaConversion.java similarity index 81% rename from back/src/org/kar/karideo/migration/model/MediaConversion.java rename to back/src/org/atriasoft/karideo/migration/model/MediaConversion.java index aaf9968..2b8a0b6 100644 --- a/back/src/org/kar/karideo/migration/model/MediaConversion.java +++ b/back/src/org/atriasoft/karideo/migration/model/MediaConversion.java @@ -1,4 +1,4 @@ -package org.kar.karideo.migration.model; +package org.atriasoft.karideo.migration.model; import java.util.UUID; diff --git a/back/src/org/kar/karideo/migration/model/OIDConversion.java b/back/src/org/atriasoft/karideo/migration/model/OIDConversion.java similarity index 79% rename from back/src/org/kar/karideo/migration/model/OIDConversion.java rename to back/src/org/atriasoft/karideo/migration/model/OIDConversion.java index c6a283c..f31b44f 100644 --- a/back/src/org/kar/karideo/migration/model/OIDConversion.java +++ b/back/src/org/atriasoft/karideo/migration/model/OIDConversion.java @@ -1,4 +1,4 @@ -package org.kar.karideo.migration.model; +package org.atriasoft.karideo.migration.model; import java.util.UUID; diff --git a/back/src/org/kar/karideo/model/Media.java b/back/src/org/atriasoft/karideo/model/Media.java similarity index 60% rename from back/src/org/kar/karideo/model/Media.java rename to back/src/org/atriasoft/karideo/model/Media.java index c821a6a..715030e 100644 --- a/back/src/org/kar/karideo/model/Media.java +++ b/back/src/org/atriasoft/karideo/model/Media.java @@ -1,12 +1,16 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; +import java.util.Date; import java.util.List; -import java.util.UUID; +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; import org.bson.types.ObjectId; -import org.kar.archidata.annotation.DataJson; -import org.kar.archidata.model.Data; -import org.kar.archidata.model.GenericDataSoftDelete; +import org.hibernate.validator.constraints.UniqueElements; import com.fasterxml.jackson.annotation.JsonInclude; @@ -17,51 +21,58 @@ import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import jakarta.validation.constraints.PositiveOrZero; +import jakarta.validation.constraints.Size; @Entity @Table(name = "media") @JsonInclude(JsonInclude.Include.NON_NULL) +@ApiGenerationMode(create = true, update = true) public class Media extends GenericDataSoftDelete { @Schema(description = "Name of the media (this represent the title)") @Column(nullable = false, length = 0) + @Size(min = 0, max = 256) public String name; @Schema(description = "Description of the media") @Column(length = 0) + @Size(min = 0, max = 8192) public String description; @Schema(description = "Foreign Key Id of the data") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Data.class) @Column(nullable = false) + @CheckForeignKey(target = Data.class) public ObjectId dataId; - @ManyToOne(fetch = FetchType.LAZY, targetEntity = Data.class) - @Column(nullable = false) - @Nullable - public UUID dataIdOld; @Schema(description = "Type of the media") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class) + @CheckForeignKey(target = Type.class) public Long typeId; @Schema(description = "Series reference of the media") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class) + @CheckForeignKey(target = Series.class) public Long seriesId; @Schema(description = "Season reference of the media") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Season.class) + @CheckForeignKey(target = Season.class) public Long seasonId; @Schema(description = "Episode Id") + @PositiveOrZero public Integer episode; - // ") - public Integer date; @Schema(description = "Creation years of the media") - public Integer time; + public Date datePublication; @Schema(description = "Limitation Age of the media") + @PositiveOrZero public Integer ageLimit; @Schema(description = "List of Id of the specific covers") - @DataJson(targetEntity = Data.class) + @DataJson() @Nullable - public List covers = null; + @CollectionNotEmpty + @UniqueElements + public List<@CheckForeignKey(target = Data.class) ObjectId> covers = null; @Override public String toString() { return "Media [name=" + this.name + ", description=" + this.description + ", dataId=" + this.dataId + ", typeId=" + this.typeId + ", seriesId=" + this.seriesId + ", seasonId=" + this.seasonId - + ", episode=" + this.episode + ", date=" + this.date + ", time=" + this.time + ", ageLimit=" + this.ageLimit + ", covers=" + this.covers + "]"; + + ", episode=" + this.episode + ", date=" + this.datePublication + ", ageLimit=" + this.ageLimit + ", covers=" + this.covers + "]"; } } diff --git a/back/src/org/kar/karideo/model/Season.java b/back/src/org/atriasoft/karideo/model/Season.java similarity index 52% rename from back/src/org/kar/karideo/model/Season.java rename to back/src/org/atriasoft/karideo/model/Season.java index a5c0c8f..05fd23a 100644 --- a/back/src/org/kar/karideo/model/Season.java +++ b/back/src/org/atriasoft/karideo/model/Season.java @@ -1,11 +1,16 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; import java.util.List; +import org.atriasoft.archidata.annotation.DataIfNotExists; +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; import org.bson.types.ObjectId; -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.annotation.DataJson; -import org.kar.archidata.model.GenericDataSoftDelete; +import org.hibernate.validator.constraints.UniqueElements; import com.fasterxml.jackson.annotation.JsonInclude; @@ -15,23 +20,31 @@ import jakarta.persistence.Column; import jakarta.persistence.FetchType; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; @Table(name = "season") @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) +@ApiGenerationMode(create = true, update = true) public class Season extends GenericDataSoftDelete { @Column(nullable = false, length = 0) @Schema(description = "Name of the media (this represent the title)") + @Size(min = 0, max = 256) public String name; @Column(length = 0) @Schema(description = "Description of the media") + @Size(min = 0, max = 8192) public String description; @Column(nullable = false) @Schema(description = "series parent ID") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class) + @CheckForeignKey(target = Series.class) public Long parentId; @Schema(description = "List of Id of the specific covers") @DataJson() @Nullable - public List covers = null; + @CollectionNotEmpty + @UniqueElements + public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; } \ No newline at end of file diff --git a/back/src/org/kar/karideo/model/Series.java b/back/src/org/atriasoft/karideo/model/Series.java similarity index 52% rename from back/src/org/kar/karideo/model/Series.java rename to back/src/org/atriasoft/karideo/model/Series.java index 41a6584..88b2e68 100644 --- a/back/src/org/kar/karideo/model/Series.java +++ b/back/src/org/atriasoft/karideo/model/Series.java @@ -1,11 +1,16 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; import java.util.List; +import org.atriasoft.archidata.annotation.DataIfNotExists; +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; import org.bson.types.ObjectId; -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.annotation.DataJson; -import org.kar.archidata.model.GenericDataSoftDelete; +import org.hibernate.validator.constraints.UniqueElements; import com.fasterxml.jackson.annotation.JsonInclude; @@ -15,23 +20,31 @@ import jakarta.persistence.Column; import jakarta.persistence.FetchType; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; @Table(name = "series") @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) +@ApiGenerationMode(create = true, update = true) public class Series extends GenericDataSoftDelete { @Column(nullable = false, length = 0) + @Size(min = 0, max = 256) @Schema(description = "Name of the media (this represent the title)") public String name; @Column(length = 0) @Schema(description = "Description of the media") + @Size(min = 0, max = 8192) public String description; @Column(nullable = false) @Schema(description = "series parent ID") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class) + @CheckForeignKey(target = Type.class) public Long parentId; @Schema(description = "List of Id of the specific covers") @DataJson() @Nullable - public List covers = null; + @CollectionNotEmpty + @UniqueElements + public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; } diff --git a/back/src/org/kar/karideo/model/Type.java b/back/src/org/atriasoft/karideo/model/Type.java similarity index 50% rename from back/src/org/kar/karideo/model/Type.java rename to back/src/org/atriasoft/karideo/model/Type.java index 17418d0..fe6f029 100644 --- a/back/src/org/kar/karideo/model/Type.java +++ b/back/src/org/atriasoft/karideo/model/Type.java @@ -1,11 +1,16 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; import java.util.List; +import org.atriasoft.archidata.annotation.DataIfNotExists; +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; import org.bson.types.ObjectId; -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.annotation.DataJson; -import org.kar.archidata.model.GenericDataSoftDelete; +import org.hibernate.validator.constraints.UniqueElements; import com.fasterxml.jackson.annotation.JsonInclude; @@ -13,21 +18,28 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; @Table(name = "type") @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) +@ApiGenerationMode(create = true, update = true) public class Type extends GenericDataSoftDelete { @Column(nullable = false, length = 0) + @Size(min = 0, max = 256) @Schema(description = "Name of the media (this represent the title)") public String name; @Column(length = 0) @Schema(description = "Description of the media") + @Size(min = 0, max = 8192) public String description; @Schema(description = "List of Id of the specific covers") @DataJson() @Nullable - public List covers = null; + @CollectionNotEmpty + @UniqueElements + public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; public Type() {} diff --git a/back/src/org/kar/karideo/model/UserKarideo.java b/back/src/org/atriasoft/karideo/model/UserKarideo.java similarity index 60% rename from back/src/org/kar/karideo/model/UserKarideo.java rename to back/src/org/atriasoft/karideo/model/UserKarideo.java index d3f5b5b..1266f7a 100644 --- a/back/src/org/kar/karideo/model/UserKarideo.java +++ b/back/src/org/atriasoft/karideo/model/UserKarideo.java @@ -1,7 +1,7 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.User; +import org.atriasoft.archidata.annotation.DataIfNotExists; +import org.atriasoft.archidata.model.User; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/back/src/org/kar/karideo/model/UserMediaAdvancement.java b/back/src/org/atriasoft/karideo/model/UserMediaAdvancement.java similarity index 62% rename from back/src/org/kar/karideo/model/UserMediaAdvancement.java rename to back/src/org/atriasoft/karideo/model/UserMediaAdvancement.java index 3c46606..f20545c 100644 --- a/back/src/org/kar/karideo/model/UserMediaAdvancement.java +++ b/back/src/org/atriasoft/karideo/model/UserMediaAdvancement.java @@ -1,8 +1,11 @@ -package org.kar.karideo.model; +package org.atriasoft.karideo.model; -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.annotation.DataNotRead; -import org.kar.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.annotation.DataIfNotExists; +import org.atriasoft.archidata.annotation.DataNotRead; +import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; +import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.model.GenericDataSoftDelete; import com.fasterxml.jackson.annotation.JsonInclude; @@ -12,28 +15,35 @@ import jakarta.persistence.Column; import jakarta.persistence.FetchType; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import jakarta.validation.constraints.PositiveOrZero; @Table(name = "userMediaAdvancement") @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) +@ApiGenerationMode(create = true, update = true) public class UserMediaAdvancement extends GenericDataSoftDelete { @DataNotRead @Column(nullable = false) @Schema(description = "Foreign Key Id of the user") @ManyToOne(fetch = FetchType.LAZY, targetEntity = UserKarideo.class) @Nullable + @ApiAccessLimitation(updatable = false, creatable = false) public Long userId; @Column(nullable = false) @Schema(description = "Id of the media") @ManyToOne(fetch = FetchType.LAZY, targetEntity = Media.class) + @CheckForeignKey(target = Media.class) public Long mediaId; @Column(nullable = false) @Schema(description = "Percent of advancement in the media") + @PositiveOrZero public Float percent; @Column(nullable = false) @Schema(description = "Number of second of advancement in the media") + @PositiveOrZero public Integer time; @Column(nullable = false) @Schema(description = "Number of time this media has been read") + @PositiveOrZero public Integer count; } diff --git a/back/src/org/kar/karideo/util/ConfigVariable.java b/back/src/org/atriasoft/karideo/util/ConfigVariable.java similarity index 87% rename from back/src/org/kar/karideo/util/ConfigVariable.java rename to back/src/org/atriasoft/karideo/util/ConfigVariable.java index 6a727cb..28452c3 100644 --- a/back/src/org/kar/karideo/util/ConfigVariable.java +++ b/back/src/org/atriasoft/karideo/util/ConfigVariable.java @@ -1,4 +1,4 @@ -package org.kar.karideo.util; +package org.atriasoft.karideo.util; public class ConfigVariable { public static final String BASE_NAME = "ORG_KARIDEO_"; diff --git a/back/src/org/kar/karideo/CacheFilter.java__ b/back/src/org/kar/karideo/CacheFilter.java__ deleted file mode 100644 index 4269fc6..0000000 --- a/back/src/org/kar/karideo/CacheFilter.java__ +++ /dev/null @@ -1,20 +0,0 @@ -package org.kar.karideo; - -public class CacheFilter { - @Override - public List create(AbstractMethod am) { - if (am.isAnnotationPresent(CacheMaxAge.class)) { - CacheMaxAge maxAge = am.getAnnotation(CacheMaxAge.class); - return newCacheFilter("max-age: " + maxAge.unit().toSeconds(maxAge.time())); - } else if (am.isAnnotationPresent(NoCache.class)) { - return newCacheFilter("no-cache"); - } else { - return Collections.emptyList(); - } - } - - private List newCacheFilter(String content) { - return Collections - . singletonList(new CacheResponseFilter(content)); - } -} diff --git a/back/test/src/test/kar/karideo/Common.java b/back/test/src/test/atriasoft/karideo/Common.java similarity index 57% rename from back/test/src/test/kar/karideo/Common.java rename to back/test/src/test/atriasoft/karideo/Common.java index 8b45de9..da99432 100644 --- a/back/test/src/test/kar/karideo/Common.java +++ b/back/test/src/test/atriasoft/karideo/Common.java @@ -1,10 +1,11 @@ -package test.kar.karideo; +package test.atriasoft.karideo; import java.util.Map; -import org.kar.archidata.tools.JWTWrapper; +import org.atriasoft.archidata.filter.PartRight; +import org.atriasoft.archidata.tools.JWTWrapper; public class Common { - static String USER_TOKEN = JWTWrapper.createJwtTestToken(16512, "test_user_login", "KarAuth", "karideo", Map.of("karideo", Map.of("USER", Boolean.TRUE))); - static String ADMIN_TOKEN = JWTWrapper.createJwtTestToken(16512, "test_admin_login", "KarAuth", "karideo", Map.of("karideo", Map.of("USER", Boolean.TRUE, "ADMIN", Boolean.TRUE))); + static String USER_TOKEN = JWTWrapper.createJwtTestToken(16512, "test_user_login", "KarAuth", "karideo", Map.of("karideo", Map.of("USER", PartRight.READ))); + static String ADMIN_TOKEN = JWTWrapper.createJwtTestToken(16512, "test_admin_login", "KarAuth", "karideo", Map.of("karideo", Map.of("USER", PartRight.READ_WRITE, "ADMIN", PartRight.READ_WRITE))); } diff --git a/back/test/src/test/kar/karideo/ConfigureDb.java b/back/test/src/test/atriasoft/karideo/ConfigureDb.java similarity index 88% rename from back/test/src/test/kar/karideo/ConfigureDb.java rename to back/test/src/test/atriasoft/karideo/ConfigureDb.java index b116ed9..40b526f 100644 --- a/back/test/src/test/kar/karideo/ConfigureDb.java +++ b/back/test/src/test/atriasoft/karideo/ConfigureDb.java @@ -1,18 +1,18 @@ -package test.kar.karideo; +package test.atriasoft.karideo; import java.io.IOException; import java.util.List; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.db.DbConfig; -import org.kar.archidata.db.DbIoFactory; -import org.kar.archidata.exception.DataAccessException; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.karideo.model.Media; -import org.kar.karideo.model.Season; -import org.kar.karideo.model.Series; -import org.kar.karideo.model.Type; -import org.kar.karideo.model.UserKarideo; +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.db.DbConfig; +import org.atriasoft.archidata.db.DbIoFactory; +import org.atriasoft.archidata.exception.DataAccessException; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.karideo.model.Media; +import org.atriasoft.karideo.model.Season; +import org.atriasoft.karideo.model.Series; +import org.atriasoft.karideo.model.Type; +import org.atriasoft.karideo.model.UserKarideo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/test/src/test/kar/karideo/StepwiseExtension.java b/back/test/src/test/atriasoft/karideo/StepwiseExtension.java similarity index 98% rename from back/test/src/test/kar/karideo/StepwiseExtension.java rename to back/test/src/test/atriasoft/karideo/StepwiseExtension.java index 66eb7cb..8890268 100644 --- a/back/test/src/test/kar/karideo/StepwiseExtension.java +++ b/back/test/src/test/atriasoft/karideo/StepwiseExtension.java @@ -1,4 +1,4 @@ -package test.kar.karideo; +package test.atriasoft.karideo; import org.junit.jupiter.api.extension.ConditionEvaluationResult; import org.junit.jupiter.api.extension.ExecutionCondition; diff --git a/back/test/src/test/kar/karideo/TestBase.java b/back/test/src/test/atriasoft/karideo/TestBase.java similarity index 90% rename from back/test/src/test/kar/karideo/TestBase.java rename to back/test/src/test/atriasoft/karideo/TestBase.java index 2331adb..6307edb 100644 --- a/back/test/src/test/kar/karideo/TestBase.java +++ b/back/test/src/test/atriasoft/karideo/TestBase.java @@ -1,4 +1,4 @@ -package test.kar.karideo; +package test.atriasoft.karideo; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -6,8 +6,8 @@ import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.extension.ExtendWith; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.RESTApi; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.RESTApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/back/test/src/test/kar/karideo/TestHealthCheck.java b/back/test/src/test/atriasoft/karideo/TestHealthCheck.java similarity index 70% rename from back/test/src/test/kar/karideo/TestHealthCheck.java rename to back/test/src/test/atriasoft/karideo/TestHealthCheck.java index 23d5deb..f15faf7 100644 --- a/back/test/src/test/kar/karideo/TestHealthCheck.java +++ b/back/test/src/test/atriasoft/karideo/TestHealthCheck.java @@ -1,6 +1,4 @@ -package test.kar.karideo; - -import java.io.IOException; +package test.atriasoft.karideo; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; @@ -10,10 +8,10 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.extension.ExtendWith; -import org.kar.archidata.exception.RESTErrorResponseException; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.RESTApi; -import org.kar.karideo.api.HealthCheck.HealthResult; +import org.atriasoft.archidata.exception.RESTErrorResponseException; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.RESTApi; +import org.atriasoft.karideo.api.HealthCheck.HealthResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,29 +25,22 @@ public class TestHealthCheck { @BeforeAll public static void configureWebServer() throws Exception { + ConfigureDb.configure(); LOGGER.info("configure server ..."); webInterface = new WebLauncherTest(); - LOGGER.info("Create DB"); - try { - webInterface.migrateDB(); - } catch (final Exception ex) { - ex.printStackTrace(); - LOGGER.error("Detect an error: {}", ex.getMessage()); - } LOGGER.info("Start REST (BEGIN)"); webInterface.process(); LOGGER.info("Start REST (DONE)"); api = new RESTApi(ConfigBaseVariable.apiAdress); + api.setToken(Common.ADMIN_TOKEN); } @AfterAll - public static void stopWebServer() throws InterruptedException, IOException { + public static void stopWebServer() throws Exception { LOGGER.info("Kill the web server"); webInterface.stop(); webInterface = null; - LOGGER.info("Remove the test db"); - // DBEntry.closeAllForceMode(); - ConfigBaseVariable.clearAllValue(); + ConfigureDb.clear(); } @Order(1) diff --git a/back/test/src/test/kar/karideo/WebLauncherTest.java b/back/test/src/test/atriasoft/karideo/WebLauncherTest.java similarity index 75% rename from back/test/src/test/kar/karideo/WebLauncherTest.java rename to back/test/src/test/atriasoft/karideo/WebLauncherTest.java index 43789e3..dd78d36 100755 --- a/back/test/src/test/kar/karideo/WebLauncherTest.java +++ b/back/test/src/test/atriasoft/karideo/WebLauncherTest.java @@ -1,7 +1,7 @@ -package test.kar.karideo; +package test.atriasoft.karideo; -import org.kar.karideo.WebLauncher; +import org.atriasoft.karideo.WebLauncher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/front/index.html b/front/index.html index 9634717..7426d26 100644 --- a/front/index.html +++ b/front/index.html @@ -2,6 +2,7 @@ + Karideo diff --git a/front/package.json b/front/package.json index 252a639..84b115f 100644 --- a/front/package.json +++ b/front/package.json @@ -29,64 +29,66 @@ "*.{ts,tsx,js,jsx,json}": "prettier --write" }, "dependencies": { + "react-speech-recognition": "4.0.0", + "regenerator-runtime": "0.14.1", "@locator/babel-jsx": "0.4.4", "@trivago/prettier-plugin-sort-imports": "5.2.2", - "@chakra-ui/cli": "3.8.1", - "@chakra-ui/react": "3.8.1", + "@chakra-ui/cli": "3.16.0", + "@chakra-ui/react": "3.16.0", "@emotion/react": "11.14.0", "allotment": "1.20.3", "css-mediaquery": "0.1.2", "dayjs": "1.11.13", "history": "5.3.0", - "next-themes": "^0.4.4", - "react": "19.0.0", - "react-dom": "19.0.0", + "next-themes": "^0.4.6", + "react": "19.1.0", + "react-dom": "19.1.0", "react-error-boundary": "5.0.0", "react-icons": "5.5.0", - "react-router-dom": "7.2.0", - "react-select": "5.10.0", + "react-router-dom": "7.5.0", + "react-select": "5.10.1", "react-use": "17.6.0", "zod": "3.24.2", "zustand": "5.0.3" }, "devDependencies": { "@chakra-ui/styled-system": "^2.12.0", - "@playwright/test": "1.50.1", - "@storybook/addon-actions": "8.5.8", - "@storybook/addon-essentials": "8.5.8", - "@storybook/addon-links": "8.5.8", - "@storybook/addon-mdx-gfm": "8.5.8", - "@storybook/react": "8.5.8", - "@storybook/react-vite": "8.5.8", - "@storybook/theming": "8.5.8", + "@playwright/test": "1.51.1", + "@storybook/addon-actions": "8.6.12", + "@storybook/addon-essentials": "8.6.12", + "@storybook/addon-links": "8.6.12", + "@storybook/addon-mdx-gfm": "8.6.12", + "@storybook/react": "8.6.12", + "@storybook/react-vite": "8.6.12", + "@storybook/theming": "8.6.12", "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "16.2.0", + "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", "@trivago/prettier-plugin-sort-imports": "5.2.2", "@types/jest": "29.5.14", - "@types/node": "22.13.5", - "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "@typescript-eslint/eslint-plugin": "8.24.1", - "@typescript-eslint/parser": "8.24.1", + "@types/node": "22.14.1", + "@types/react": "19.1.2", + "@types/react-dom": "19.1.2", + "@typescript-eslint/eslint-plugin": "8.30.1", + "@typescript-eslint/parser": "8.30.1", "@vitejs/plugin-react": "4.3.4", - "eslint": "9.21.0", + "eslint": "9.24.0", "eslint-plugin-import": "2.31.0", - "eslint-plugin-react": "7.37.4", - "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-storybook": "0.11.3", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-storybook": "0.12.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "knip": "5.44.5", - "lint-staged": "15.4.3", - "npm-check-updates": "^17.1.15", - "prettier": "3.5.2", - "puppeteer": "24.2.1", - "react-is": "19.0.0", - "storybook": "8.5.8", + "knip": "5.50.3", + "lint-staged": "15.5.1", + "npm-check-updates": "^17.1.18", + "prettier": "3.5.3", + "puppeteer": "24.6.1", + "react-is": "19.1.0", + "storybook": "8.6.12", "ts-node": "10.9.2", - "typescript": "5.7.3", - "vite": "6.1.1", - "vitest": "3.0.6" + "typescript": "5.8.3", + "vite": "6.2.6", + "vitest": "3.1.1" } } diff --git a/front/pnpm-lock.yaml b/front/pnpm-lock.yaml index c749768..cdcf74e 100644 --- a/front/pnpm-lock.yaml +++ b/front/pnpm-lock.yaml @@ -9,23 +9,23 @@ importers: .: dependencies: '@chakra-ui/cli': - specifier: 3.8.1 - version: 3.8.1(@chakra-ui/react@3.8.1(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + specifier: 3.16.0 + version: 3.16.0(@chakra-ui/react@3.16.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@chakra-ui/react': - specifier: 3.8.1 - version: 3.8.1(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 3.16.0 + version: 3.16.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@emotion/react': specifier: 11.14.0 - version: 11.14.0(@types/react@19.0.10)(react@19.0.0) + version: 11.14.0(@types/react@19.1.2)(react@19.1.0) '@locator/babel-jsx': specifier: 0.4.4 - version: 0.4.4(@babel/core@7.26.8)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + version: 0.4.4(@babel/core@7.26.8)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) '@trivago/prettier-plugin-sort-imports': specifier: 5.2.2 - version: 5.2.2(prettier@3.5.2) + version: 5.2.2(prettier@3.5.3) allotment: specifier: 1.20.3 - version: 1.20.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 1.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) css-mediaquery: specifier: 0.1.2 version: 0.1.2 @@ -36,69 +36,75 @@ importers: specifier: 5.3.0 version: 5.3.0 next-themes: - specifier: ^0.4.4 - version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: - specifier: 19.0.0 - version: 19.0.0 + specifier: 19.1.0 + version: 19.1.0 react-dom: - specifier: 19.0.0 - version: 19.0.0(react@19.0.0) + specifier: 19.1.0 + version: 19.1.0(react@19.1.0) react-error-boundary: specifier: 5.0.0 - version: 5.0.0(react@19.0.0) + version: 5.0.0(react@19.1.0) react-icons: specifier: 5.5.0 - version: 5.5.0(react@19.0.0) + version: 5.5.0(react@19.1.0) react-router-dom: - specifier: 7.2.0 - version: 7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 7.5.0 + version: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-select: - specifier: 5.10.0 - version: 5.10.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 5.10.1 + version: 5.10.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-speech-recognition: + specifier: 4.0.0 + version: 4.0.0(react@19.1.0) react-use: specifier: 17.6.0 - version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + regenerator-runtime: + specifier: 0.14.1 + version: 0.14.1 zod: specifier: 3.24.2 version: 3.24.2 zustand: specifier: 5.0.3 - version: 5.0.3(@types/react@19.0.10)(react@19.0.0) + version: 5.0.3(@types/react@19.1.2)(react@19.1.0) devDependencies: '@chakra-ui/styled-system': specifier: ^2.12.0 - version: 2.12.0(react@19.0.0) + version: 2.12.0(react@19.1.0) '@playwright/test': - specifier: 1.50.1 - version: 1.50.1 + specifier: 1.51.1 + version: 1.51.1 '@storybook/addon-actions': - specifier: 8.5.8 - version: 8.5.8(storybook@8.5.8(prettier@3.5.2)) + specifier: 8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-essentials': - specifier: 8.5.8 - version: 8.5.8(@types/react@19.0.10)(storybook@8.5.8(prettier@3.5.2)) + specifier: 8.6.12 + version: 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-links': - specifier: 8.5.8 - version: 8.5.8(react@19.0.0)(storybook@8.5.8(prettier@3.5.2)) + specifier: 8.6.12 + version: 8.6.12(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-mdx-gfm': - specifier: 8.5.8 - version: 8.5.8(storybook@8.5.8(prettier@3.5.2)) + specifier: 8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/react': - specifier: 8.5.8 - version: 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))(typescript@5.7.3) + specifier: 8.6.12 + version: 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': - specifier: 8.5.8 - version: 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(storybook@8.5.8(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0)) + specifier: 8.6.12 + version: 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.34.6)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0)) '@storybook/theming': - specifier: 8.5.8 - version: 8.5.8(storybook@8.5.8(prettier@3.5.2)) + specifier: 8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@testing-library/jest-dom': specifier: 6.6.3 version: 6.6.3 '@testing-library/react': - specifier: 16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -106,77 +112,77 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.13.5 - version: 22.13.5 + specifier: 22.14.1 + version: 22.14.1 '@types/react': - specifier: 19.0.10 - version: 19.0.10 + specifier: 19.1.2 + version: 19.1.2 '@types/react-dom': - specifier: 19.0.4 - version: 19.0.4(@types/react@19.0.10) + specifier: 19.1.2 + version: 19.1.2(@types/react@19.1.2) '@typescript-eslint/eslint-plugin': - specifier: 8.24.1 - version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.30.1 + version: 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': - specifier: 8.24.1 - version: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.30.1 + version: 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) '@vitejs/plugin-react': specifier: 4.3.4 - version: 4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0)) eslint: - specifier: 9.21.0 - version: 9.21.0(jiti@2.4.2) + specifier: 9.24.0 + version: 9.24.0(jiti@2.4.2) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2)) eslint-plugin-react: - specifier: 7.37.4 - version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) + specifier: 7.37.5 + version: 7.37.5(eslint@9.24.0(jiti@2.4.2)) eslint-plugin-react-hooks: - specifier: 5.1.0 - version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.24.0(jiti@2.4.2)) eslint-plugin-storybook: - specifier: 0.11.3 - version: 0.11.3(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 0.12.0 + version: 0.12.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + version: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 knip: - specifier: 5.44.5 - version: 5.44.5(@types/node@22.13.5)(typescript@5.7.3) + specifier: 5.50.3 + version: 5.50.3(@types/node@22.14.1)(typescript@5.8.3) lint-staged: - specifier: 15.4.3 - version: 15.4.3 + specifier: 15.5.1 + version: 15.5.1 npm-check-updates: - specifier: ^17.1.15 - version: 17.1.15 + specifier: ^17.1.18 + version: 17.1.18 prettier: - specifier: 3.5.2 - version: 3.5.2 + specifier: 3.5.3 + version: 3.5.3 puppeteer: - specifier: 24.2.1 - version: 24.2.1(typescript@5.7.3) + specifier: 24.6.1 + version: 24.6.1(typescript@5.8.3) react-is: - specifier: 19.0.0 - version: 19.0.0 + specifier: 19.1.0 + version: 19.1.0 storybook: - specifier: 8.5.8 - version: 8.5.8(prettier@3.5.2) + specifier: 8.6.12 + version: 8.6.12(prettier@3.5.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@22.13.5)(typescript@5.7.3) + version: 10.9.2(@types/node@22.14.1)(typescript@5.8.3) typescript: - specifier: 5.7.3 - version: 5.7.3 + specifier: 5.8.3 + version: 5.8.3 vite: - specifier: 6.1.1 - version: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + specifier: 6.2.6 + version: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) vitest: - specifier: 3.0.6 - version: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@20.0.3)(yaml@2.7.0) + specifier: 3.1.1 + version: 3.1.1(@types/debug@4.1.12)(@types/node@22.14.1)(jiti@2.4.2)(jsdom@20.0.3)(yaml@2.7.0) packages: @@ -191,8 +197,8 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@ark-ui/react@4.9.1': - resolution: {integrity: sha512-grnfoSUrGxN0VMgtf4yvpMgin2T4ERINqYm3x/XKny+q2iIO76PD7yjNP7IW+CDmNxy3QPOidcvRiCyy6x0LGA==} + '@ark-ui/react@5.5.0': + resolution: {integrity: sha512-zLERNKOrf77K0OMOLoo5+jZQn9uXxYck56gBzx/zhW2SjFe0M2lE6VyaIiwgKGIqbGre59gD9/tyTsqO6bqARQ==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' @@ -845,14 +851,14 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@chakra-ui/cli@3.8.1': - resolution: {integrity: sha512-k4U6Ik9GFh3ntroVhlxRZzuQWiGXDFfMCa0js8qp7sfWoT7Vqyxc2uTiUB/+x3mGFhK7oaMYM5jTBkAs12rYcw==} + '@chakra-ui/cli@3.16.0': + resolution: {integrity: sha512-hQVsWWhGzgUF+KZGquVqhxlSoq28Dlv5w6+UheAOS9rXow0UKBzlvD/utUfMQeUcTp6P0rE54epV5tSQT13hDw==} hasBin: true peerDependencies: '@chakra-ui/react': '>=3.0.0-next.0' - '@chakra-ui/react@3.8.1': - resolution: {integrity: sha512-U1SIjSENiJ62tVKGq/fLDcQWSnzjVAsKCqNNIfg5RtPOP4y7j0k//n9HPsmGVLrBEJb5JGSTsudfFen0t/dHBQ==} + '@chakra-ui/react@3.16.0': + resolution: {integrity: sha512-NZLGQgIPr/hLeyBoQyUqzaru+RGrs4Zy1kGpnBNGnL2UrCLZryHvax/pdfqId8cJjhWPGxokJUTVcTTMPnN3Gg==} peerDependencies: '@emotion/react': '>=11' react: '>=18' @@ -866,11 +872,11 @@ packages: peerDependencies: react: '>=16.8.0' - '@clack/core@0.4.1': - resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} + '@clack/core@0.4.2': + resolution: {integrity: sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==} - '@clack/prompts@0.9.1': - resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} + '@clack/prompts@0.10.1': + resolution: {integrity: sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -920,290 +926,152 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1218,20 +1086,24 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.0': + resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.12.0': resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.0': - resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.21.0': - resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} + '@eslint/js@9.24.0': + resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1245,9 +1117,6 @@ packages: '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.12': - resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} - '@floating-ui/dom@1.6.13': resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} @@ -1410,26 +1279,14 @@ packages: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - '@nodelib/fs.scandir@4.0.1': - resolution: {integrity: sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==} - engines: {node: '>=18.18.0'} - '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - '@nodelib/fs.stat@4.0.0': - resolution: {integrity: sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==} - engines: {node: '>=18.18.0'} - '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nodelib/fs.walk@3.0.1': - resolution: {integrity: sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==} - engines: {node: '>=18.18.0'} - '@pandacss/is-valid-prop@0.41.0': resolution: {integrity: sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==} @@ -1437,13 +1294,13 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.50.1': - resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} + '@playwright/test@1.51.1': + resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} engines: {node: '>=18'} hasBin: true - '@puppeteer/browsers@2.7.1': - resolution: {integrity: sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==} + '@puppeteer/browsers@2.10.0': + resolution: {integrity: sha512-HdHF4rny4JCvIcm7V1dpvpctIGqM3/Me255CB44vW7hDG1zYMmcBMjpNqZEDxdCfXGLkx5kP0+Jz5DUS+ukqtA==} engines: {node: '>=18'} hasBin: true @@ -1567,113 +1424,105 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@snyk/github-codeowners@1.1.0': - resolution: {integrity: sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==} - engines: {node: '>=8.10'} - hasBin: true - - '@storybook/addon-actions@8.5.8': - resolution: {integrity: sha512-7J0NAz+WDw1NmvmKIh0Qr5cxgVRDPFC5fmngbDNxedk147TkwrgmqOypgEi/SAksHbTWxJclbimoqdcsNtWffA==} + '@storybook/addon-actions@8.6.12': + resolution: {integrity: sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-backgrounds@8.5.8': - resolution: {integrity: sha512-TsQFagQ95+d7H3/+qUZKI2B0SEK8iu6CV13cyry9Dm59nn2bBylFrwx4I3xDQUOWMiSF6QIRjCYzxKQ/jJ5OEg==} + '@storybook/addon-backgrounds@8.6.12': + resolution: {integrity: sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-controls@8.5.8': - resolution: {integrity: sha512-3iifI8mBGPsiPmV9eAYk+tK9i+xuWhVsa+sXz01xTZ/0yoOREpp972hka86mtCqdDTOJIpzh1LmxvB218OssvQ==} + '@storybook/addon-controls@8.6.12': + resolution: {integrity: sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-docs@8.5.8': - resolution: {integrity: sha512-zKVUqE0UGiq1gZtY2TX57SYB4RIsdlbTDxKW2JZ9HhZGLvZ5Qb7AvdiKTZxfOepGhuw3UcNXH/zCFkFCTJifMw==} + '@storybook/addon-docs@8.6.12': + resolution: {integrity: sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-essentials@8.5.8': - resolution: {integrity: sha512-sCNvMZqL6dywnyHuZBrWl4f6QXsvpJHOioL3wJJKaaRMZmctbFmS0u6J8TQjmgZhQfyRzuJuhr1gJg9oeqp6AA==} + '@storybook/addon-essentials@8.6.12': + resolution: {integrity: sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-highlight@8.5.8': - resolution: {integrity: sha512-kkldtFrY0oQJY/vfNLkV66hVgtp66OO8T68KoZFsmUz4a3iYgzDS8WF+Av2/9jthktFvMchjFr8NKOno9YBGIg==} + '@storybook/addon-highlight@8.6.12': + resolution: {integrity: sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-links@8.5.8': - resolution: {integrity: sha512-nLfcWhqDCTaEB/zPjzdN+FtsJ3WnvrRE7Uq+UZHF/HDqt7EXicUYCnbzHIF6ReyNBFklr48O/RhotDu9cyUDlw==} + '@storybook/addon-links@8.6.12': + resolution: {integrity: sha512-AfKujFHoAxhxq4yu+6NwylltS9lf5MPs1eLLXvOlwo3l7Y/c68OdxJ7j68vLQhs9H173WVYjKyjbjFxJWf/YYg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.5.8 + storybook: ^8.6.12 peerDependenciesMeta: react: optional: true - '@storybook/addon-mdx-gfm@8.5.8': - resolution: {integrity: sha512-jUq2CsZnSqIHpbMfsV4P+H+UTdvekYAb1paB5xRFEEj53WFKKAnc51VCY3yJ/Jwn/NuicDOXHM/GHLp/+1cr/w==} + '@storybook/addon-mdx-gfm@8.6.12': + resolution: {integrity: sha512-OKI5+O8xyK8axGPFwkl38NGJ6Rjf7kyhiBPxw5NuHOjOnU/FL4Pw3QmY47TT96TVws27vP3gF5+FX8lj3Dd3rQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-measure@8.5.8': - resolution: {integrity: sha512-xf84ByTRkFPoNSck6Z5OJ0kXTYAYgmg/0Ke0eCY/CNgwh7lfjYQBrcjuKiYZ6jyRUMLdysXzIfF9/2MeFqLfIg==} + '@storybook/addon-measure@8.6.12': + resolution: {integrity: sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-outline@8.5.8': - resolution: {integrity: sha512-NAC9VWZFg2gwvduzJRVAtxPeQfJjB8xfDDgcGjgLOCSQkZDDOmGVdLXf78pykMQKyuu/0YZ989KufAac6kRG5g==} + '@storybook/addon-outline@8.6.12': + resolution: {integrity: sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-toolbars@8.5.8': - resolution: {integrity: sha512-AfGdMNBp+vOjyiFKlOyUFLIU0kN1QF4PhVBqd0vYkWAk2w9n6a/ZlG0TcJGe7K5+bcvmZDAerYMKbDMSeg9bAw==} + '@storybook/addon-toolbars@8.6.12': + resolution: {integrity: sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/addon-viewport@8.5.8': - resolution: {integrity: sha512-SdoRb4bH99Knj2R+rTcMQQxHrtcIO1GLzTFitAefxBE1OUkq8FNLHMHd0Ip/sCQGLW/5F03U70R2uh7SkhBBYA==} + '@storybook/addon-viewport@8.6.12': + resolution: {integrity: sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/blocks@8.5.8': - resolution: {integrity: sha512-O6tJDJM83fDm3ZP1+lTf24l7HOTzSRXkkMDD7zB/JHixzlj9p6wI4UQc2lplLadDCa5ya1IwyE7zUDN/0UfC5Q==} + '@storybook/blocks@8.6.12': + resolution: {integrity: sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^8.5.8 + storybook: ^8.6.12 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.5.8': - resolution: {integrity: sha512-nm07wXP4MN7HlWqLRomSFHibwrwiY7V4kTohgsXSjTUod0J+xY+XvmkM4YRK2QYcUgVesG+Q2q3Q5NHof07sfg==} + '@storybook/builder-vite@8.6.12': + resolution: {integrity: sha512-Gju21ud/3Qw4v2vLNaa5SuJECsI9ICNRr2G0UyCCzRvCHg8jpA9lDReu2NqhLDyFIuDG+ZYT38gcaHEUoNQ8KQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.12 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/components@8.5.8': - resolution: {integrity: sha512-PPEMqWPXn7rX+qISaOOv9CDSuuvG538f0+4M5Ppq2LwpjXecgOG5ktqJF0ZqxmTytT+RpEaJmgjGW0dMAKZswA==} + '@storybook/components@8.6.12': + resolution: {integrity: sha512-FiaE8xvCdvKC2arYusgtlDNZ77b8ysr8njAYQZwwaIHjy27TbR2tEpLDCmUwSbANNmivtc/xGEiDDwcNppMWlQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.5.8': - resolution: {integrity: sha512-OT02DQhkGpBgn5P+nZOZmbzxqubC4liVqbhpjp/HOGi5cOA3+fCJzDJeSDTu+pPh7dZnopC4XnR+5dWjtOJHdA==} + '@storybook/core@8.6.12': + resolution: {integrity: sha512-t+ZuDzAlsXKa6tLxNZT81gEAt4GNwsKP/Id2wluhmUWD/lwYW0uum1JiPUuanw8xD6TdakCW/7ULZc7aQUBLCQ==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.5.8': - resolution: {integrity: sha512-9p+TFutbvtPYEmg14UsvqBDWKP/p/+OkIdi+gkwCMw0yiJF/+7ErMHDB0vr5SpJpU7SFQmfpY2c/LaglEtaniw==} + '@storybook/csf-plugin@8.6.12': + resolution: {integrity: sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==} peerDependencies: - storybook: ^8.5.8 - - '@storybook/csf@0.1.12': - resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} + storybook: ^8.6.12 '@storybook/csf@0.1.13': resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} @@ -1688,44 +1537,44 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/manager-api@8.5.8': - resolution: {integrity: sha512-ik3yikvYxAJMDFg0s3Pm7hZWucAlkFaaO7e2RlfOctaJFdaEi3evR4RS7GdmS38uKBEk31RC7x+nnIJkqEC59A==} + '@storybook/manager-api@8.6.12': + resolution: {integrity: sha512-O0SpISeJLNTQvhSBOsWzzkCgs8vCjOq1578rwqHlC6jWWm4QmtfdyXqnv7rR1Hk08kQ+Dzqh0uhwHx0nfwy4nQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.5.8': - resolution: {integrity: sha512-HJoz2o28VVprnU5OG6JO6CHrD3ah6qVPWixbnmyUKd0hOYF5dayK5ptmeLyUpYX56Eb2KoYcuVaeQqAby4RkNw==} + '@storybook/preview-api@8.6.12': + resolution: {integrity: sha512-84FE3Hrs0AYKHqpDZOwx1S/ffOfxBdL65lhCoeI8GoWwCkzwa9zEP3kvXBo/BnEDO7nAfxvMhjASTZXbKRJh5Q==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.5.8': - resolution: {integrity: sha512-UT/kGJHPW+HLNCTmI1rV1to+dUZuXKUTaRv2wZ2BUq2/gjIuePyqQZYVQeb0LkZbuH2uviLrPfXpS5d3/RSUJw==} + '@storybook/react-dom-shim@8.6.12': + resolution: {integrity: sha512-51QvoimkBzYs8s3rCYnY5h0cFqLz/Mh0vRcughwYaXckWzDBV8l67WBO5Xf5nBsukCbWyqBVPpEQLww8s7mrLA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.5.8 + storybook: ^8.6.12 - '@storybook/react-vite@8.5.8': - resolution: {integrity: sha512-Fa3WjqMsY/52p8IHX52IofbvQpoh88cFA/SQ8Q6RUGCNvUVYG/l025pBYbm+PhAkKDQXTirRul9CwA66gGR9zA==} + '@storybook/react-vite@8.6.12': + resolution: {integrity: sha512-UA2Kule99oyFgHdhcuhrRwCKyWu/yMbqbl9U7NwowFHNwWWFjVMMir/AmfShb/H1C1DQ3LqOad6/QwJyPLjP8g==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.5.8 + '@storybook/test': 8.6.12 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.5.8 + storybook: ^8.6.12 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: '@storybook/test': optional: true - '@storybook/react@8.5.8': - resolution: {integrity: sha512-QYgKpInR2FLiJHsRoGKCzNhKTRNjOssbLZVd3B0ZABUee+AjkwE0Pey7x2XaNAcp9PxSjQXEPGu+DlaP4BWw2Q==} + '@storybook/react@8.6.12': + resolution: {integrity: sha512-NzxlHLA5DkDgZM/dMwTYinuzRs6rsUPmlqP+NIv6YaciQ4NGnTYyOC7R/SqI6HHFm8ZZ5eMYvpfiFmhZ9rU+rQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.5.8 + '@storybook/test': 8.6.12 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.5.8 + storybook: ^8.6.12 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -1733,8 +1582,8 @@ packages: typescript: optional: true - '@storybook/theming@8.5.8': - resolution: {integrity: sha512-/Rm6BV778sCT+3Ok861VYmw9BlEV5zcCq2zg5TOVuk8HqZw7H7VHtubVsjukEuhveYCs+oF+i2tv/II6jh6jdg==} + '@storybook/theming@8.6.12': + resolution: {integrity: sha512-6VjZg8HJ2Op7+KV7ihJpYrDnFtd9D1jrQnUS8LckcpuBXrIEbaut5+34ObY8ssQnSqkk2GwIZBBBQYQBCVvkOw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -1749,8 +1598,8 @@ packages: resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/react@16.2.0': - resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -1880,14 +1729,14 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.13.5': - resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} + '@types/node@22.14.1': + resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/react-dom@19.0.4': - resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} + '@types/react-dom@19.1.2': + resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} peerDependencies: '@types/react': ^19.0.0 @@ -1896,8 +1745,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.0.10': - resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} + '@types/react@19.1.2': + resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -1923,80 +1772,80 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.24.1': - resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + '@typescript-eslint/eslint-plugin@8.30.1': + resolution: {integrity: sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.24.1': - resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + '@typescript-eslint/parser@8.30.1': + resolution: {integrity: sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.0': - resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} + '@typescript-eslint/scope-manager@8.28.0': + resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + '@typescript-eslint/scope-manager@8.30.1': + resolution: {integrity: sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.1': - resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + '@typescript-eslint/type-utils@8.30.1': + resolution: {integrity: sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.0': - resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} + '@typescript-eslint/types@8.28.0': + resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + '@typescript-eslint/types@8.30.1': + resolution: {integrity: sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.0': - resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} + '@typescript-eslint/typescript-estree@8.28.0': + resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + '@typescript-eslint/typescript-estree@8.30.1': + resolution: {integrity: sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.0': - resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} + '@typescript-eslint/utils@8.28.0': + resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + '@typescript-eslint/utils@8.30.1': + resolution: {integrity: sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.0': - resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} + '@typescript-eslint/visitor-keys@8.28.0': + resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + '@typescript-eslint/visitor-keys@8.30.1': + resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@visulima/boxen@1.0.29': - resolution: {integrity: sha512-z+JkZVhUTKfAdM1vjILnWwAd75NFFZH0/4Y2ByYnXNroZq5fB9Qv316lyA4LI9DZgoFhxgwf9Z+HWw8tagLvWw==} + '@visulima/boxen@1.0.30': + resolution: {integrity: sha512-izo776RvDFeipY7tJspA0wFrcq/Ih0Qhe/zu6v7O4OlURy2ViFmy+2ZSUYTHSSwKrmVeZWrUUJSpaepZPLPMMQ==} engines: {node: '>=18.0.0 <=23.x'} os: [darwin, linux, win32] @@ -2006,11 +1855,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@3.0.6': - resolution: {integrity: sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==} + '@vitest/expect@3.1.1': + resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} - '@vitest/mocker@3.0.6': - resolution: {integrity: sha512-KPztr4/tn7qDGZfqlSPQoF2VgJcKxnDNhmfR3VgZ6Fy1bO8T9Fc1stUiTXtqz0yG24VpD00pZP5f8EOFknjNuQ==} + '@vitest/mocker@3.1.1': + resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -2020,224 +1869,233 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.6': - resolution: {integrity: sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==} + '@vitest/pretty-format@3.1.1': + resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} - '@vitest/runner@3.0.6': - resolution: {integrity: sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==} + '@vitest/runner@3.1.1': + resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} - '@vitest/snapshot@3.0.6': - resolution: {integrity: sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==} + '@vitest/snapshot@3.1.1': + resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} - '@vitest/spy@3.0.6': - resolution: {integrity: sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==} + '@vitest/spy@3.1.1': + resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} - '@vitest/utils@3.0.6': - resolution: {integrity: sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==} + '@vitest/utils@3.1.1': + resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} '@xobotyi/scrollbar-width@1.9.5': resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - '@zag-js/accordion@0.82.1': - resolution: {integrity: sha512-DWaElpm6RhntW8zVPMfd+s461FuXi6rv4pDPpXb4xCAJ0KTkBzS6PFxoBLL+11Mjv9XioaBoJatIGOCF8GAtTA==} + '@zag-js/accordion@1.8.2': + resolution: {integrity: sha512-JszESCOvftl3dG6lEPjZp2p3+0VN0fwMnW+1jhWwMEe5MZ0y0IrcXww2dxet1ln+w5ViRdOTeDR07idbDKYAYg==} - '@zag-js/anatomy@0.82.1': - resolution: {integrity: sha512-wpgU7LyU9St3o/ft8Nkundi7MkW37vN1hYc2E7VA/R6mun0qiANsEf83ymIlAYnovLC6WUlBso9xwqejr6wRCg==} + '@zag-js/anatomy@1.8.2': + resolution: {integrity: sha512-F88Q+Bo1KOFZPHLffOqiuemkgZJbtspQuyOJcWb0bL7Lc1pYC4DIpIj26bcXT8xICDNcwR877hI0Wko//ZgTVA==} - '@zag-js/aria-hidden@0.82.1': - resolution: {integrity: sha512-KSz9oMY9rn1N3k3tFTKHlU66eQf8XZ/gy/ex27J0ykZoaYJplWQerSZvVakbILeh+rtpvdiTNaSgrCAwYwvAPA==} + '@zag-js/aria-hidden@1.8.2': + resolution: {integrity: sha512-/SV23qfCWMbGdsNZ2pgmVqOv6a4yd/2+FAIRy/6bjZ8axBzhm7NvfDhqjZciN4JuMch82uafeTBZ7pObk/fU1g==} - '@zag-js/auto-resize@0.82.1': - resolution: {integrity: sha512-adOB7Y4p4i6b8GJv4V6qhlK1YRj4Ejs5I+eWFd8Rx535uQIcxEEVtpEAD5SRYg5PNk1ikaT+GCoHnTadGj6PuA==} + '@zag-js/auto-resize@1.8.2': + resolution: {integrity: sha512-Z+94iR/vbPixiifjF+pmOa1UtuM5TTnJqM7D+Ol3WenRrm+Urp4JWAcyaf76NRVWK51KwMwWLljeA6J0H3V6gQ==} - '@zag-js/avatar@0.82.1': - resolution: {integrity: sha512-XjRvDRmBxwy5OtIzlQOpf7zNk4g0b/uA7qZve5Hz0R7yWOu+NFlbFv0GsvRfgyYMCT5J0xBu271EG9FJq3QKyw==} + '@zag-js/avatar@1.8.2': + resolution: {integrity: sha512-PWhYVvXyOt+kdi2Vd6GfqGQQruh1TNylw6TzNbhPt3B6Fj6uNvQqfEsh6yNErfnCeaa4b/Q+48rM4b/t3DzM0g==} - '@zag-js/carousel@0.82.1': - resolution: {integrity: sha512-MO9+9oedxdKynxgvLLzXs+VQSOhu+GvsCLV4fBt7nMBMGIRHtRSzXHRNRkO0aqbsO/nKQ8TFH7GYzI1NqT/y4A==} + '@zag-js/carousel@1.8.2': + resolution: {integrity: sha512-ViPcVQFQfw8ry3i4m2HYixTfN5Km979TWtMnDKdDM3csXLOQJvfCIHtZ/08wWn1302zaDMQe72+p9jDqzqntMg==} - '@zag-js/checkbox@0.82.1': - resolution: {integrity: sha512-yD/h8ao/JTljEo+zthpKzTy/f9fqOlJ7Nd6psPoSKZy2MRGD0TDUbOjravb3icVgjTLCiaPVWMWdonny08Me6A==} + '@zag-js/checkbox@1.8.2': + resolution: {integrity: sha512-KWVKo2Cofs9bjKf9QN9d9UJ6jQFuKfTPT4smDIqhXo4MIFa5eOd6yxvwbgvLvBlvvr9I6Amm9T4e9XxFbyrHdA==} - '@zag-js/clipboard@0.82.1': - resolution: {integrity: sha512-r1r3vwozs+lyNgccR3OfmYAydP0cJbIHGsgDKGuempinqv6xIoptHOkFgWNd6Kxz/3MnxP+BMEy6fZzECXkhdQ==} + '@zag-js/clipboard@1.8.2': + resolution: {integrity: sha512-KwyFxLDPkEwjiI6zxRKG1gQk1q+lL1HN6nvGCMKRxoDtYVaY9VRxQ6mVNg2VUIecM8uuhRnkM1WHGrSTUcaFcQ==} - '@zag-js/collapsible@0.82.1': - resolution: {integrity: sha512-TuggUoXRVBOwACksi63TsN2rOukzUpe6oVMUvp9MaQaDbg9gpw0JzLTrdAaHfE+bhgXAb3EjN6wcZjq8zBctZQ==} + '@zag-js/collapsible@1.8.2': + resolution: {integrity: sha512-rtvR4WaMnjv0cW6f+wYqIKkRGhckqlY7nVYBUjGqIzlKq0VNzRgugS8qWpoqdupQJ9wyjusb/GXLOudqpdl1lw==} - '@zag-js/collection@0.82.1': - resolution: {integrity: sha512-uteM+xWZlWhRQe5biA5QWyva9PdzXONs+bpycUtZt8MakQgPmhW2whY9r1aW5NFVb/ScTwGAIGB3Eyc6Npz7Wg==} + '@zag-js/collection@1.8.2': + resolution: {integrity: sha512-GQ6bMscyX3R5wXct6pIMFNd9vm/Ofux7bAwdavp1RrYu/iMKRg/tLbJIOYMQ9VXpjbiOB+6f2GVtHAM0eYLb6A==} - '@zag-js/color-picker@0.82.1': - resolution: {integrity: sha512-/MShDVBFNnXResLzeyWyKApeHuB9rmUeJo3WD/Bl6rTwjmvVCKRYguIe1SQviOokMLjuAyh0YWXdKMQw0HvMqQ==} + '@zag-js/color-picker@1.8.2': + resolution: {integrity: sha512-WFuU5T99GPtqiD1MBZlurBjNMpHZQmbzaTgO6mdKQv3IKa2+I2jqXlnTnJbjTRmsF2DhAo45mEyGOvLwlTfTNA==} - '@zag-js/color-utils@0.82.1': - resolution: {integrity: sha512-BMSYcBeypGX0wCLszU2jxWBRUmd5/wPDJ59Y3Zwl9yNld0gtMnuBLSUeokMcG0UVQ/BxkyrWu3VDkKTUYKprqQ==} + '@zag-js/color-utils@1.8.2': + resolution: {integrity: sha512-6oB+oxCSQoJu8sw1POQNzFLRN1wFDR5b+DSincqBR1QoKLr5K4iYmwJZ7UySvDF8uZATaShvB/qVVxniUpZ17w==} - '@zag-js/combobox@0.82.1': - resolution: {integrity: sha512-Me3a0Sw4dTtmBRmbLGO/C1LJ4btZwbd5RLYnf8RPhEnqGJ5Z05i+ffWEe+SNBvpQO14njqBcF6P8VypVD/Ro1A==} + '@zag-js/combobox@1.8.2': + resolution: {integrity: sha512-jQo1cDtsUlBMPmBv/P7pUBHpxu19L+Pd5zXWOcdYXXMyFQg/KrW+PLS84G3yk2UCoH7ywKY25wFdMcOrqrTdUw==} - '@zag-js/core@0.82.1': - resolution: {integrity: sha512-Ux0fkt1PumcqLwExcEozCMEfKBxtd2JlnitXo4hR3lJW5q9G52FkgWDyPSrhblyTkX+7RgxViZTMnHxaXs99jg==} + '@zag-js/core@1.8.2': + resolution: {integrity: sha512-vZDvvXuoxKnVXqBS6H6ZGbfxRWaQ9DStVS/a+tLdP0pz05NJwyJIPSWOOHZo9XPDiN4j1mRaTVcSvNpuOSEDTw==} - '@zag-js/date-picker@0.82.1': - resolution: {integrity: sha512-f+4CV29+hcQ3Yw9hh0yyVRANONIUEWIrPS1fpnrrUNtIC0Y7f1Ajx+x089X9VxgQhwreK1sEwpnrL2vIqy+9+A==} + '@zag-js/date-picker@1.8.2': + resolution: {integrity: sha512-SnZgQOxUajnuQUDIcq73Gxy+fifm3/F0H4tokE8LAbbkcf5kr/Pyin+2amhiXBkbDiUbeCttx34TlD4HXwmjyQ==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/date-utils@0.82.1': - resolution: {integrity: sha512-z9sHtgV4fvtXsqLaTD4/o+D+H5wumLYhIw/Bj3yC41gR5oa4Wo9QifRT9DBfvuokmXsrnRZ8k32hUtWoYb6M/A==} + '@zag-js/date-utils@1.8.2': + resolution: {integrity: sha512-KFMcZMb7xC7XypH1VDQIiYv4dpxB+1JEG2QX7zbYos+QKd41A8tNtaDnfJX+iePVsJV156gqiOrtogNvz4rJ8A==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/dialog@0.82.1': - resolution: {integrity: sha512-oqi+6Y/rx6ZKxg3s9r6bIuo33x+5+UDhvrlk31kE3LWgU1KJjVV0VEkFMK9B1SJTY7IizhlWMyDx+JXJ+jOy5Q==} + '@zag-js/dialog@1.8.2': + resolution: {integrity: sha512-1XJIb0/YNBV5LgcRQ7ZwS/GvJiIy1e/iaZvYea6RRAInxcNH6KFon9U1Hm1Lfdz9GryCMs32WDhlFcYQoeGlKw==} - '@zag-js/dismissable@0.82.1': - resolution: {integrity: sha512-vs+zkORzaeNzX4Wsy4OkW1AVce7l4Tc6DHZq8gqNB5SvhK+5wEPl6EmacQRvZyoCxi2m6xpaI98UkLCmVJKU+Q==} + '@zag-js/dismissable@1.8.2': + resolution: {integrity: sha512-YGQB60pr/jbldJlt0LtToriJEMX8ds8uxienPModMgzEPo7yEDf30VMo4Ix8Sm38E6CJBOcm87vKHrrD8aEfnw==} - '@zag-js/dom-query@0.82.1': - resolution: {integrity: sha512-KFtbqDUykQur587hyrGi8LL8GfTS2mqBpIT0kL3E+S63Mq7U84i+hGf3VyNuInMB5ONpkNEk5JN4G9/HWQ6pAQ==} + '@zag-js/dom-query@1.8.1': + resolution: {integrity: sha512-+2DYAW9riWnAAf7etTkaVqpaTHjYSHYGExJtBmZ6KurmYsc7Uw46mAcIImakZhrg69AI0cpL4b2YJHMQz8GGZA==} - '@zag-js/editable@0.82.1': - resolution: {integrity: sha512-V5i3kYSHFJYj8914nBf4VKKtm6m59gG482vm20As4EnLcwGFrOBbm4HXUgsKq0wYSLy/lTtvMrUT8Iqudye2gw==} + '@zag-js/dom-query@1.8.2': + resolution: {integrity: sha512-bn6Pxga19PJzpDb+Oh326kn1sgVfO97mxRzRFqzrKz9NuANGlCblmv2NTYmhfppqE1nt9QyLLhyQ2BLbzwouLg==} - '@zag-js/element-rect@0.82.1': - resolution: {integrity: sha512-xXUjmeIUdxkxic5bepp6fVqN9Qs+54PXCAUl6g/DtJecQVmVooIfa3SLSULhany4aR4mlGojp5TJxvSpUBA58Q==} + '@zag-js/editable@1.8.2': + resolution: {integrity: sha512-NFg5qp2IzE0nvDFf+UyFIIHGFBCyB5r74YIVBb0oJnVcIzrYa1+HA2ZrNMzTnjpZdx7B5lE/99VAsvk2Mb+GtA==} - '@zag-js/element-size@0.82.1': - resolution: {integrity: sha512-k1rOE6NhoULI9d5pt2qVUxWCQVEf3OTPH8UDnbsdf11xn+hMCzRYd9lekUdVGrcHHGvEK+W6iAfWZnlwsJsmow==} + '@zag-js/file-upload@1.8.2': + resolution: {integrity: sha512-b+xt9W5CqFG0NCB4F6C29FcFPlV0q5LC7m7mj7iMhk+dRkWPVhxr9o5SFPtjXLZlncFNgHfMkBU7Ktx5JY8CSA==} - '@zag-js/file-upload@0.82.1': - resolution: {integrity: sha512-6cgJsy9bf2DB0v+CVq1L4g4aCePTpfWsV4C0HC+82K+OSPomiIPsQS87wo4+eAcy3z+80Qh+uglZCFAwkW8W+g==} + '@zag-js/file-utils@1.8.1': + resolution: {integrity: sha512-IdulHjOzPeZWNURY1rM/FbltdnXIOjUsOA7wWAped6oMMtDmWlrfpKtFs2emnXd04mZLnZN9yBO5WtHI7TTWeg==} - '@zag-js/file-utils@0.82.1': - resolution: {integrity: sha512-/u86hMd+E5UCrrY9akDAExkO7sgPA1lXzWC9gSX4LSxHATk7Vo4o5+4LiE1MX4WZRytOhtxAycJzNDVpqzmppQ==} + '@zag-js/file-utils@1.8.2': + resolution: {integrity: sha512-VBn2PeVtfj4c4snVcvp9oVFFiOVwJQ1OvS44CXv2xl9u4hRnDVSHalNmdj5jOqspNmTy9xNCKQWPK73ef26msQ==} - '@zag-js/focus-trap@0.82.1': - resolution: {integrity: sha512-z5OzmR8O3n2043Lwhp1qcizNHXvzc/Xteb3hWmxbX9hR3k0wHJeMXMj3GTDO0FBixRt+d8iHEmt3/8CkI72mqw==} + '@zag-js/focus-trap@1.8.2': + resolution: {integrity: sha512-GzKdicdiVjlOOsNzmmRAZVccs902PXnoyO+qkzXlIsr8+RPRgtPlZthIp6wtr4CJ2vLOMByvrEt7wCNSIoDzxA==} - '@zag-js/focus-visible@0.82.1': - resolution: {integrity: sha512-b87FqZO6e9RmTY4msEzwZ3hZ8pRuPd2vbR2b6SlXr6ohtmGKlGgBGO4kmarZN/ClE+7VOnOEqIicatRBEgX9bw==} + '@zag-js/focus-visible@1.8.2': + resolution: {integrity: sha512-YXkB4ClgEf/gTRGUrTDThvxfThpey41dDKcuQIPTA6F76ji4jLQiDYLnw4KDxLW8uLL21jZgctO5FFdIMoxJeg==} - '@zag-js/highlight-word@0.82.1': - resolution: {integrity: sha512-lS5r3V0l7Z53QyNwkxulYp5QYA9mFkU+3XsZqfM6cBjh+wmGE1xeIwknAmFtYvuYNK37AwT7pp5z0Rm1Ep6WVQ==} + '@zag-js/highlight-word@1.8.2': + resolution: {integrity: sha512-yI65t4bFxTUkZbHuntRCdBPOEQdpO8G4nkoY8WznBetQ1LLhqOd+7KXelzq+Vot2RbXzop54xEBvgKeTQbGOgg==} - '@zag-js/hover-card@0.82.1': - resolution: {integrity: sha512-fp9t/PNXODwxXR1X+VzgYeSpgoJ+M3W/qvuA2stgPI4kEinwKEssSlP2sH6gTmQVZKL8SV1jiNQinVh00NE85g==} + '@zag-js/hover-card@1.8.2': + resolution: {integrity: sha512-GwYGsojbVpyhOCz+XUnEtxA9ZmUlnfPrnE71j/Gc2+oLtOFwvnhINtBTZPCUXO5ec95uG9QFwxc63x1upB/PIA==} - '@zag-js/i18n-utils@0.82.1': - resolution: {integrity: sha512-YcTIqka6+/YoH2VRBMnv3CvTjHdUo/NG2nMenAB9Wq0MLTn+TAtcsujenz7ckJcgayVhFAchWNhwK9+/cs1dAw==} + '@zag-js/i18n-utils@1.8.1': + resolution: {integrity: sha512-Epj/VOsJppsHlo2YwGV718CsZEneH9OVZtD8LB7j/zGXjQr/LALErCQQVOJXlBO6Ky2G/ZE/vK4LyO5GIjkTKw==} - '@zag-js/interact-outside@0.82.1': - resolution: {integrity: sha512-WcWJB5kM41fDM6YMGC3ZEPVn1q3Nrm+cAFkllRJrRY4+bUKXmtN8bqDaRKghP+dG5CXz66SiM6xBvDE4nqtK5Q==} + '@zag-js/i18n-utils@1.8.2': + resolution: {integrity: sha512-Zhiw2U14kkYRPru/5nWYei0l0eiQOkTu2VDCc/mn9jd7+zDEIYNp3b1CvMQ3/ES21i1HH6uBuKKujuktH/f6Iw==} - '@zag-js/live-region@0.82.1': - resolution: {integrity: sha512-BmSXc41y1uOra/UV1lt8BurWkuwne/+c371IJCK6l+MWsO0ufq1lrjfx4cyFf5yhVcPRkhv/b/0i+7RxfDSK1A==} + '@zag-js/interact-outside@1.8.2': + resolution: {integrity: sha512-7N0v/vdsJO5a7AjwWofZ99AP5/hzFfCShSgEfg4GpRk7gPOdFanm7U3Zy9LtVvM9gwRncqGwjo4yd6O5G7SCnA==} - '@zag-js/menu@0.82.1': - resolution: {integrity: sha512-faAlQZYeWHcGH8nIxBYh7HHfVjSKsHV8yUsbhMD0XkePWM6eB+dPRd/Fc3DeT8ieM8+sUODnTHEuxar0i48v4w==} + '@zag-js/live-region@1.8.2': + resolution: {integrity: sha512-QkowjTQj9C6ZFSCB+E7QNU5yjWMA58cAR5TcWgdLLKAP+SJwaTdtptpyFq71VH+jT85sNvvBZVya1aWZrbGopg==} - '@zag-js/number-input@0.82.1': - resolution: {integrity: sha512-QIQlxlxM78+TkEhPEGlTbkBR3G2ngm5vhc3BFw4sG6ABMyre8TiIH37EqQB7EGKyAcuz6QwPk3AervHMFKe4YQ==} + '@zag-js/menu@1.8.2': + resolution: {integrity: sha512-kEz1FJ0kgkutN1XDpS27GAkk1T/v3fUctBHrj0Wvt7TvQfPyzudyjmj35UEP5e8AglJAoQt2Am93YPSQ2deJwg==} - '@zag-js/pagination@0.82.1': - resolution: {integrity: sha512-1Rsd3cSnlewefNB1RBI0ymK5wlgiBcK42H1IrJIhly6+SXDAhp0Oc45ofsCzpfhkQ4be+A9Cb30ayc6J4ZU2kA==} + '@zag-js/number-input@1.8.2': + resolution: {integrity: sha512-oyxXI/FDDj40BMkkLHDu84me3TgLIZizQhMj51R3ZM5Qg5BucYbamQKDgcGbb2CI6BUPo+6jklO0QZmy8/2cTQ==} - '@zag-js/pin-input@0.82.1': - resolution: {integrity: sha512-P7UN7rIt03YHt05SuK+kZ9mhl4AfvCvaSGB/9KzEq5r6p1D3lc4+0LVkkOvL2EEB8vbGY/y5BNcvaF2jPQPH5Q==} + '@zag-js/pagination@1.8.2': + resolution: {integrity: sha512-+Ummfw6r0Ll4oFVRvoVhPSvox8y2vvIocjGip0e6ze8zaUuHgUYzNkcK7OalZ3pZkh9y0+9MlnqtsQwxZhMJPw==} - '@zag-js/popover@0.82.1': - resolution: {integrity: sha512-zZ8H/jcjaXcLRX4dBcmandexeKV/5cBOt4AUVEnd3/X5NFFkA2Njz8rpQFcNRZl814NxG4RCchIu8kmonmUKCA==} + '@zag-js/pin-input@1.8.2': + resolution: {integrity: sha512-TME6Maud8Z78ZxFru7WvBGf5EQAuMoPQfdTMpd8os24srtO+HwiFN1wbeBsV/6BmbOeA9gFuB4K8O8rqNn3uqg==} - '@zag-js/popper@0.82.1': - resolution: {integrity: sha512-vQTmVUs6aLGqKmWb+FnLDntsulvd/sCvgndeTmwOHRW8PBwPb86aDnvNrNosBSS+Kk9p6CMJwWZ6CuPWR5Kf7Q==} + '@zag-js/popover@1.8.2': + resolution: {integrity: sha512-c3uk6t5MG3xluf2LR1adOGnCsKchfRqzB7K9/fyBvWXBFyFiV5DWXdc2NpnzvB0Z5fQVJMrBiMnpvmzqbVovAA==} - '@zag-js/presence@0.82.1': - resolution: {integrity: sha512-eZeAkq2s7NYCiNVMvkWL2Or458hZj71u7ygCt6skA18sO1ZksY+qIFqj99leCov+fesz06Hf8bxZz5029t/Wjg==} + '@zag-js/popper@1.8.2': + resolution: {integrity: sha512-OfZS5KKQZsaENZG1SliM8/shtAKmKrprJuWpn3/kzcOAO/obNZfApld4oa1N5FoePLLTY96qVfdC5W9xygKRDQ==} - '@zag-js/progress@0.82.1': - resolution: {integrity: sha512-Fy1EjUda7o7e/yTKbZgKKayGOsHxkjLG+x0AakHmbR/k2VKbM4QuFHB9RJLlqNd9a+m/BzS1kEKWzCJ7/mXL9Q==} + '@zag-js/presence@1.8.2': + resolution: {integrity: sha512-aT9PPQAY28HeAxiSeIhnOmlkI+tw0ippxtUWenxQ6B3yyU/ZOGVqc4f7eY418z65lF2yziYvUkZgOdWc6E4kZA==} - '@zag-js/qr-code@0.82.1': - resolution: {integrity: sha512-E1N1o1dPVuhWkcrg6urut2aaCqrc16OeE9VJh1mAGIUknF3p0QScH+ql7J/n9r8WOa21xyF6HLKhnWVPRQmHGg==} + '@zag-js/progress@1.8.2': + resolution: {integrity: sha512-QUzPe5Xj0zSexKJ1+JCmQnJ+pZ5EeRjMLWSn4cdeUJtzEuPosBLCzJtMzl+uZ/mTg2YVgPC7l6wV6nfMYrco/g==} - '@zag-js/radio-group@0.82.1': - resolution: {integrity: sha512-YTqP4Ok2YEmEXCEiNW2tufZ6svt4sh7KHqrHZq81vPAJMKKhVosP6LnZvmt4dVn6tKJ0OU8idwFVtPM5jSAWoA==} + '@zag-js/qr-code@1.8.2': + resolution: {integrity: sha512-W47UwF5jBL3NraobAOC9aYFpMFiXhDzgZ6O3f4Zhd3eDx6BnUvebZ+GOfE71EmJ0fu43mF6o3ial8H4nxj2myQ==} - '@zag-js/rating-group@0.82.1': - resolution: {integrity: sha512-ULl0OA207b6Ilsr2QWt4dbx58hA/NnyCmHpvv1pAYSlH3K0Es5b25B80Cc5jM/3NK3yqoY81OkS9U8lxmpWo+A==} + '@zag-js/radio-group@1.8.2': + resolution: {integrity: sha512-WY0QT4XkqgXD1N1VZG11gTnu7rGaPYizZIq/m1NS0ls6b/tTnwdlrPL2bgBzlJtyuuCeQJXh5pTypCiNoAZurg==} - '@zag-js/react@0.82.1': - resolution: {integrity: sha512-CZivUTFQ4TdRKTN+9wpWAo0lEZlMnbjJPVn2VJVpcz+eRNUeoVzevkNY/OzAqdV3mp+VtdNabQn1fAz8ngViPQ==} + '@zag-js/rating-group@1.8.2': + resolution: {integrity: sha512-azCMgF7FAyvDJ+fcAYzFQHhZpeydPW6h7JvYIvLsz/K609D1HJT85gtCzG+drgBhE4tRyvFdYKDkTCvOpVnkGA==} + + '@zag-js/react@1.8.2': + resolution: {integrity: sha512-Fz9WR6wZQOAxCLSTSmUnGL+VH2/HVxvdlOKOHoUrJ0+9QOmlGrZf+mxpJuGgqUW3RyMzzpHfly8TKZkqHRYd3g==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@zag-js/rect-utils@0.82.1': - resolution: {integrity: sha512-gXmvj1wK9FeToOCzvoZ5gycqUNRzfeqd84uwJeG9zA8SVdoyEnoAji8IAynneq8t3LbiNUcu37wjTw0dcWM6ig==} + '@zag-js/rect-utils@1.8.2': + resolution: {integrity: sha512-RWgPe+MOtOJaWjvlGD1Cf1snmD+hem1mfxXqM3XTCZCjuAlqAzHSCyuBUDia96nU0YGgAxYuloQLh8HFLJcVPA==} - '@zag-js/remove-scroll@0.82.1': - resolution: {integrity: sha512-68cvXvqgNOlucbnGKRyephk8Qg8wb4xpjgUdmF9xQwICdY/uhW2p4ZGJ4471TDCDIlpoBrJPYsWqV2oWH3QNfA==} + '@zag-js/remove-scroll@1.8.2': + resolution: {integrity: sha512-zJvLCKcb1yWEdWCP+cDhnYTY1MyoNzuiYOwWTh2YiktQYC0zpd2KDbd+jdhSWIpbIdV22UMuy4sDfFpx6i/mqA==} - '@zag-js/scroll-snap@0.82.1': - resolution: {integrity: sha512-HL3MkBpWx4Cw0+h1UP/PnvLP3Z1T+F5mkeS8HWmiP+KPzhtFiEBRrve+xk7h7BMXifteg2UZy53ZiZfJeGsd3w==} + '@zag-js/scroll-snap@1.8.2': + resolution: {integrity: sha512-kyM4ZsRvq5WuJJZVr1TQ1xjuso0ANhySMtILH1kC9EFGIOwZegnIpZt5K1rf5NBFmBrcBjUl+lEKwySRNFauhw==} - '@zag-js/select@0.82.1': - resolution: {integrity: sha512-cc6D8Iz+Ewnx9L0J63QGqC2bbiwzCEcJVE/j4OZDcy4Qk3lqr3qA09uuJbQxAi7yvIeB44DIEt9ryTZPkZbgiw==} + '@zag-js/select@1.8.2': + resolution: {integrity: sha512-ZsBU7kGp8TX4gNavmiTWz9cB+6KgqHXxSwgARnaYUBsYhpdDG2SYfzgyfGAYcAv4ejNTFEfvNk89h+Kpz4CeOg==} - '@zag-js/signature-pad@0.82.1': - resolution: {integrity: sha512-s8ae88OpAafkpuqimO9beUiVTn3FG+bnWeWnYQOLtNYMCNHzQbVZp9QBNbOoUpNcDT14mx9rfZe98BqfiMohFw==} + '@zag-js/signature-pad@1.8.2': + resolution: {integrity: sha512-Jl3kRbxo3fkey9uqdVDyGROlECa3MpOXaMWDzO58vodrOjjLnZPO1VPF4xvjG5LUsEOGx54R97Tpc2hS3t93Pw==} - '@zag-js/slider@0.82.1': - resolution: {integrity: sha512-qXVvXbDRq6Cla036M9OH6plO7ubefM7k65NJQKjtITDua+VliKQLXj9BrdPLT9K96wWntW+D/TiZXE+JNbR4ow==} + '@zag-js/slider@1.8.2': + resolution: {integrity: sha512-+tncZezgA4FVHV6M7a6lV3cPJUa5OsP7ouXkYGw7Z3cvOoFLaL+bxaCe/UHouRTKqoZj4ImR83x85xcIj50e1g==} - '@zag-js/splitter@0.82.1': - resolution: {integrity: sha512-eMNncj+pcepYTf+51s4ysDS/tjtKXswpwsSQR0AeNqCE3SW3TGzHOM0+uheyjgv9EmDGDrr3Imdo0PCkq3bqug==} + '@zag-js/splitter@1.8.2': + resolution: {integrity: sha512-jcr382kBA/pRrQu04PVqB2U4Tn32wBCbJMX4UC/tmuVTP5RwQrA4WaDs21CelfntI0qEbzCMxFfYvbU7+ma7iw==} - '@zag-js/steps@0.82.1': - resolution: {integrity: sha512-N/LVOPbpQGtqpnNsdgZsQytpvXVoJ9Uldo8G38Q7892wwhVx63L0qLaiOK+SkU7kUTueOh109HezZ67nq3sadw==} + '@zag-js/steps@1.8.2': + resolution: {integrity: sha512-iCwaiT6q0GyhZCnHH9bwmQfYGqVmN5ObF+efV2eYDVsuICKe/PlEHL7H3gRClJR6x6FehXmYYI/gCI/PLzsuHg==} - '@zag-js/store@0.82.1': - resolution: {integrity: sha512-uWlVivLZBCuAEXrXOITM1srwfBtAnT8kBYVPElrT5aSO9gkV1YC/g+YdFRol7KKOg12qO561CPKReVfilmtAKg==} + '@zag-js/store@1.8.2': + resolution: {integrity: sha512-Q/sg8L5B3lbX1MWFJNhE5bcPzJrwhRcgDGtvKf8KDKcbcirhF5HiXUbbE4jvav52QVQYKru+WnOJ8WVj5Bi3tA==} - '@zag-js/switch@0.82.1': - resolution: {integrity: sha512-lIZsOs5nG9TkPs75+OK5THprEO0u3NAiLnEJ489KEFautVX/GMwAWvGHNFS7CcCpLZv+EpVKAPAdmGfEphrzhA==} + '@zag-js/switch@1.8.2': + resolution: {integrity: sha512-WYgtfzponocm4rrJcG4CNy1xsOwOXZ1yE9NBNKvew2Cj5yZLpTQLcjJBlWR5VjZ3Tgx+3D/F2nmBYzVFtU8zyw==} - '@zag-js/tabs@0.82.1': - resolution: {integrity: sha512-1uwNRvy8LyUTCAWjL1kD7BexOZ0sHrZ4OnUwDNuaWbqxUjtzoe+ftvcLXvmwFMmrns7o1SVnjqkgSVKuE4mcDA==} + '@zag-js/tabs@1.8.2': + resolution: {integrity: sha512-aM7gx9aj1DcyTV6T5H7okMHWBhi/0jdjhUhFRWWSdYxiYvpveBhVK+Tvg9Nq9GBqXZEgg8E1hxuLgPQUZv7QBQ==} - '@zag-js/tags-input@0.82.1': - resolution: {integrity: sha512-1mY8nCNMQgMwWBV5zX0bUcIgstqKjvFOAuYhGLIxbQPbgX7lP8Kr3nuhABh0oC0KnWaKfOMlItir2k795G4KMQ==} + '@zag-js/tags-input@1.8.2': + resolution: {integrity: sha512-9DF2pXz6a6lX5IiCwg8ug0TSLZ3FILIHUaX9WNBSx7afDlCMH36UgKhyfs2Xhl9gliVC/6a0Tr2sX5VDEYCe7g==} - '@zag-js/time-picker@0.82.1': - resolution: {integrity: sha512-nWKx3yyHFBUBPOTDFhi3du4wWlQe8wY0EoeWLQN6bpJSF4qo/BosTZJkUHm//FgUdwdhQBFOAsrlrJ0vL4qvNA==} + '@zag-js/time-picker@1.8.2': + resolution: {integrity: sha512-RdAPrRBeuiCL7m4PdEZOR6YzfQfOeNElgjEAVLZgUTu4WEhLt/XVdjaOuUQtiuLW4ukT72wNVWi0S+NBCHerIw==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/timer@0.82.1': - resolution: {integrity: sha512-uG4xCrYHgDZJgvW+71ROQX0xIkqMup37ZpNSLS2f5eD5DO1n/9NYLztA1YyeCJyv1aEDsZreeJLJvNDElgXA2A==} + '@zag-js/timer@1.8.2': + resolution: {integrity: sha512-EUqVacZyrKuvzDFHRZLYjDzNwMyr/5cQCu4m1Da4nv7hvqivDvofU2HUUf7mi7isuYuRaRAZ6sFQqknmvfbKQQ==} - '@zag-js/toast@0.82.1': - resolution: {integrity: sha512-4dL99zHXQg8j7ReJAR9zLAp5lNKMS4Nm+THnJaKsA0TF5QkELGnsZz47oKhFY0aQn46paxMLVagLqQ0+2i6D1w==} + '@zag-js/toast@1.8.2': + resolution: {integrity: sha512-ew+lfy8y5j4HWj5Ir9RoSfQKlbZnmGnn1r8GHMBhQXegWVGWAb04n4sp7t/e656iBif9HpLm3+/SUwOdCPIiJg==} - '@zag-js/toggle-group@0.82.1': - resolution: {integrity: sha512-8YaYKFz3ciiQhlTFScrvqH3Ke6UMDQLSgMEsCcERBYatd6TxkJwlFiBzpksIDsZpmloBrylyItJvqmzj9jt6Ig==} + '@zag-js/toggle-group@1.8.2': + resolution: {integrity: sha512-kBvFQtUJ70PpqJ6aA9uLCXLvSTiUMhzX3GkJbmTxffu2BdVKUF5OEKW3x9VpYdPeekBnayCXoGdW7WEOkgpYGw==} - '@zag-js/tooltip@0.82.1': - resolution: {integrity: sha512-ewF/1h2INDJlzYnoIigcWFWim56ezhfl7YGKgqLBdxBoRvZHyhRIfR8bbddVZk4k144gXsMVMeXwS6VEt6D0eQ==} + '@zag-js/toggle@1.8.2': + resolution: {integrity: sha512-2EebV04Hv25ex1jQVa1Cjb4A85qcC6kvABn4qR6wZooxf5Ua72C9sdiEjrAvMhDGAWaa37JuxlyYs+sZG1l0Lw==} - '@zag-js/tour@0.82.1': - resolution: {integrity: sha512-Oo4ZA3vG2sYEotfrWVXfIV1KW0Z+s91U+2YPtM2sOLnhetEVXxj/AwAruZfvS6WOcTI7D9UBrrQolY94fdZeOA==} + '@zag-js/tooltip@1.8.2': + resolution: {integrity: sha512-FqDq4H3PFnEJt96JCr4dap3Pkcq2D0Gb/G5G5gG3QAs7kOIHL2Jpq1CGCxE3EpmQOFee1HwyokC6R4Q4kot1Nw==} - '@zag-js/tree-view@0.82.1': - resolution: {integrity: sha512-xvYwaL49ffC8nnb+ENgNtkSZE1jMh8tm1E777AqBqnrhJZ28+FA9Sk8YDuWIWhNOV/r4n97jTXqj4SAGCrlAMQ==} + '@zag-js/tour@1.8.2': + resolution: {integrity: sha512-67Qw+dYY8ayf1x0ggvU0U0MoS0I/nhVe9JRpabPjYc09123DgGsDA4sdbj6VfCeFW6j3kffn5VEmTm8C3yV8gA==} - '@zag-js/types@0.82.1': - resolution: {integrity: sha512-Nr/CU/z/SZWDL92P2u9VDZL9JUxY8L1P7dGI0CmDKHlEHk1+vzqg3UnVkUKkZ5eVMNLtloHbrux5X9Gmkl39WQ==} + '@zag-js/tree-view@1.8.2': + resolution: {integrity: sha512-l/JmKjkz/BM59HVscazl8BMJj+suXl+FNRQVZqhyijzlb2PrB5xtgiQNV9XLNM2qHBCub9820Y1YMLyEP5YiwQ==} - '@zag-js/utils@0.82.1': - resolution: {integrity: sha512-JUGdEjstrzB0G2AJqzQiURIl6UZ1ONYgby/pqBKX57LO5LxasQXk9oNZh8+ZAvePNC/lKqqTtyyI02YQB4XwkA==} + '@zag-js/types@1.8.1': + resolution: {integrity: sha512-gJU3UlRccL2N4ukG4xEtetAr/fiuFBxpG5IKZ/Pr0zz8Z17LpdhK7ozyn9SU7y9W6YOcngByAgNgz+nRzmu5aQ==} + + '@zag-js/types@1.8.2': + resolution: {integrity: sha512-J+94HhFAPOBchNdGcmvqjB8nbQFgKHcqGoPl5vNTKlcoibN0yFjn4XFZoQU6uCf8sPhNg6NUNTkluR5YjybyJA==} + + '@zag-js/utils@1.8.2': + resolution: {integrity: sha512-7HnRAQ7+pR00c4BQChulTdf6G1gJ0NqV4mMKd9UXk4/E7GLYinUdBNAZ3jZCdHDrio3+2zIlNvpzkO3G4pVjlw==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -2268,10 +2126,6 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2507,8 +2361,8 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bundle-n-require@1.1.1: - resolution: {integrity: sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==} + bundle-n-require@1.1.2: + resolution: {integrity: sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==} cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -2518,6 +2372,10 @@ packages: resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} @@ -2526,6 +2384,10 @@ packages: resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2579,8 +2441,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chromium-bidi@1.3.0: - resolution: {integrity: sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==} + chromium-bidi@3.0.0: + resolution: {integrity: sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A==} peerDependencies: devtools-protocol: '*' @@ -2594,10 +2456,6 @@ packages: classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2833,8 +2691,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1402036: - resolution: {integrity: sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==} + devtools-protocol@0.0.1425554: + resolution: {integrity: sha512-uRfxR6Nlzdzt0ihVIkV+sLztKgs7rgquY/Mhcv1YNCWDh5IZgl5mnn2aeEnW5stYTE0wwiF4RYVz8eMEpV1SEw==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -2962,13 +2820,8 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} engines: {node: '>=18'} hasBin: true @@ -3027,27 +2880,26 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-react-hooks@5.1.0: - resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-storybook@0.11.3: - resolution: {integrity: sha512-gDBnBZiyk4ZG7OMSJRaHBcuJ8TMCXgMIQ3HB/XvtN0SvSio2ZOIeYD3yGj39g/DbyCe/Bg02j/ip9tWlDEs82A==} + eslint-plugin-storybook@0.12.0: + resolution: {integrity: sha512-Lg5I0+npTgiYgZ4KSvGWGDFZi3eOCNJPaWX0c9rTEEXC5wvooOClsP9ZtbI4hhFKyKgYR877KiJxbRTSJq9gWA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=8' - typescript: '>=4.8.4 <5.8.0' - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -3058,8 +2910,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.21.0: - resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} + eslint@9.24.0: + resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3114,8 +2966,8 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} expect@29.7.0: @@ -3249,6 +3101,10 @@ packages: resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -3834,8 +3690,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knip@5.44.5: - resolution: {integrity: sha512-qXHVRsipmxZNKVb5IWUVHwQtr96Dfo3vnWszRgwMI2VhsW9EBi7b/2YlELrrqfPr0lwVnwhUUuNgYwvke+PdGA==} + knip@5.50.3: + resolution: {integrity: sha512-0A4G7UPucGTCpNh5vHSfL0+tVQIuKfJKdg8sAq6EC3COKbAchEbM+TeN4w32OrnJW9CesHs71lqftlggMVfW2A==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -3857,8 +3713,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.4.3: - resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} + lint-staged@15.5.1: + resolution: {integrity: sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ==} engines: {node: '>=18.12.0'} hasBin: true @@ -4153,8 +4009,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-themes@0.4.4: - resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc @@ -4181,8 +4037,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-check-updates@17.1.15: - resolution: {integrity: sha512-miATvKu5rjec/1wxc5TGDjpsucgtCHwRVZorZpDkS6NzdWXfnUWlN4abZddWb7XSijAuBNzzYglIdTm9SbgMVg==} + npm-check-updates@17.1.18: + resolution: {integrity: sha512-bkUy2g4v1i+3FeUf5fXMLbxmV95eG4/sS7lYE32GrUeVgQRfQEk39gpskksFunyaxQgTIdrvYbnuNbO/pSUSqw==} engines: {node: ^18.18.0 || >=20.0.0, npm: '>=8.12.1'} hasBin: true @@ -4217,8 +4073,8 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} object.fromentries@2.0.8: @@ -4276,10 +4132,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4385,13 +4237,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} engines: {node: '>=18'} hasBin: true - playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} engines: {node: '>=18'} hasBin: true @@ -4444,6 +4296,10 @@ packages: resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4453,8 +4309,8 @@ packages: engines: {node: '>=14'} hasBin: true - prettier@3.5.2: - resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -4508,12 +4364,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.2.1: - resolution: {integrity: sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==} + puppeteer-core@24.6.1: + resolution: {integrity: sha512-sMCxsY+OPWO2fecBrhIeCeJbWWXJ6UaN997sTid6whY0YT9XM0RnxEwLeUibluIS5/fRmuxe1efjb5RMBsky7g==} engines: {node: '>=18'} - puppeteer@24.2.1: - resolution: {integrity: sha512-Euno62ou0cd0dTkOYTNioSOsFF4VpSnz4ldD38hi9ov9xCNtr8DbhmoJRUx+V9OuPgecueZbKOohRrnrhkbg3Q==} + puppeteer@24.6.1: + resolution: {integrity: sha512-/4ocGfu8LNvDbWUqJZV2VmwEWpbOdJa69y2Jivd213tV0ekAtUh/bgT1hhW63SDN/CtrEucOPwoomZ+9M+eBEg==} engines: {node: '>=18'} hasBin: true @@ -4535,10 +4391,10 @@ packages: resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} engines: {node: '>=16.14.0'} - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: - react: ^19.0.0 + react: ^19.1.0 react-error-boundary@5.0.0: resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==} @@ -4559,22 +4415,22 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.0.0: - resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} + react-is@19.1.0: + resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router-dom@7.2.0: - resolution: {integrity: sha512-cU7lTxETGtQRQbafJubvZKHEn5izNABxZhBY0Jlzdv0gqQhCPQt2J8aN5ZPjS6mQOXn5NnirWNh+FpE8TTYN0Q==} + react-router-dom@7.5.0: + resolution: {integrity: sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.2.0: - resolution: {integrity: sha512-fXyqzPgCPZbqhrk7k3hPcCpYIlQ2ugIXDboHUzhJISFVy2DEPsmHgN588MyGmkIOv3jDgNfUE3kJi83L28s/LQ==} + react-router@7.5.0: + resolution: {integrity: sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4583,12 +4439,17 @@ packages: react-dom: optional: true - react-select@5.10.0: - resolution: {integrity: sha512-k96gw+i6N3ExgDwPIg0lUPmexl1ygPe6u5BdQFNBhkpbwroIgCNXdubtIzHfThYXYYTubwOBafoMnn7ruEP1xA==} + react-select@5.10.1: + resolution: {integrity: sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-speech-recognition@4.0.0: + resolution: {integrity: sha512-hz1OsRhjAW70rOMVXN84PR+1L2I1j8xS1TXpwpd4vlDaRY9i/LbAaxEklqscgObECTTuyxNeGBdVdcq/pX3bqQ==} + peerDependencies: + react: '>=16.8.0' + react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -4607,8 +4468,8 @@ packages: react: '*' react-dom: '*' - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4743,8 +4604,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -4907,11 +4768,11 @@ packages: stacktrace-js@2.0.2: resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.8.1: + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} - storybook@8.5.8: - resolution: {integrity: sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==} + storybook@8.6.12: + resolution: {integrity: sha512-Z/nWYEHBTLK1ZBtAWdhxC0l5zf7ioJ7G4+zYqtTdYeb67gTnxNj80gehf8o8QY9L2zA2+eyMRGLC2V5fI7Z3Tw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -5012,9 +4873,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - summary@2.1.0: - resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5183,8 +5041,8 @@ packages: typed-query-selector@2.12.0: resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -5192,8 +5050,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -5291,13 +5149,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.0.6: - resolution: {integrity: sha512-s51RzrTkXKJrhNbUzQRsarjmAae7VmMPAsRT7lppVpIg6mK3zGthP9Hgz0YQQKuNcF+Ii7DfYk3Fxz40jRmePw==} + vite-node@3.1.1: + resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.1.1: - resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} + vite@6.2.6: + resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -5336,16 +5194,16 @@ packages: yaml: optional: true - vitest@3.0.6: - resolution: {integrity: sha512-/iL1Sc5VeDZKPDe58oGK4HUFLhw6b5XdY1MYawjuSaDA4sEfYlY9HnS6aCEG26fX+MgUi7MwlduTBHHAI/OvMA==} + vitest@3.1.1: + resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.6 - '@vitest/ui': 3.0.6 + '@vitest/browser': 3.1.1 + '@vitest/ui': 3.1.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5458,6 +5316,18 @@ packages: utf-8-validate: optional: true + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -5541,62 +5411,64 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@ark-ui/react@4.9.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@ark-ui/react@5.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@internationalized/date': 3.7.0 - '@zag-js/accordion': 0.82.1 - '@zag-js/anatomy': 0.82.1 - '@zag-js/auto-resize': 0.82.1 - '@zag-js/avatar': 0.82.1 - '@zag-js/carousel': 0.82.1 - '@zag-js/checkbox': 0.82.1 - '@zag-js/clipboard': 0.82.1 - '@zag-js/collapsible': 0.82.1 - '@zag-js/collection': 0.82.1 - '@zag-js/color-picker': 0.82.1 - '@zag-js/color-utils': 0.82.1 - '@zag-js/combobox': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/date-picker': 0.82.1(@internationalized/date@3.7.0) - '@zag-js/date-utils': 0.82.1(@internationalized/date@3.7.0) - '@zag-js/dialog': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/editable': 0.82.1 - '@zag-js/file-upload': 0.82.1 - '@zag-js/file-utils': 0.82.1 - '@zag-js/focus-trap': 0.82.1 - '@zag-js/highlight-word': 0.82.1 - '@zag-js/hover-card': 0.82.1 - '@zag-js/i18n-utils': 0.82.1 - '@zag-js/menu': 0.82.1 - '@zag-js/number-input': 0.82.1 - '@zag-js/pagination': 0.82.1 - '@zag-js/pin-input': 0.82.1 - '@zag-js/popover': 0.82.1 - '@zag-js/presence': 0.82.1 - '@zag-js/progress': 0.82.1 - '@zag-js/qr-code': 0.82.1 - '@zag-js/radio-group': 0.82.1 - '@zag-js/rating-group': 0.82.1 - '@zag-js/react': 0.82.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@zag-js/select': 0.82.1 - '@zag-js/signature-pad': 0.82.1 - '@zag-js/slider': 0.82.1 - '@zag-js/splitter': 0.82.1 - '@zag-js/steps': 0.82.1 - '@zag-js/switch': 0.82.1 - '@zag-js/tabs': 0.82.1 - '@zag-js/tags-input': 0.82.1 - '@zag-js/time-picker': 0.82.1(@internationalized/date@3.7.0) - '@zag-js/timer': 0.82.1 - '@zag-js/toast': 0.82.1 - '@zag-js/toggle-group': 0.82.1 - '@zag-js/tooltip': 0.82.1 - '@zag-js/tour': 0.82.1 - '@zag-js/tree-view': 0.82.1 - '@zag-js/types': 0.82.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + '@zag-js/accordion': 1.8.2 + '@zag-js/anatomy': 1.8.2 + '@zag-js/auto-resize': 1.8.2 + '@zag-js/avatar': 1.8.2 + '@zag-js/carousel': 1.8.2 + '@zag-js/checkbox': 1.8.2 + '@zag-js/clipboard': 1.8.2 + '@zag-js/collapsible': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/color-picker': 1.8.2 + '@zag-js/color-utils': 1.8.2 + '@zag-js/combobox': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/date-picker': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/date-utils': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/dialog': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/editable': 1.8.2 + '@zag-js/file-upload': 1.8.2 + '@zag-js/file-utils': 1.8.1 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/highlight-word': 1.8.2 + '@zag-js/hover-card': 1.8.2 + '@zag-js/i18n-utils': 1.8.2 + '@zag-js/menu': 1.8.2 + '@zag-js/number-input': 1.8.2 + '@zag-js/pagination': 1.8.2 + '@zag-js/pin-input': 1.8.2 + '@zag-js/popover': 1.8.2 + '@zag-js/presence': 1.8.2 + '@zag-js/progress': 1.8.2 + '@zag-js/qr-code': 1.8.2 + '@zag-js/radio-group': 1.8.2 + '@zag-js/rating-group': 1.8.2 + '@zag-js/react': 1.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@zag-js/select': 1.8.2 + '@zag-js/signature-pad': 1.8.2 + '@zag-js/slider': 1.8.2 + '@zag-js/splitter': 1.8.2 + '@zag-js/steps': 1.8.2 + '@zag-js/switch': 1.8.2 + '@zag-js/tabs': 1.8.2 + '@zag-js/tags-input': 1.8.2 + '@zag-js/time-picker': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/timer': 1.8.2 + '@zag-js/toast': 1.8.2 + '@zag-js/toggle': 1.8.2 + '@zag-js/toggle-group': 1.8.2 + '@zag-js/tooltip': 1.8.2 + '@zag-js/tour': 1.8.2 + '@zag-js/tree-view': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) '@babel/code-frame@7.26.2': dependencies: @@ -5645,7 +5517,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 '@babel/helper-compilation-targets@7.26.5': dependencies: @@ -5688,8 +5560,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -5711,7 +5583,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 '@babel/helper-plugin-utils@7.26.5': {} @@ -5720,7 +5592,7 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -5729,14 +5601,14 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -5748,9 +5620,9 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -5771,7 +5643,7 @@ snapshots: dependencies: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -5798,7 +5670,7 @@ snapshots: dependencies: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -5912,7 +5784,7 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.8) - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -5958,7 +5830,7 @@ snapshots: '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.8) - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5967,7 +5839,7 @@ snapshots: dependencies: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.26.8 + '@babel/template': 7.26.9 '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.8)': dependencies: @@ -6019,7 +5891,7 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -6065,7 +5937,7 @@ snapshots: '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color @@ -6182,7 +6054,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -6350,7 +6222,7 @@ snapshots: dependencies: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.26.8)': @@ -6428,15 +6300,15 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@chakra-ui/cli@3.8.1(@chakra-ui/react@3.8.1(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': + '@chakra-ui/cli@3.16.0(@chakra-ui/react@3.16.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: - '@chakra-ui/react': 3.8.1(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@clack/prompts': 0.9.1 + '@chakra-ui/react': 3.16.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@clack/prompts': 0.10.1 '@pandacss/is-valid-prop': 0.41.0 '@types/cli-table': 0.3.4 '@types/debug': 4.1.12 - '@visulima/boxen': 1.0.29 - bundle-n-require: 1.1.1 + '@visulima/boxen': 1.0.30 + bundle-n-require: 1.1.2 chokidar: 3.6.0 cli-table: 0.3.11 commander: 12.1.0 @@ -6453,41 +6325,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@chakra-ui/react@3.8.1(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@chakra-ui/react@3.16.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@ark-ui/react': 4.9.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@ark-ui/react': 5.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 '@pandacss/is-valid-prop': 0.41.0 csstype: 3.1.3 fast-safe-stringify: 2.1.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@chakra-ui/styled-system@2.12.0(react@19.0.0)': + '@chakra-ui/styled-system@2.12.0(react@19.1.0)': dependencies: - '@chakra-ui/utils': 2.2.2(react@19.0.0) + '@chakra-ui/utils': 2.2.2(react@19.1.0) csstype: 3.1.3 transitivePeerDependencies: - react - '@chakra-ui/utils@2.2.2(react@19.0.0)': + '@chakra-ui/utils@2.2.2(react@19.1.0)': dependencies: '@types/lodash.mergewith': 4.6.9 lodash.mergewith: 4.6.2 - react: 19.0.0 + react: 19.1.0 - '@clack/core@0.4.1': + '@clack/core@0.4.2': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@0.9.1': + '@clack/prompts@0.10.1': dependencies: - '@clack/core': 0.4.1 + '@clack/core': 0.4.2 picocolors: 1.1.1 sisteransi: 1.0.5 @@ -6527,19 +6399,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0)': + '@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0)': dependencies: '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.0.0 + react: 19.1.0 optionalDependencies: - '@types/react': 19.0.10 + '@types/react': 19.1.2 transitivePeerDependencies: - supports-color @@ -6555,166 +6427,97 @@ snapshots: '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)': dependencies: - react: 19.0.0 + react: 19.1.0 '@emotion/utils@1.4.2': {} '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.20.2': + '@esbuild/aix-ppc64@0.25.1': optional: true - '@esbuild/aix-ppc64@0.24.2': + '@esbuild/android-arm64@0.25.1': optional: true - '@esbuild/android-arm64@0.20.2': + '@esbuild/android-arm@0.25.1': optional: true - '@esbuild/android-arm64@0.24.2': + '@esbuild/android-x64@0.25.1': optional: true - '@esbuild/android-arm@0.20.2': + '@esbuild/darwin-arm64@0.25.1': optional: true - '@esbuild/android-arm@0.24.2': + '@esbuild/darwin-x64@0.25.1': optional: true - '@esbuild/android-x64@0.20.2': + '@esbuild/freebsd-arm64@0.25.1': optional: true - '@esbuild/android-x64@0.24.2': + '@esbuild/freebsd-x64@0.25.1': optional: true - '@esbuild/darwin-arm64@0.20.2': + '@esbuild/linux-arm64@0.25.1': optional: true - '@esbuild/darwin-arm64@0.24.2': + '@esbuild/linux-arm@0.25.1': optional: true - '@esbuild/darwin-x64@0.20.2': + '@esbuild/linux-ia32@0.25.1': optional: true - '@esbuild/darwin-x64@0.24.2': + '@esbuild/linux-loong64@0.25.1': optional: true - '@esbuild/freebsd-arm64@0.20.2': + '@esbuild/linux-mips64el@0.25.1': optional: true - '@esbuild/freebsd-arm64@0.24.2': + '@esbuild/linux-ppc64@0.25.1': optional: true - '@esbuild/freebsd-x64@0.20.2': + '@esbuild/linux-riscv64@0.25.1': optional: true - '@esbuild/freebsd-x64@0.24.2': + '@esbuild/linux-s390x@0.25.1': optional: true - '@esbuild/linux-arm64@0.20.2': + '@esbuild/linux-x64@0.25.1': optional: true - '@esbuild/linux-arm64@0.24.2': + '@esbuild/netbsd-arm64@0.25.1': optional: true - '@esbuild/linux-arm@0.20.2': + '@esbuild/netbsd-x64@0.25.1': optional: true - '@esbuild/linux-arm@0.24.2': + '@esbuild/openbsd-arm64@0.25.1': optional: true - '@esbuild/linux-ia32@0.20.2': + '@esbuild/openbsd-x64@0.25.1': optional: true - '@esbuild/linux-ia32@0.24.2': + '@esbuild/sunos-x64@0.25.1': optional: true - '@esbuild/linux-loong64@0.20.2': + '@esbuild/win32-arm64@0.25.1': optional: true - '@esbuild/linux-loong64@0.24.2': + '@esbuild/win32-ia32@0.25.1': optional: true - '@esbuild/linux-mips64el@0.20.2': + '@esbuild/win32-x64@0.25.1': optional: true - '@esbuild/linux-mips64el@0.24.2': - optional: true - - '@esbuild/linux-ppc64@0.20.2': - optional: true - - '@esbuild/linux-ppc64@0.24.2': - optional: true - - '@esbuild/linux-riscv64@0.20.2': - optional: true - - '@esbuild/linux-riscv64@0.24.2': - optional: true - - '@esbuild/linux-s390x@0.20.2': - optional: true - - '@esbuild/linux-s390x@0.24.2': - optional: true - - '@esbuild/linux-x64@0.20.2': - optional: true - - '@esbuild/linux-x64@0.24.2': - optional: true - - '@esbuild/netbsd-arm64@0.24.2': - optional: true - - '@esbuild/netbsd-x64@0.20.2': - optional: true - - '@esbuild/netbsd-x64@0.24.2': - optional: true - - '@esbuild/openbsd-arm64@0.24.2': - optional: true - - '@esbuild/openbsd-x64@0.20.2': - optional: true - - '@esbuild/openbsd-x64@0.24.2': - optional: true - - '@esbuild/sunos-x64@0.20.2': - optional: true - - '@esbuild/sunos-x64@0.24.2': - optional: true - - '@esbuild/win32-arm64@0.20.2': - optional: true - - '@esbuild/win32-arm64@0.24.2': - optional: true - - '@esbuild/win32-ia32@0.20.2': - optional: true - - '@esbuild/win32-ia32@0.24.2': - optional: true - - '@esbuild/win32-x64@0.20.2': - optional: true - - '@esbuild/win32-x64@0.24.2': - optional: true - - '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.24.0(jiti@2.4.2))': dependencies: - eslint: 9.21.0(jiti@2.4.2) + eslint: 9.24.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.2': + '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.0 @@ -6722,11 +6525,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/config-helpers@0.2.0': {} + '@eslint/core@0.12.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.0': + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.0 @@ -6740,7 +6545,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.21.0': {} + '@eslint/js@9.24.0': {} '@eslint/object-schema@2.1.6': {} @@ -6753,11 +6558,6 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.12': - dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.13': dependencies: '@floating-ui/core': 1.6.9 @@ -6808,27 +6608,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -6853,7 +6653,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -6871,7 +6671,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6893,7 +6693,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -6963,18 +6763,18 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.5 + '@types/node': 22.14.1 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0))': dependencies: glob: 10.4.5 magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.7.3) - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + react-docgen-typescript: 2.2.2(typescript@5.8.3) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.3 '@jridgewell/gen-mapping@0.3.8': dependencies: @@ -7000,7 +6800,7 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@locator/babel-jsx@0.4.4(@babel/core@7.26.8)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3))': + '@locator/babel-jsx@0.4.4(@babel/core@7.26.8)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3))': dependencies: '@babel/parser': 7.26.8 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) @@ -7009,19 +6809,19 @@ snapshots: '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) '@babel/traverse': 7.26.8 '@babel/types': 7.26.8 - '@locator/runtime': 0.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + '@locator/runtime': 0.4.4(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) '@locator/shared': 0.4.4 transitivePeerDependencies: - '@babel/core' - supports-color - ts-node - '@locator/runtime@0.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3))': + '@locator/runtime@0.4.4(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3))': dependencies: '@floating-ui/dom': 1.6.13 '@locator/shared': 0.4.4 solid-js: 1.9.5 - tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) transitivePeerDependencies: - ts-node @@ -7029,46 +6829,34 @@ snapshots: dependencies: semver: 7.7.1 - '@mdx-js/react@3.1.0(@types/react@19.0.10)(react@19.0.0)': + '@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.0.10 - react: 19.0.0 + '@types/react': 19.1.2 + react: 19.1.0 '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.scandir@4.0.1': - dependencies: - '@nodelib/fs.stat': 4.0.0 - run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} - '@nodelib/fs.stat@4.0.0': {} - '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 - '@nodelib/fs.walk@3.0.1': - dependencies: - '@nodelib/fs.scandir': 4.0.1 - fastq: 1.19.0 - '@pandacss/is-valid-prop@0.41.0': {} '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.50.1': + '@playwright/test@1.51.1': dependencies: - playwright: 1.50.1 + playwright: 1.51.1 - '@puppeteer/browsers@2.7.1': + '@puppeteer/browsers@2.10.0': dependencies: debug: 4.4.0 extract-zip: 2.0.1 @@ -7160,220 +6948,209 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@snyk/github-codeowners@1.1.0': - dependencies: - commander: 4.1.1 - ignore: 5.3.2 - p-map: 4.0.0 - - '@storybook/addon-actions@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-actions@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-backgrounds@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-controls@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.5.8(@types/react@19.0.10)(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-docs@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.0.10)(react@19.0.0) - '@storybook/blocks': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2)) - '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/react-dom-shim': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2)) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.5.2) + '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@19.1.0) + '@storybook/blocks': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.5.8(@types/react@19.0.10)(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-essentials@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@storybook/addon-actions': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-backgrounds': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-controls': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-docs': 8.5.8(@types/react@19.0.10)(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-highlight': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-measure': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-outline': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-toolbars': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/addon-viewport': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - storybook: 8.5.8(prettier@3.5.2) + '@storybook/addon-actions': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-backgrounds': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-controls': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-docs': 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-highlight': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-measure': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-outline': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-toolbars': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-viewport': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-highlight@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/addon-links@8.5.8(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-links@8.6.12(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: - react: 19.0.0 + react: 19.1.0 - '@storybook/addon-mdx-gfm@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-mdx-gfm@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: remark-gfm: 4.0.1 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - '@storybook/addon-measure@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-measure@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-outline@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-toolbars@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/addon-viewport@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/addon-viewport@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: memoizerific: 1.11.3 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/blocks@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))': + '@storybook/blocks@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@storybook/csf': 0.1.12 - '@storybook/icons': 1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - storybook: 8.5.8(prettier@3.5.2) + '@storybook/icons': 1.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@storybook/builder-vite@8.5.8(storybook@8.5.8(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0))': + '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0))': dependencies: - '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(prettier@3.5.2)) + '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) browser-assert: 1.2.1 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) - '@storybook/components@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/core@8.5.8(prettier@3.5.2)': + '@storybook/core@8.6.12(prettier@3.5.3)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@storybook/csf': 0.1.12 + '@storybook/theming': 8.6.12(storybook@8.6.12(prettier@3.5.3)) better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.24.2 - esbuild-register: 3.6.0(esbuild@0.24.2) + esbuild: 0.25.1 + esbuild-register: 3.6.0(esbuild@0.25.1) jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.9 semver: 7.7.1 util: 0.12.5 - ws: 8.18.0 + ws: 8.18.1 optionalDependencies: - prettier: 3.5.2 + prettier: 3.5.3 transitivePeerDependencies: - bufferutil + - storybook - supports-color - utf-8-validate - '@storybook/csf-plugin@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/csf-plugin@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) unplugin: 1.16.1 - '@storybook/csf@0.1.12': - dependencies: - type-fest: 2.19.0 - '@storybook/csf@0.1.13': dependencies: type-fest: 2.19.0 '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@storybook/icons@1.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@storybook/manager-api@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/manager-api@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/preview-api@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/preview-api@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-dom-shim@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))': + '@storybook/react-dom-shim@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))': dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.5.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-vite@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(storybook@8.5.8(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0))': + '@storybook/react-vite@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.34.6)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.34.6) - '@storybook/builder-vite': 8.5.8(storybook@8.5.8(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0)) - '@storybook/react': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))(typescript@5.7.3) + '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0)) + '@storybook/react': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) find-up: 5.0.0 magic-string: 0.30.17 - react: 19.0.0 + react: 19.1.0 react-docgen: 7.1.1 - react-dom: 19.0.0(react@19.0.0) + react-dom: 19.1.0(react@19.1.0) resolve: 1.22.10 - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2))(typescript@5.7.3)': + '@storybook/react@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/components': 8.5.8(storybook@8.5.8(prettier@3.5.2)) + '@storybook/components': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/preview-api': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - '@storybook/react-dom-shim': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.5.2)) - '@storybook/theming': 8.5.8(storybook@8.5.8(prettier@3.5.2)) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.5.2) + '@storybook/manager-api': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/preview-api': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + '@storybook/theming': 8.6.12(storybook@8.6.12(prettier@3.5.3)) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.3 - '@storybook/theming@8.5.8(storybook@8.5.8(prettier@3.5.2))': + '@storybook/theming@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.8(prettier@3.5.2) + storybook: 8.6.12(prettier@3.5.3) '@swc/helpers@0.5.15': dependencies: @@ -7400,15 +7177,15 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.26.7 '@testing-library/dom': 10.4.0 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.0.10 - '@types/react-dom': 19.0.4(@types/react@19.0.10) + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: @@ -7418,7 +7195,7 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.2)': + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': dependencies: '@babel/generator': 7.26.8 '@babel/parser': 7.26.8 @@ -7426,7 +7203,7 @@ snapshots: '@babel/types': 7.26.8 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.5.2 + prettier: 3.5.3 transitivePeerDependencies: - supports-color @@ -7477,7 +7254,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.14.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -7498,7 +7275,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.14.1 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -7520,21 +7297,21 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@22.13.5': + '@types/node@22.14.1': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 '@types/parse-json@4.0.2': {} - '@types/react-dom@19.0.4(@types/react@19.0.10)': + '@types/react-dom@19.1.2(@types/react@19.1.2)': dependencies: - '@types/react': 19.0.10 + '@types/react': 19.1.2 - '@types/react-transition-group@4.4.12(@types/react@19.0.10)': + '@types/react-transition-group@4.4.12(@types/react@19.1.2)': dependencies: - '@types/react': 19.0.10 + '@types/react': 19.1.2 - '@types/react@19.0.10': + '@types/react@19.1.2': dependencies: csstype: 3.1.3 @@ -7556,634 +7333,653 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.14.1 optional: true - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 - eslint: 9.21.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/type-utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.1 + eslint: 9.24.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.1 debug: 4.4.0 - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + eslint: 9.24.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.0': + '@typescript-eslint/scope-manager@8.28.0': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 - '@typescript-eslint/scope-manager@8.24.1': + '@typescript-eslint/scope-manager@8.30.1': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/visitor-keys': 8.30.1 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + eslint: 9.24.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.0': {} + '@typescript-eslint/types@8.28.0': {} - '@typescript-eslint/types@8.24.1': {} + '@typescript-eslint/types@8.30.1': {} - '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.30.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/visitor-keys': 8.30.1 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.28.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.0': + '@typescript-eslint/visitor-keys@8.28.0': dependencies: - '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/types': 8.28.0 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.24.1': + '@typescript-eslint/visitor-keys@8.30.1': dependencies: - '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/types': 8.30.1 eslint-visitor-keys: 4.2.0 - '@visulima/boxen@1.0.29': {} + '@visulima/boxen@1.0.30': {} - '@vitejs/plugin-react@4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.0.6': + '@vitest/expect@3.1.1': dependencies: - '@vitest/spy': 3.0.6 - '@vitest/utils': 3.0.6 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.6(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0))': + '@vitest/mocker@3.1.1(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.6 + '@vitest/spy': 3.1.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) - '@vitest/pretty-format@3.0.6': + '@vitest/pretty-format@3.1.1': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.6': + '@vitest/runner@3.1.1': dependencies: - '@vitest/utils': 3.0.6 + '@vitest/utils': 3.1.1 pathe: 2.0.3 - '@vitest/snapshot@3.0.6': + '@vitest/snapshot@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.6 + '@vitest/pretty-format': 3.1.1 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.0.6': + '@vitest/spy@3.1.1': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.0.6': + '@vitest/utils@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.6 + '@vitest/pretty-format': 3.1.1 loupe: 3.1.3 tinyrainbow: 2.0.0 '@xobotyi/scrollbar-width@1.9.5': {} - '@zag-js/accordion@0.82.1': + '@zag-js/accordion@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/anatomy@0.82.1': {} + '@zag-js/anatomy@1.8.2': {} - '@zag-js/aria-hidden@0.82.1': {} + '@zag-js/aria-hidden@1.8.2': {} - '@zag-js/auto-resize@0.82.1': + '@zag-js/auto-resize@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/dom-query': 1.8.2 - '@zag-js/avatar@0.82.1': + '@zag-js/avatar@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/carousel@0.82.1': + '@zag-js/carousel@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/scroll-snap': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/scroll-snap': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/checkbox@0.82.1': + '@zag-js/checkbox@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-visible': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/clipboard@0.82.1': + '@zag-js/clipboard@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/collapsible@0.82.1': + '@zag-js/collapsible@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/collection@0.82.1': + '@zag-js/collection@1.8.2': dependencies: - '@zag-js/utils': 0.82.1 + '@zag-js/utils': 1.8.2 - '@zag-js/color-picker@0.82.1': + '@zag-js/color-picker@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/color-utils': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/color-utils': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/color-utils@0.82.1': + '@zag-js/color-utils@1.8.2': dependencies: - '@zag-js/utils': 0.82.1 + '@zag-js/utils': 1.8.2 - '@zag-js/combobox@0.82.1': + '@zag-js/combobox@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/aria-hidden': 0.82.1 - '@zag-js/collection': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/core@0.82.1': + '@zag-js/core@1.8.2': dependencies: - '@zag-js/store': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/date-picker@0.82.1(@internationalized/date@3.7.0)': + '@zag-js/date-picker@1.8.2(@internationalized/date@3.7.0)': dependencies: '@internationalized/date': 3.7.0 - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/date-utils': 0.82.1(@internationalized/date@3.7.0) - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/live-region': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/date-utils': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/live-region': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/date-utils@0.82.1(@internationalized/date@3.7.0)': + '@zag-js/date-utils@1.8.2(@internationalized/date@3.7.0)': dependencies: '@internationalized/date': 3.7.0 - '@zag-js/dialog@0.82.1': + '@zag-js/dialog@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/aria-hidden': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-trap': 0.82.1 - '@zag-js/remove-scroll': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/remove-scroll': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/dismissable@0.82.1': + '@zag-js/dismissable@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 - '@zag-js/interact-outside': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/dom-query@0.82.1': + '@zag-js/dom-query@1.8.1': dependencies: - '@zag-js/types': 0.82.1 + '@zag-js/types': 1.8.1 - '@zag-js/editable@0.82.1': + '@zag-js/dom-query@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/interact-outside': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/types': 1.8.2 - '@zag-js/element-rect@0.82.1': {} - - '@zag-js/element-size@0.82.1': {} - - '@zag-js/file-upload@0.82.1': + '@zag-js/editable@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/file-utils': 0.82.1 - '@zag-js/i18n-utils': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/file-utils@0.82.1': + '@zag-js/file-upload@1.8.2': dependencies: - '@zag-js/i18n-utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/file-utils': 1.8.2 + '@zag-js/i18n-utils': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/focus-trap@0.82.1': + '@zag-js/file-utils@1.8.1': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/i18n-utils': 1.8.1 - '@zag-js/focus-visible@0.82.1': + '@zag-js/file-utils@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/i18n-utils': 1.8.2 - '@zag-js/highlight-word@0.82.1': {} - - '@zag-js/hover-card@0.82.1': + '@zag-js/focus-trap@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/dom-query': 1.8.2 - '@zag-js/i18n-utils@0.82.1': + '@zag-js/focus-visible@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/dom-query': 1.8.2 - '@zag-js/interact-outside@0.82.1': + '@zag-js/highlight-word@1.8.2': {} + + '@zag-js/hover-card@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/live-region@0.82.1': {} - - '@zag-js/menu@0.82.1': + '@zag-js/i18n-utils@1.8.1': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/rect-utils': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/dom-query': 1.8.1 - '@zag-js/number-input@0.82.1': + '@zag-js/i18n-utils@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/interact-outside@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/live-region@1.8.2': {} + + '@zag-js/menu@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/rect-utils': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/number-input@1.8.2': dependencies: '@internationalized/number': 3.6.0 - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/pagination@0.82.1': + '@zag-js/pagination@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/pin-input@0.82.1': + '@zag-js/pin-input@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/popover@0.82.1': + '@zag-js/popover@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/aria-hidden': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-trap': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/remove-scroll': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/remove-scroll': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/popper@0.82.1': + '@zag-js/popper@1.8.2': dependencies: - '@floating-ui/dom': 1.6.12 - '@zag-js/dom-query': 0.82.1 - '@zag-js/utils': 0.82.1 + '@floating-ui/dom': 1.6.13 + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/presence@0.82.1': + '@zag-js/presence@1.8.2': dependencies: - '@zag-js/core': 0.82.1 - '@zag-js/types': 0.82.1 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 - '@zag-js/progress@0.82.1': + '@zag-js/progress@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/qr-code@0.82.1': + '@zag-js/qr-code@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 proxy-memoize: 3.0.1 uqr: 0.1.2 - '@zag-js/radio-group@0.82.1': + '@zag-js/radio-group@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/element-rect': 0.82.1 - '@zag-js/focus-visible': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/rating-group@0.82.1': + '@zag-js/rating-group@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/react@0.82.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@zag-js/react@1.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@zag-js/core': 0.82.1 - '@zag-js/store': 0.82.1 - '@zag-js/types': 0.82.1 - proxy-compare: 3.0.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + '@zag-js/core': 1.8.2 + '@zag-js/store': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@zag-js/rect-utils@0.82.1': {} + '@zag-js/rect-utils@1.8.2': {} - '@zag-js/remove-scroll@0.82.1': + '@zag-js/remove-scroll@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/dom-query': 1.8.2 - '@zag-js/scroll-snap@0.82.1': + '@zag-js/scroll-snap@1.8.2': dependencies: - '@zag-js/dom-query': 0.82.1 + '@zag-js/dom-query': 1.8.2 - '@zag-js/select@0.82.1': + '@zag-js/select@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/collection': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/signature-pad@0.82.1': + '@zag-js/signature-pad@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 perfect-freehand: 1.2.2 - '@zag-js/slider@0.82.1': + '@zag-js/slider@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/element-size': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/splitter@0.82.1': + '@zag-js/splitter@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/steps@0.82.1': + '@zag-js/steps@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/store@0.82.1': + '@zag-js/store@1.8.2': dependencies: proxy-compare: 3.0.1 - '@zag-js/switch@0.82.1': + '@zag-js/switch@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-visible': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/tabs@0.82.1': + '@zag-js/tabs@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/element-rect': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/tags-input@0.82.1': + '@zag-js/tags-input@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/auto-resize': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/interact-outside': 0.82.1 - '@zag-js/live-region': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/auto-resize': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/live-region': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/time-picker@0.82.1(@internationalized/date@3.7.0)': + '@zag-js/time-picker@1.8.2(@internationalized/date@3.7.0)': dependencies: '@internationalized/date': 3.7.0 - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/timer@0.82.1': + '@zag-js/timer@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/toast@0.82.1': + '@zag-js/toast@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/toggle-group@0.82.1': + '@zag-js/toggle-group@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/tooltip@0.82.1': + '@zag-js/toggle@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-visible': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/tour@0.82.1': + '@zag-js/tooltip@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dismissable': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/focus-trap': 0.82.1 - '@zag-js/interact-outside': 0.82.1 - '@zag-js/popper': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/store': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/tree-view@0.82.1': + '@zag-js/tour@1.8.2': dependencies: - '@zag-js/anatomy': 0.82.1 - '@zag-js/collection': 0.82.1 - '@zag-js/core': 0.82.1 - '@zag-js/dom-query': 0.82.1 - '@zag-js/types': 0.82.1 - '@zag-js/utils': 0.82.1 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 - '@zag-js/types@0.82.1': + '@zag-js/tree-view@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/types@1.8.1': dependencies: csstype: 3.1.3 - '@zag-js/utils@0.82.1': {} + '@zag-js/types@1.8.2': + dependencies: + csstype: 3.1.3 + + '@zag-js/utils@1.8.2': {} abab@2.0.6: {} @@ -8210,11 +8006,6 @@ snapshots: agent-base@7.1.3: {} - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -8222,16 +8013,16 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - allotment@1.20.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + allotment@1.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: classnames: 2.5.1 eventemitter3: 5.0.1 lodash.clamp: 4.0.3 lodash.debounce: 4.0.8 lodash.isequal: 4.5.0 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - use-resize-observer: 9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + use-resize-observer: 9.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) ansi-escapes@4.3.2: dependencies: @@ -8385,8 +8176,8 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -8514,9 +8305,9 @@ snapshots: buffer-from@1.1.2: {} - bundle-n-require@1.1.1: + bundle-n-require@1.1.2: dependencies: - esbuild: 0.20.2 + esbuild: 0.25.1 node-eval: 2.0.0 cac@6.7.14: {} @@ -8526,6 +8317,11 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.8: dependencies: call-bind-apply-helpers: 1.0.1 @@ -8538,6 +8334,11 @@ snapshots: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -8588,9 +8389,9 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chromium-bidi@1.3.0(devtools-protocol@0.0.1402036): + chromium-bidi@3.0.0(devtools-protocol@0.0.1425554): dependencies: - devtools-protocol: 0.0.1402036 + devtools-protocol: 0.0.1425554 mitt: 3.0.1 zod: 3.24.2 @@ -8600,8 +8401,6 @@ snapshots: classnames@2.5.1: {} - clean-stack@2.2.0: {} - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -8672,22 +8471,22 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@9.0.0(typescript@5.7.3): + cosmiconfig@9.0.0(typescript@5.8.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.3 - create-jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + create-jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -8818,7 +8617,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1402036: {} + devtools-protocol@0.0.1425554: {} didyoumean@1.2.2: {} @@ -8996,66 +8795,40 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild-register@3.6.0(esbuild@0.24.2): + esbuild-register@3.6.0(esbuild@0.25.1): dependencies: debug: 4.4.0 - esbuild: 0.24.2 + esbuild: 0.25.1 transitivePeerDependencies: - supports-color - esbuild@0.20.2: + esbuild@0.25.1: 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 - - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 escalade@3.2.0: {} @@ -9081,17 +8854,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.21.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.24.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -9100,9 +8873,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.21.0(jiti@2.4.2) + eslint: 9.24.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.21.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.24.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -9114,17 +8887,17 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@2.4.2)): dependencies: - eslint: 9.21.0(jiti@2.4.2) + eslint: 9.24.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.24.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -9132,12 +8905,12 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.21.0(jiti@2.4.2) + eslint: 9.24.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -9146,17 +8919,17 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.3(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-storybook@0.12.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.24.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) ts-dedent: 2.2.0 - typescript: 5.7.3 transitivePeerDependencies: - supports-color + - typescript - eslint-scope@8.2.0: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -9165,14 +8938,15 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.21.0(jiti@2.4.2): + eslint@9.24.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.0 '@eslint/core': 0.12.0 - '@eslint/eslintrc': 3.3.0 - '@eslint/js': 9.21.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.24.0 '@eslint/plugin-kit': 0.2.7 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -9184,7 +8958,7 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 + eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 esquery: 1.6.0 @@ -9260,7 +9034,7 @@ snapshots: exit@0.1.2: {} - expect-type@1.1.0: {} + expect-type@1.2.1: {} expect@29.7.0: dependencies: @@ -9407,6 +9181,19 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} get-proto@1.0.1: @@ -9813,7 +9600,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -9833,16 +9620,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + jest-cli@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + create-jest: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -9852,7 +9639,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + jest-config@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: '@babel/core': 7.26.8 '@jest/test-sequencer': 29.7.0 @@ -9877,8 +9664,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.13.5 - ts-node: 10.9.2(@types/node@22.13.5)(typescript@5.7.3) + '@types/node': 22.14.1 + ts-node: 10.9.2(@types/node@22.14.1)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -9908,7 +9695,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -9922,7 +9709,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -9932,7 +9719,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.5 + '@types/node': 22.14.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -9971,7 +9758,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -10006,7 +9793,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10034,7 +9821,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -10080,7 +9867,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10099,7 +9886,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.5 + '@types/node': 22.14.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -10108,17 +9895,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.13.5 + '@types/node': 22.14.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + jest-cli: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10210,11 +9997,10 @@ snapshots: kleur@3.0.3: {} - knip@5.44.5(@types/node@22.13.5)(typescript@5.7.3): + knip@5.50.3(@types/node@22.14.1)(typescript@5.8.3): dependencies: - '@nodelib/fs.walk': 3.0.1 - '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.13.5 + '@nodelib/fs.walk': 1.2.8 + '@types/node': 22.14.1 easy-table: 1.2.0 enhanced-resolve: 5.18.1 fast-glob: 3.3.3 @@ -10226,8 +10012,7 @@ snapshots: pretty-ms: 9.2.0 smol-toml: 1.3.1 strip-json-comments: 5.0.1 - summary: 2.1.0 - typescript: 5.7.3 + typescript: 5.8.3 zod: 3.24.2 zod-validation-error: 3.4.0(zod@3.24.2) @@ -10242,7 +10027,7 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@15.4.3: + lint-staged@15.5.1: dependencies: chalk: 5.4.1 commander: 13.1.0 @@ -10684,15 +10469,15 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nano-css@5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.6 @@ -10703,10 +10488,10 @@ snapshots: netmask@2.0.2: {} - next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) node-domexception@1.0.0: {} @@ -10726,7 +10511,7 @@ snapshots: normalize-path@3.0.0: {} - npm-check-updates@17.1.15: {} + npm-check-updates@17.1.18: {} npm-run-path@4.0.1: dependencies: @@ -10755,9 +10540,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -10834,10 +10620,6 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - p-try@2.2.0: {} pac-proxy-agent@7.1.0: @@ -10922,11 +10704,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.50.1: {} + playwright-core@1.51.1: {} - playwright@1.50.1: + playwright@1.51.1: dependencies: - playwright-core: 1.50.1 + playwright-core: 1.51.1 optionalDependencies: fsevents: 2.3.2 @@ -10948,13 +10730,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.2 - postcss-load-config@4.0.2(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + postcss-load-config@4.0.2(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 yaml: 2.7.0 optionalDependencies: postcss: 8.5.2 - ts-node: 10.9.2(@types/node@22.13.5)(typescript@5.7.3) + ts-node: 10.9.2(@types/node@22.14.1)(typescript@5.8.3) postcss-nested@6.2.0(postcss@8.5.2): dependencies: @@ -10974,11 +10756,17 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier@3.3.3: {} - prettier@3.5.2: {} + prettier@3.5.3: {} pretty-format@27.5.1: dependencies: @@ -11043,27 +10831,27 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.2.1: + puppeteer-core@24.6.1: dependencies: - '@puppeteer/browsers': 2.7.1 - chromium-bidi: 1.3.0(devtools-protocol@0.0.1402036) + '@puppeteer/browsers': 2.10.0 + chromium-bidi: 3.0.0(devtools-protocol@0.0.1425554) debug: 4.4.0 - devtools-protocol: 0.0.1402036 + devtools-protocol: 0.0.1425554 typed-query-selector: 2.12.0 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: - bare-buffer - bufferutil - supports-color - utf-8-validate - puppeteer@24.2.1(typescript@5.7.3): + puppeteer@24.6.1(typescript@5.8.3): dependencies: - '@puppeteer/browsers': 2.7.1 - chromium-bidi: 1.3.0(devtools-protocol@0.0.1402036) - cosmiconfig: 9.0.0(typescript@5.7.3) - devtools-protocol: 0.0.1402036 - puppeteer-core: 24.2.1 + '@puppeteer/browsers': 2.10.0 + chromium-bidi: 3.0.0(devtools-protocol@0.0.1425554) + cosmiconfig: 9.0.0(typescript@5.8.3) + devtools-protocol: 0.0.1425554 + puppeteer-core: 24.6.1 typed-query-selector: 2.12.0 transitivePeerDependencies: - bare-buffer @@ -11078,15 +10866,15 @@ snapshots: queue-microtask@1.2.3: {} - react-docgen-typescript@2.2.2(typescript@5.7.3): + react-docgen-typescript@2.2.2(typescript@5.8.3): dependencies: - typescript: 5.7.3 + typescript: 5.8.3 react-docgen@7.1.1: dependencies: '@babel/core': 7.26.8 - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 '@types/doctrine': 0.0.9 @@ -11097,19 +10885,19 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@19.0.0(react@19.0.0): + react-dom@19.1.0(react@19.1.0): dependencies: - react: 19.0.0 - scheduler: 0.25.0 + react: 19.1.0 + scheduler: 0.26.0 - react-error-boundary@5.0.0(react@19.0.0): + react-error-boundary@5.0.0(react@19.1.0): dependencies: '@babel/runtime': 7.26.7 - react: 19.0.0 + react: 19.1.0 - react-icons@5.5.0(react@19.0.0): + react-icons@5.5.0(react@19.1.0): dependencies: - react: 19.0.0 + react: 19.1.0 react-is@16.13.1: {} @@ -11117,58 +10905,62 @@ snapshots: react-is@18.3.1: {} - react-is@19.0.0: {} + react-is@19.1.0: {} react-refresh@0.14.2: {} - react-router-dom@7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router-dom@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-router: 7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-router: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router@7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@types/cookie': 0.6.0 cookie: 1.0.2 - react: 19.0.0 + react: 19.1.0 set-cookie-parser: 2.7.1 turbo-stream: 2.4.0 optionalDependencies: - react-dom: 19.0.0(react@19.0.0) + react-dom: 19.1.0(react@19.1.0) - react-select@5.10.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-select@5.10.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.26.7 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) '@floating-ui/dom': 1.6.13 - '@types/react-transition-group': 4.4.12(@types/react@19.0.10) + '@types/react-transition-group': 4.4.12(@types/react@19.1.2) memoize-one: 6.0.0 prop-types: 15.8.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - use-isomorphic-layout-effect: 1.2.0(@types/react@19.0.10)(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.2)(react@19.1.0) transitivePeerDependencies: - '@types/react' - supports-color - react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-speech-recognition@4.0.0(react@19.1.0): + dependencies: + react: 19.1.0 + + react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.26.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - react-universal-interface@0.6.2(react@19.0.0)(tslib@2.8.1): + react-universal-interface@0.6.2(react@19.1.0)(tslib@2.8.1): dependencies: - react: 19.0.0 + react: 19.1.0 tslib: 2.8.1 - react-use@17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-use@17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -11176,10 +10968,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-universal-interface: 0.6.2(react@19.0.0)(tslib@2.8.1) + nano-css: 5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-universal-interface: 0.6.2(react@19.1.0)(tslib@2.8.1) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -11187,7 +10979,7 @@ snapshots: ts-easing: 0.2.0 tslib: 2.8.1 - react@19.0.0: {} + react@19.1.0: {} read-cache@1.0.0: dependencies: @@ -11378,7 +11170,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.25.0: {} + scheduler@0.26.0: {} screenfull@5.2.0: {} @@ -11539,13 +11331,13 @@ snapshots: stack-generator: 2.0.10 stacktrace-gps: 3.1.2 - std-env@3.8.0: {} + std-env@3.8.1: {} - storybook@8.5.8(prettier@3.5.2): + storybook@8.6.12(prettier@3.5.3): dependencies: - '@storybook/core': 8.5.8(prettier@3.5.2) + '@storybook/core': 8.6.12(prettier@3.5.3)(storybook@8.6.12(prettier@3.5.3)) optionalDependencies: - prettier: 3.5.2 + prettier: 3.5.3 transitivePeerDependencies: - bufferutil - supports-color @@ -11669,8 +11461,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - summary@2.1.0: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -11683,7 +11473,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)): + tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -11702,7 +11492,7 @@ snapshots: postcss: 8.5.2 postcss-import: 15.1.0(postcss@8.5.2) postcss-js: 4.0.1(postcss@8.5.2) - postcss-load-config: 4.0.2(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3)) + postcss-load-config: 4.0.2(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) postcss-nested: 6.2.0(postcss@8.5.2) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -11781,9 +11571,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.8.3): dependencies: - typescript: 5.7.3 + typescript: 5.8.3 ts-dedent@2.2.0: {} @@ -11791,21 +11581,21 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@22.13.5)(typescript@5.7.3): + ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.13.5 + '@types/node': 22.14.1 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.7.3 + typescript: 5.8.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -11871,7 +11661,7 @@ snapshots: typed-query-selector@2.12.0: {} - typescript@5.7.3: {} + typescript@5.8.3: {} unbox-primitive@1.1.0: dependencies: @@ -11880,7 +11670,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.20.0: {} + undici-types@6.21.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -11948,17 +11738,17 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-isomorphic-layout-effect@1.2.0(@types/react@19.0.10)(react@19.0.0): + use-isomorphic-layout-effect@1.2.0(@types/react@19.1.2)(react@19.1.0): dependencies: - react: 19.0.0 + react: 19.1.0 optionalDependencies: - '@types/react': 19.0.10 + '@types/react': 19.1.2 - use-resize-observer@9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + use-resize-observer@9.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@juggle/resize-observer': 3.4.0 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) util-deprecate@1.0.2: {} @@ -11990,13 +11780,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.6(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0): + vite-node@3.1.1(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -12011,42 +11801,42 @@ snapshots: - tsx - yaml - vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0): + vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0): dependencies: - esbuild: 0.24.2 - postcss: 8.5.2 + esbuild: 0.25.1 + postcss: 8.5.3 rollup: 4.34.6 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.14.1 fsevents: 2.3.3 jiti: 2.4.2 yaml: 2.7.0 - vitest@3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@2.4.2)(jsdom@20.0.3)(yaml@2.7.0): + vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.1)(jiti@2.4.2)(jsdom@20.0.3)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.6 - '@vitest/mocker': 3.0.6(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.6 - '@vitest/runner': 3.0.6 - '@vitest/snapshot': 3.0.6 - '@vitest/spy': 3.0.6 - '@vitest/utils': 3.0.6 + '@vitest/expect': 3.1.1 + '@vitest/mocker': 3.1.1(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0)) + '@vitest/pretty-format': 3.1.1 + '@vitest/runner': 3.1.1 + '@vitest/snapshot': 3.1.1 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 chai: 5.2.0 debug: 4.4.0 - expect-type: 1.1.0 + expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 - std-env: 3.8.0 + std-env: 3.8.1 tinybench: 2.9.0 tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) - vite-node: 3.0.6(@types/node@22.13.5)(jiti@2.4.2)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) + vite-node: 3.1.1(@types/node@22.14.1)(jiti@2.4.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.5 + '@types/node': 22.14.1 jsdom: 20.0.3 transitivePeerDependencies: - jiti @@ -12170,6 +11960,8 @@ snapshots: ws@8.18.0: {} + ws@8.18.1: {} + xml-name-validator@4.0.0: {} xmlchars@2.2.0: {} @@ -12209,9 +12001,9 @@ snapshots: zod@3.24.2: {} - zustand@5.0.3(@types/react@19.0.10)(react@19.0.0): + zustand@5.0.3(@types/react@19.1.2)(react@19.1.0): optionalDependencies: - '@types/react': 19.0.10 - react: 19.0.0 + '@types/react': 19.1.2 + react: 19.1.0 zwitch@2.0.4: {} diff --git a/front/public/icons/icon-192x192.png b/front/public/icons/icon-192x192.png new file mode 100644 index 0000000..af070ea Binary files /dev/null and b/front/public/icons/icon-192x192.png differ diff --git a/front/public/icons/icon-512x512.png b/front/public/icons/icon-512x512.png new file mode 100644 index 0000000..6bd6b2f Binary files /dev/null and b/front/public/icons/icon-512x512.png differ diff --git a/front/public/manifest.json b/front/public/manifest.json new file mode 100644 index 0000000..fb3cb10 --- /dev/null +++ b/front/public/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Karusic", + "short_name": "Karusic", + "description": "(K)angaroo (A)nd (R)abbit m(usic) is a music streaming", + "start_url": "/karusic/", + "display": "standalone", + "background_color": "#000000", + "theme_color": "#FFFFFF", + "icons": [ + { + "src": "/karusic/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/karusic/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} \ No newline at end of file diff --git a/front/src/back-api/api/data-resource.ts b/front/src/back-api/api/data-resource.ts index 7b32bb2..1ce6821 100644 --- a/front/src/back-api/api/data-resource.ts +++ b/front/src/back-api/api/data-resource.ts @@ -22,7 +22,7 @@ export namespace DataResource { restConfig, queries, params, - data, + headers, }: { restConfig: RESTConfig, queries: { @@ -32,7 +32,9 @@ export namespace DataResource { name: string, oid: ObjectId, }, - data: string, + headers?: { + Range?: string, + }, }): Promise { return RESTRequestJson({ restModel: { @@ -42,7 +44,7 @@ export namespace DataResource { restConfig, params, queries, - data, + headers, }); }; /** @@ -52,7 +54,7 @@ export namespace DataResource { restConfig, queries, params, - data, + headers, }: { restConfig: RESTConfig, queries: { @@ -61,7 +63,9 @@ export namespace DataResource { params: { oid: ObjectId, }, - data: string, + headers?: { + Range: string, + }, }): Promise { return RESTRequestJson({ restModel: { @@ -71,7 +75,7 @@ export namespace DataResource { restConfig, params, queries, - data, + headers, }); }; /** @@ -81,7 +85,7 @@ export namespace DataResource { restConfig, queries, params, - data, + headers, }: { restConfig: RESTConfig, queries: { @@ -90,7 +94,9 @@ export namespace DataResource { params: { oid: ObjectId, }, - data: string, + headers?: { + Range: string, + }, }): Promise { return RESTRequestJson({ restModel: { @@ -100,7 +106,7 @@ export namespace DataResource { restConfig, params, queries, - data, + headers, }); }; /** diff --git a/front/src/back-api/api/media-resource.ts b/front/src/back-api/api/media-resource.ts index a4dbcc5..f3d8c17 100644 --- a/front/src/back-api/api/media-resource.ts +++ b/front/src/back-api/api/media-resource.ts @@ -14,7 +14,7 @@ import { z as zod } from "zod" import { Long, Media, - MediaWrite, + MediaUpdate, UUID, ZodMedia, isMedia, @@ -87,12 +87,12 @@ export namespace MediaResource { params: { id: Long, }, - data: MediaWrite, + data: MediaUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/media/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, diff --git a/front/src/back-api/api/season-resource.ts b/front/src/back-api/api/season-resource.ts index 78ecc70..6f49008 100644 --- a/front/src/back-api/api/season-resource.ts +++ b/front/src/back-api/api/season-resource.ts @@ -14,7 +14,8 @@ import { z as zod } from "zod" import { Long, Season, - SeasonWrite, + SeasonCreate, + SeasonUpdate, UUID, ZodSeason, isSeason, @@ -88,12 +89,12 @@ export namespace SeasonResource { params: { id: Long, }, - data: SeasonWrite, + data: SeasonUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/season/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, @@ -110,7 +111,7 @@ export namespace SeasonResource { data, }: { restConfig: RESTConfig, - data: SeasonWrite, + data: SeasonCreate, }): Promise { return RESTRequestJson({ restModel: { diff --git a/front/src/back-api/api/series-resource.ts b/front/src/back-api/api/series-resource.ts index 18c90c6..07e75c4 100644 --- a/front/src/back-api/api/series-resource.ts +++ b/front/src/back-api/api/series-resource.ts @@ -14,7 +14,8 @@ import { z as zod } from "zod" import { Long, Series, - SeriesWrite, + SeriesCreate, + SeriesUpdate, UUID, ZodSeries, isSeries, @@ -88,12 +89,12 @@ export namespace SeriesResource { params: { id: Long, }, - data: SeriesWrite, + data: SeriesUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/series/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, @@ -110,7 +111,7 @@ export namespace SeriesResource { data, }: { restConfig: RESTConfig, - data: SeriesWrite, + data: SeriesCreate, }): Promise { return RESTRequestJson({ restModel: { diff --git a/front/src/back-api/api/type-resource.ts b/front/src/back-api/api/type-resource.ts index 8b3da6e..6347546 100644 --- a/front/src/back-api/api/type-resource.ts +++ b/front/src/back-api/api/type-resource.ts @@ -14,7 +14,8 @@ import { z as zod } from "zod" import { Long, Type, - TypeWrite, + TypeCreate, + TypeUpdate, UUID, ZodType, isType, @@ -88,12 +89,12 @@ export namespace TypeResource { params: { id: Long, }, - data: TypeWrite, + data: TypeUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/type/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, @@ -110,7 +111,7 @@ export namespace TypeResource { data, }: { restConfig: RESTConfig, - data: TypeWrite, + data: TypeCreate, }): Promise { return RESTRequestJson({ restModel: { diff --git a/front/src/back-api/api/user-media-advancement-resource.ts b/front/src/back-api/api/user-media-advancement-resource.ts index fd66801..954b41d 100644 --- a/front/src/back-api/api/user-media-advancement-resource.ts +++ b/front/src/back-api/api/user-media-advancement-resource.ts @@ -12,7 +12,7 @@ import { import { z as zod } from "zod" import { Long, - MediaInformationsDeltaWrite, + MediaInformationsDelta, UserMediaAdvancement, ZodUserMediaAdvancement, isUserMediaAdvancement, @@ -85,12 +85,12 @@ export namespace UserMediaAdvancementResource { params: { id: Long, }, - data: MediaInformationsDeltaWrite, + data: MediaInformationsDelta, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/advancement/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, diff --git a/front/src/back-api/model/data.ts b/front/src/back-api/model/data.ts index be379d2..c962501 100644 --- a/front/src/back-api/model/data.ts +++ b/front/src/back-api/model/data.ts @@ -3,23 +3,23 @@ */ import { z as zod } from "zod"; -import {ZodLong} from "./long"; import {ZodObjectId} from "./object-id"; -import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteWrite } from "./oid-generic-data-soft-delete"; +import {ZodLong} from "./long"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; export const ZodData = ZodOIDGenericDataSoftDelete.extend({ /** * Sha512 of the data */ - sha512: zod.string().max(512), + sha512: zod.string().max(512).readonly(), /** * Mime -type of the media */ - mimeType: zod.string().max(512), + mimeType: zod.string().max(512).readonly(), /** * Size in Byte of the data */ - size: ZodLong, + size: ZodLong.readonly(), /** * Unique ObjectID of the object */ @@ -38,30 +38,3 @@ export function isData(data: any): data is Data { return false; } } -export const ZodDataWrite = ZodOIDGenericDataSoftDeleteWrite.extend({ - /** - * Sha512 of the data - */ - sha512: zod.string().max(512).optional(), - /** - * Mime -type of the media - */ - mimeType: zod.string().max(512).optional(), - /** - * Size in Byte of the data - */ - size: ZodLong.optional(), - -}); - -export type DataWrite = zod.infer; - -export function isDataWrite(data: any): data is DataWrite { - try { - ZodDataWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodDataWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/generic-data-soft-delete.ts b/front/src/back-api/model/generic-data-soft-delete.ts index 741eee0..a9e6438 100644 --- a/front/src/back-api/model/generic-data-soft-delete.ts +++ b/front/src/back-api/model/generic-data-soft-delete.ts @@ -3,7 +3,7 @@ */ import { z as zod } from "zod"; -import {ZodGenericData, ZodGenericDataWrite } from "./generic-data"; +import {ZodGenericData, ZodGenericDataUpdate , ZodGenericDataCreate } from "./generic-data"; export const ZodGenericDataSoftDelete = ZodGenericData.extend({ /** @@ -24,16 +24,29 @@ export function isGenericDataSoftDelete(data: any): data is GenericDataSoftDelet return false; } } -export const ZodGenericDataSoftDeleteWrite = ZodGenericDataWrite; +export const ZodGenericDataSoftDeleteUpdate = ZodGenericDataUpdate; -export type GenericDataSoftDeleteWrite = zod.infer; +export type GenericDataSoftDeleteUpdate = zod.infer; -export function isGenericDataSoftDeleteWrite(data: any): data is GenericDataSoftDeleteWrite { +export function isGenericDataSoftDeleteUpdate(data: any): data is GenericDataSoftDeleteUpdate { try { - ZodGenericDataSoftDeleteWrite.parse(data); + ZodGenericDataSoftDeleteUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodGenericDataSoftDeleteWrite' error=${e}`); + console.log(`Fail to parse data type='ZodGenericDataSoftDeleteUpdate' error=${e}`); + return false; + } +} +export const ZodGenericDataSoftDeleteCreate = ZodGenericDataCreate; + +export type GenericDataSoftDeleteCreate = zod.infer; + +export function isGenericDataSoftDeleteCreate(data: any): data is GenericDataSoftDeleteCreate { + try { + ZodGenericDataSoftDeleteCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodGenericDataSoftDeleteCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/generic-data.ts b/front/src/back-api/model/generic-data.ts index 898b37a..aaf52a6 100644 --- a/front/src/back-api/model/generic-data.ts +++ b/front/src/back-api/model/generic-data.ts @@ -3,8 +3,8 @@ */ import { z as zod } from "zod"; +import {ZodGenericTiming, ZodGenericTimingUpdate , ZodGenericTimingCreate } from "./generic-timing"; import {ZodLong} from "./long"; -import {ZodGenericTiming, ZodGenericTimingWrite } from "./generic-timing"; export const ZodGenericData = ZodGenericTiming.extend({ /** @@ -25,16 +25,29 @@ export function isGenericData(data: any): data is GenericData { return false; } } -export const ZodGenericDataWrite = ZodGenericTimingWrite; +export const ZodGenericDataUpdate = ZodGenericTimingUpdate; -export type GenericDataWrite = zod.infer; +export type GenericDataUpdate = zod.infer; -export function isGenericDataWrite(data: any): data is GenericDataWrite { +export function isGenericDataUpdate(data: any): data is GenericDataUpdate { try { - ZodGenericDataWrite.parse(data); + ZodGenericDataUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodGenericDataWrite' error=${e}`); + console.log(`Fail to parse data type='ZodGenericDataUpdate' error=${e}`); + return false; + } +} +export const ZodGenericDataCreate = ZodGenericTimingCreate; + +export type GenericDataCreate = zod.infer; + +export function isGenericDataCreate(data: any): data is GenericDataCreate { + try { + ZodGenericDataCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodGenericDataCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/generic-timing.ts b/front/src/back-api/model/generic-timing.ts index d1e28d7..9d5b1e1 100644 --- a/front/src/back-api/model/generic-timing.ts +++ b/front/src/back-api/model/generic-timing.ts @@ -28,18 +28,33 @@ export function isGenericTiming(data: any): data is GenericTiming { return false; } } -export const ZodGenericTimingWrite = zod.object({ +export const ZodGenericTimingUpdate = zod.object({ }); -export type GenericTimingWrite = zod.infer; +export type GenericTimingUpdate = zod.infer; -export function isGenericTimingWrite(data: any): data is GenericTimingWrite { +export function isGenericTimingUpdate(data: any): data is GenericTimingUpdate { try { - ZodGenericTimingWrite.parse(data); + ZodGenericTimingUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodGenericTimingWrite' error=${e}`); + console.log(`Fail to parse data type='ZodGenericTimingUpdate' error=${e}`); + return false; + } +} +export const ZodGenericTimingCreate = zod.object({ + +}); + +export type GenericTimingCreate = zod.infer; + +export function isGenericTimingCreate(data: any): data is GenericTimingCreate { + try { + ZodGenericTimingCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodGenericTimingCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/health-result.ts b/front/src/back-api/model/health-result.ts index 2b265d6..12dd22c 100644 --- a/front/src/back-api/model/health-result.ts +++ b/front/src/back-api/model/health-result.ts @@ -19,18 +19,3 @@ export function isHealthResult(data: any): data is HealthResult { return false; } } -export const ZodHealthResultWrite = zod.object({ - -}); - -export type HealthResultWrite = zod.infer; - -export function isHealthResultWrite(data: any): data is HealthResultWrite { - try { - ZodHealthResultWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodHealthResultWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/index.ts b/front/src/back-api/model/index.ts index 252035d..5189c97 100644 --- a/front/src/back-api/model/index.ts +++ b/front/src/back-api/model/index.ts @@ -18,7 +18,9 @@ export * from "./media-informations-delta" export * from "./object-id" export * from "./oid-generic-data" export * from "./oid-generic-data-soft-delete" +export * from "./part-right" export * from "./rest-error-response" +export * from "./rest-input-error" export * from "./season" export * from "./series" export * from "./timestamp" diff --git a/front/src/back-api/model/jwt-header.ts b/front/src/back-api/model/jwt-header.ts index a89fe30..8ce3551 100644 --- a/front/src/back-api/model/jwt-header.ts +++ b/front/src/back-api/model/jwt-header.ts @@ -21,20 +21,3 @@ export function isJwtHeader(data: any): data is JwtHeader { return false; } } -export const ZodJwtHeaderWrite = zod.object({ - typ: zod.string().max(128).optional(), - alg: zod.string().max(128).optional(), - -}); - -export type JwtHeaderWrite = zod.infer; - -export function isJwtHeaderWrite(data: any): data is JwtHeaderWrite { - try { - ZodJwtHeaderWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodJwtHeaderWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/jwt-payload.ts b/front/src/back-api/model/jwt-payload.ts index 27b88e1..5ebcdaf 100644 --- a/front/src/back-api/model/jwt-payload.ts +++ b/front/src/back-api/model/jwt-payload.ts @@ -27,25 +27,3 @@ export function isJwtPayload(data: any): data is JwtPayload { return false; } } -export const ZodJwtPayloadWrite = zod.object({ - sub: zod.string().optional(), - application: zod.string().optional(), - iss: zod.string().optional(), - right: zod.record(zod.string(), zod.record(zod.string(), ZodLong)).optional(), - login: zod.string().optional(), - exp: ZodLong.optional(), - iat: ZodLong.optional(), - -}); - -export type JwtPayloadWrite = zod.infer; - -export function isJwtPayloadWrite(data: any): data is JwtPayloadWrite { - try { - ZodJwtPayloadWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodJwtPayloadWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/jwt-token.ts b/front/src/back-api/model/jwt-token.ts index af74806..5f9c974 100644 --- a/front/src/back-api/model/jwt-token.ts +++ b/front/src/back-api/model/jwt-token.ts @@ -3,8 +3,8 @@ */ import { z as zod } from "zod"; -import {ZodJwtHeader, ZodJwtHeaderWrite } from "./jwt-header"; -import {ZodJwtPayload, ZodJwtPayloadWrite } from "./jwt-payload"; +import {ZodJwtHeader} from "./jwt-header"; +import {ZodJwtPayload} from "./jwt-payload"; export const ZodJwtToken = zod.object({ header: ZodJwtHeader, @@ -24,21 +24,3 @@ export function isJwtToken(data: any): data is JwtToken { return false; } } -export const ZodJwtTokenWrite = zod.object({ - header: ZodJwtHeader.optional(), - payload: ZodJwtPayload.optional(), - signature: zod.string().optional(), - -}); - -export type JwtTokenWrite = zod.infer; - -export function isJwtTokenWrite(data: any): data is JwtTokenWrite { - try { - ZodJwtTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodJwtTokenWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/media-informations-delta.ts b/front/src/back-api/model/media-informations-delta.ts index 5658b4e..5aa27d5 100644 --- a/front/src/back-api/model/media-informations-delta.ts +++ b/front/src/back-api/model/media-informations-delta.ts @@ -19,18 +19,3 @@ export function isMediaInformationsDelta(data: any): data is MediaInformationsDe return false; } } -export const ZodMediaInformationsDeltaWrite = zod.object({ - -}); - -export type MediaInformationsDeltaWrite = zod.infer; - -export function isMediaInformationsDeltaWrite(data: any): data is MediaInformationsDeltaWrite { - try { - ZodMediaInformationsDeltaWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodMediaInformationsDeltaWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/media.ts b/front/src/back-api/model/media.ts index 6bacd0b..d0a5991 100644 --- a/front/src/back-api/model/media.ts +++ b/front/src/back-api/model/media.ts @@ -4,25 +4,24 @@ import { z as zod } from "zod"; import {ZodObjectId} from "./object-id"; -import {ZodUUID} from "./uuid"; import {ZodLong} from "./long"; import {ZodInteger} from "./integer"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodIsoDate} from "./iso-date"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodMedia = ZodGenericDataSoftDelete.extend({ /** * Name of the media (this represent the title) */ - name: zod.string(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().optional(), + description: zod.string().max(8192).optional(), /** * Foreign Key Id of the data */ dataId: ZodObjectId, - dataIdOld: ZodUUID.optional(), /** * Type of the media */ @@ -39,11 +38,10 @@ export const ZodMedia = ZodGenericDataSoftDelete.extend({ * Episode Id */ episode: ZodInteger.optional(), - date: ZodInteger.optional(), /** * Creation years of the media */ - time: ZodInteger.optional(), + datePublication: ZodIsoDate.optional(), /** * Limitation Age of the media */ @@ -66,20 +64,19 @@ export function isMedia(data: any): data is Media { return false; } } -export const ZodMediaWrite = ZodGenericDataSoftDeleteWrite.extend({ +export const ZodMediaUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * Name of the media (this represent the title) */ - name: zod.string().optional(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().nullable().optional(), + description: zod.string().max(8192).nullable().optional(), /** * Foreign Key Id of the data */ - dataId: ZodObjectId.optional(), - dataIdOld: ZodUUID.nullable().optional(), + dataId: ZodObjectId, /** * Type of the media */ @@ -96,11 +93,10 @@ export const ZodMediaWrite = ZodGenericDataSoftDeleteWrite.extend({ * Episode Id */ episode: ZodInteger.nullable().optional(), - date: ZodInteger.nullable().optional(), /** * Creation years of the media */ - time: ZodInteger.nullable().optional(), + datePublication: ZodIsoDate.nullable().optional(), /** * Limitation Age of the media */ @@ -112,14 +108,69 @@ export const ZodMediaWrite = ZodGenericDataSoftDeleteWrite.extend({ }); -export type MediaWrite = zod.infer; +export type MediaUpdate = zod.infer; -export function isMediaWrite(data: any): data is MediaWrite { +export function isMediaUpdate(data: any): data is MediaUpdate { try { - ZodMediaWrite.parse(data); + ZodMediaUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodMediaWrite' error=${e}`); + console.log(`Fail to parse data type='ZodMediaUpdate' error=${e}`); + return false; + } +} +export const ZodMediaCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * Name of the media (this represent the title) + */ + name: zod.string().max(256), + /** + * Description of the media + */ + description: zod.string().max(8192).nullable().optional(), + /** + * Foreign Key Id of the data + */ + dataId: ZodObjectId, + /** + * Type of the media + */ + typeId: ZodLong.nullable().optional(), + /** + * Series reference of the media + */ + seriesId: ZodLong.nullable().optional(), + /** + * Season reference of the media + */ + seasonId: ZodLong.nullable().optional(), + /** + * Episode Id + */ + episode: ZodInteger.nullable().optional(), + /** + * Creation years of the media + */ + datePublication: ZodIsoDate.nullable().optional(), + /** + * Limitation Age of the media + */ + ageLimit: ZodInteger.nullable().optional(), + /** + * List of Id of the specific covers + */ + covers: zod.array(ZodObjectId).nullable().optional(), + +}); + +export type MediaCreate = zod.infer; + +export function isMediaCreate(data: any): data is MediaCreate { + try { + ZodMediaCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodMediaCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/oid-generic-data-soft-delete.ts b/front/src/back-api/model/oid-generic-data-soft-delete.ts index 7bf9a18..ccaf260 100644 --- a/front/src/back-api/model/oid-generic-data-soft-delete.ts +++ b/front/src/back-api/model/oid-generic-data-soft-delete.ts @@ -4,7 +4,7 @@ import { z as zod } from "zod"; import {ZodObjectId} from "./object-id"; -import {ZodOIDGenericData, ZodOIDGenericDataWrite } from "./oid-generic-data"; +import {ZodOIDGenericData, ZodOIDGenericDataUpdate , ZodOIDGenericDataCreate } from "./oid-generic-data"; export const ZodOIDGenericDataSoftDelete = ZodOIDGenericData.extend({ /** @@ -29,16 +29,29 @@ export function isOIDGenericDataSoftDelete(data: any): data is OIDGenericDataSof return false; } } -export const ZodOIDGenericDataSoftDeleteWrite = ZodOIDGenericDataWrite; +export const ZodOIDGenericDataSoftDeleteUpdate = ZodOIDGenericDataUpdate; -export type OIDGenericDataSoftDeleteWrite = zod.infer; +export type OIDGenericDataSoftDeleteUpdate = zod.infer; -export function isOIDGenericDataSoftDeleteWrite(data: any): data is OIDGenericDataSoftDeleteWrite { +export function isOIDGenericDataSoftDeleteUpdate(data: any): data is OIDGenericDataSoftDeleteUpdate { try { - ZodOIDGenericDataSoftDeleteWrite.parse(data); + ZodOIDGenericDataSoftDeleteUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodOIDGenericDataSoftDeleteWrite' error=${e}`); + console.log(`Fail to parse data type='ZodOIDGenericDataSoftDeleteUpdate' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataSoftDeleteCreate = ZodOIDGenericDataCreate; + +export type OIDGenericDataSoftDeleteCreate = zod.infer; + +export function isOIDGenericDataSoftDeleteCreate(data: any): data is OIDGenericDataSoftDeleteCreate { + try { + ZodOIDGenericDataSoftDeleteCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataSoftDeleteCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/oid-generic-data.ts b/front/src/back-api/model/oid-generic-data.ts index 35479a6..36a8faa 100644 --- a/front/src/back-api/model/oid-generic-data.ts +++ b/front/src/back-api/model/oid-generic-data.ts @@ -4,7 +4,7 @@ import { z as zod } from "zod"; import {ZodObjectId} from "./object-id"; -import {ZodGenericTiming, ZodGenericTimingWrite } from "./generic-timing"; +import {ZodGenericTiming, ZodGenericTimingUpdate , ZodGenericTimingCreate } from "./generic-timing"; export const ZodOIDGenericData = ZodGenericTiming.extend({ /** @@ -25,16 +25,29 @@ export function isOIDGenericData(data: any): data is OIDGenericData { return false; } } -export const ZodOIDGenericDataWrite = ZodGenericTimingWrite; +export const ZodOIDGenericDataUpdate = ZodGenericTimingUpdate; -export type OIDGenericDataWrite = zod.infer; +export type OIDGenericDataUpdate = zod.infer; -export function isOIDGenericDataWrite(data: any): data is OIDGenericDataWrite { +export function isOIDGenericDataUpdate(data: any): data is OIDGenericDataUpdate { try { - ZodOIDGenericDataWrite.parse(data); + ZodOIDGenericDataUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodOIDGenericDataWrite' error=${e}`); + console.log(`Fail to parse data type='ZodOIDGenericDataUpdate' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataCreate = ZodGenericTimingCreate; + +export type OIDGenericDataCreate = zod.infer; + +export function isOIDGenericDataCreate(data: any): data is OIDGenericDataCreate { + try { + ZodOIDGenericDataCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/rest-error-response.ts b/front/src/back-api/model/rest-error-response.ts index 4ee9576..d83aaa0 100644 --- a/front/src/back-api/model/rest-error-response.ts +++ b/front/src/back-api/model/rest-error-response.ts @@ -3,8 +3,9 @@ */ import { z as zod } from "zod"; -import {ZodObjectId} from "./object-id"; import {ZodInteger} from "./integer"; +import {ZodObjectId} from "./object-id"; +import {ZodRestInputError} from "./rest-input-error"; export const ZodRestErrorResponse = zod.object({ oid: ZodObjectId.optional(), @@ -13,6 +14,7 @@ export const ZodRestErrorResponse = zod.object({ time: zod.string(), status: ZodInteger, statusMessage: zod.string(), + inputError: zod.array(ZodRestInputError).optional(), }); diff --git a/front/src/back-api/model/rest-input-error.ts b/front/src/back-api/model/rest-input-error.ts new file mode 100644 index 0000000..9b77edb --- /dev/null +++ b/front/src/back-api/model/rest-input-error.ts @@ -0,0 +1,24 @@ +/** + * Interface of the server (auto-generated code) + */ +import { z as zod } from "zod"; + + +export const ZodRestInputError = zod.object({ + argument: zod.string().optional(), + path: zod.string().optional(), + message: zod.string(), + +}); + +export type RestInputError = zod.infer; + +export function isRestInputError(data: any): data is RestInputError { + try { + ZodRestInputError.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodRestInputError' error=${e}`); + return false; + } +} diff --git a/front/src/back-api/model/season.ts b/front/src/back-api/model/season.ts index 1b8f511..8a3c83b 100644 --- a/front/src/back-api/model/season.ts +++ b/front/src/back-api/model/season.ts @@ -3,19 +3,19 @@ */ import { z as zod } from "zod"; -import {ZodLong} from "./long"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodLong} from "./long"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodSeason = ZodGenericDataSoftDelete.extend({ /** * Name of the media (this represent the title) */ - name: zod.string(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().optional(), + description: zod.string().max(8192).optional(), /** * series parent ID */ @@ -38,19 +38,19 @@ export function isSeason(data: any): data is Season { return false; } } -export const ZodSeasonWrite = ZodGenericDataSoftDeleteWrite.extend({ +export const ZodSeasonUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * Name of the media (this represent the title) */ - name: zod.string().optional(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().nullable().optional(), + description: zod.string().max(8192).nullable().optional(), /** * series parent ID */ - parentId: ZodLong.optional(), + parentId: ZodLong, /** * List of Id of the specific covers */ @@ -58,14 +58,45 @@ export const ZodSeasonWrite = ZodGenericDataSoftDeleteWrite.extend({ }); -export type SeasonWrite = zod.infer; +export type SeasonUpdate = zod.infer; -export function isSeasonWrite(data: any): data is SeasonWrite { +export function isSeasonUpdate(data: any): data is SeasonUpdate { try { - ZodSeasonWrite.parse(data); + ZodSeasonUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodSeasonWrite' error=${e}`); + console.log(`Fail to parse data type='ZodSeasonUpdate' error=${e}`); + return false; + } +} +export const ZodSeasonCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * Name of the media (this represent the title) + */ + name: zod.string().max(256), + /** + * Description of the media + */ + description: zod.string().max(8192).nullable().optional(), + /** + * series parent ID + */ + parentId: ZodLong, + /** + * List of Id of the specific covers + */ + covers: zod.array(ZodObjectId).nullable().optional(), + +}); + +export type SeasonCreate = zod.infer; + +export function isSeasonCreate(data: any): data is SeasonCreate { + try { + ZodSeasonCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodSeasonCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/series.ts b/front/src/back-api/model/series.ts index 3840b76..dd04f48 100644 --- a/front/src/back-api/model/series.ts +++ b/front/src/back-api/model/series.ts @@ -3,19 +3,19 @@ */ import { z as zod } from "zod"; -import {ZodLong} from "./long"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodLong} from "./long"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodSeries = ZodGenericDataSoftDelete.extend({ /** * Name of the media (this represent the title) */ - name: zod.string(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().optional(), + description: zod.string().max(8192).optional(), /** * series parent ID */ @@ -38,19 +38,19 @@ export function isSeries(data: any): data is Series { return false; } } -export const ZodSeriesWrite = ZodGenericDataSoftDeleteWrite.extend({ +export const ZodSeriesUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * Name of the media (this represent the title) */ - name: zod.string().optional(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().nullable().optional(), + description: zod.string().max(8192).nullable().optional(), /** * series parent ID */ - parentId: ZodLong.optional(), + parentId: ZodLong, /** * List of Id of the specific covers */ @@ -58,14 +58,45 @@ export const ZodSeriesWrite = ZodGenericDataSoftDeleteWrite.extend({ }); -export type SeriesWrite = zod.infer; +export type SeriesUpdate = zod.infer; -export function isSeriesWrite(data: any): data is SeriesWrite { +export function isSeriesUpdate(data: any): data is SeriesUpdate { try { - ZodSeriesWrite.parse(data); + ZodSeriesUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodSeriesWrite' error=${e}`); + console.log(`Fail to parse data type='ZodSeriesUpdate' error=${e}`); + return false; + } +} +export const ZodSeriesCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * Name of the media (this represent the title) + */ + name: zod.string().max(256), + /** + * Description of the media + */ + description: zod.string().max(8192).nullable().optional(), + /** + * series parent ID + */ + parentId: ZodLong, + /** + * List of Id of the specific covers + */ + covers: zod.array(ZodObjectId).nullable().optional(), + +}); + +export type SeriesCreate = zod.infer; + +export function isSeriesCreate(data: any): data is SeriesCreate { + try { + ZodSeriesCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodSeriesCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/type.ts b/front/src/back-api/model/type.ts index daa43f6..b045c9b 100644 --- a/front/src/back-api/model/type.ts +++ b/front/src/back-api/model/type.ts @@ -4,17 +4,17 @@ import { z as zod } from "zod"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodType = ZodGenericDataSoftDelete.extend({ /** * Name of the media (this represent the title) */ - name: zod.string(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().optional(), + description: zod.string().max(8192).optional(), /** * List of Id of the specific covers */ @@ -33,15 +33,15 @@ export function isType(data: any): data is Type { return false; } } -export const ZodTypeWrite = ZodGenericDataSoftDeleteWrite.extend({ +export const ZodTypeUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * Name of the media (this represent the title) */ - name: zod.string().optional(), + name: zod.string().max(256), /** * Description of the media */ - description: zod.string().nullable().optional(), + description: zod.string().max(8192).nullable().optional(), /** * List of Id of the specific covers */ @@ -49,14 +49,41 @@ export const ZodTypeWrite = ZodGenericDataSoftDeleteWrite.extend({ }); -export type TypeWrite = zod.infer; +export type TypeUpdate = zod.infer; -export function isTypeWrite(data: any): data is TypeWrite { +export function isTypeUpdate(data: any): data is TypeUpdate { try { - ZodTypeWrite.parse(data); + ZodTypeUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodTypeWrite' error=${e}`); + console.log(`Fail to parse data type='ZodTypeUpdate' error=${e}`); + return false; + } +} +export const ZodTypeCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * Name of the media (this represent the title) + */ + name: zod.string().max(256), + /** + * Description of the media + */ + description: zod.string().max(8192).nullable().optional(), + /** + * List of Id of the specific covers + */ + covers: zod.array(ZodObjectId).nullable().optional(), + +}); + +export type TypeCreate = zod.infer; + +export function isTypeCreate(data: any): data is TypeCreate { + try { + ZodTypeCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodTypeCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/user-karideo.ts b/front/src/back-api/model/user-karideo.ts index f8f8995..1bbe45a 100644 --- a/front/src/back-api/model/user-karideo.ts +++ b/front/src/back-api/model/user-karideo.ts @@ -3,7 +3,7 @@ */ import { z as zod } from "zod"; -import {ZodUser, ZodUserWrite } from "./user"; +import {ZodUser, ZodUserUpdate , ZodUserCreate } from "./user"; export const ZodUserKarideo = ZodUser; @@ -18,16 +18,3 @@ export function isUserKarideo(data: any): data is UserKarideo { return false; } } -export const ZodUserKarideoWrite = ZodUserWrite; - -export type UserKarideoWrite = zod.infer; - -export function isUserKarideoWrite(data: any): data is UserKarideoWrite { - try { - ZodUserKarideoWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodUserKarideoWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/user-media-advancement.ts b/front/src/back-api/model/user-media-advancement.ts index 8f4fa60..561df96 100644 --- a/front/src/back-api/model/user-media-advancement.ts +++ b/front/src/back-api/model/user-media-advancement.ts @@ -4,15 +4,15 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; -import {ZodFloat} from "./float"; import {ZodInteger} from "./integer"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodFloat} from "./float"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodUserMediaAdvancement = ZodGenericDataSoftDelete.extend({ /** * Foreign Key Id of the user */ - userId: ZodLong.optional(), + userId: ZodLong.readonly().optional(), /** * Id of the media */ @@ -43,38 +43,65 @@ export function isUserMediaAdvancement(data: any): data is UserMediaAdvancement return false; } } -export const ZodUserMediaAdvancementWrite = ZodGenericDataSoftDeleteWrite.extend({ - /** - * Foreign Key Id of the user - */ - userId: ZodLong.nullable().optional(), +export const ZodUserMediaAdvancementUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * Id of the media */ - mediaId: ZodLong.optional(), + mediaId: ZodLong, /** * Percent of advancement in the media */ - percent: ZodFloat.optional(), + percent: ZodFloat, /** * Number of second of advancement in the media */ - time: ZodInteger.optional(), + time: ZodInteger, /** * Number of time this media has been read */ - count: ZodInteger.optional(), + count: ZodInteger, }); -export type UserMediaAdvancementWrite = zod.infer; +export type UserMediaAdvancementUpdate = zod.infer; -export function isUserMediaAdvancementWrite(data: any): data is UserMediaAdvancementWrite { +export function isUserMediaAdvancementUpdate(data: any): data is UserMediaAdvancementUpdate { try { - ZodUserMediaAdvancementWrite.parse(data); + ZodUserMediaAdvancementUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodUserMediaAdvancementWrite' error=${e}`); + console.log(`Fail to parse data type='ZodUserMediaAdvancementUpdate' error=${e}`); + return false; + } +} +export const ZodUserMediaAdvancementCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * Id of the media + */ + mediaId: ZodLong, + /** + * Percent of advancement in the media + */ + percent: ZodFloat, + /** + * Number of second of advancement in the media + */ + time: ZodInteger, + /** + * Number of time this media has been read + */ + count: ZodInteger, + +}); + +export type UserMediaAdvancementCreate = zod.infer; + +export function isUserMediaAdvancementCreate(data: any): data is UserMediaAdvancementCreate { + try { + ZodUserMediaAdvancementCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodUserMediaAdvancementCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/user-out.ts b/front/src/back-api/model/user-out.ts index afb77eb..20a784f 100644 --- a/front/src/back-api/model/user-out.ts +++ b/front/src/back-api/model/user-out.ts @@ -22,20 +22,3 @@ export function isUserOut(data: any): data is UserOut { return false; } } -export const ZodUserOutWrite = zod.object({ - id: ZodLong, - login: zod.string().nullable().optional(), - -}); - -export type UserOutWrite = zod.infer; - -export function isUserOutWrite(data: any): data is UserOutWrite { - try { - ZodUserOutWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodUserOutWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/user.ts b/front/src/back-api/model/user.ts index 0fc33b8..6bcc73c 100644 --- a/front/src/back-api/model/user.ts +++ b/front/src/back-api/model/user.ts @@ -5,7 +5,7 @@ import { z as zod } from "zod"; import {ZodTimestamp} from "./timestamp"; import {ZodUUID} from "./uuid"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodUser = ZodGenericDataSoftDelete.extend({ login: zod.string().min(3).max(128), @@ -30,8 +30,8 @@ export function isUser(data: any): data is User { return false; } } -export const ZodUserWrite = ZodGenericDataSoftDeleteWrite.extend({ - login: zod.string().min(3).max(128).optional(), +export const ZodUserUpdate = ZodGenericDataSoftDeleteUpdate.extend({ + login: zod.string().min(3).max(128), lastConnection: ZodTimestamp.nullable().optional(), blocked: zod.boolean().nullable().optional(), blockedReason: zod.string().max(512).nullable().optional(), @@ -42,14 +42,37 @@ export const ZodUserWrite = ZodGenericDataSoftDeleteWrite.extend({ }); -export type UserWrite = zod.infer; +export type UserUpdate = zod.infer; -export function isUserWrite(data: any): data is UserWrite { +export function isUserUpdate(data: any): data is UserUpdate { try { - ZodUserWrite.parse(data); + ZodUserUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodUserWrite' error=${e}`); + console.log(`Fail to parse data type='ZodUserUpdate' error=${e}`); + return false; + } +} +export const ZodUserCreate = ZodGenericDataSoftDeleteCreate.extend({ + login: zod.string().min(3).max(128), + lastConnection: ZodTimestamp.nullable().optional(), + blocked: zod.boolean().nullable().optional(), + blockedReason: zod.string().max(512).nullable().optional(), + /** + * List of Id of the specific covers + */ + covers: zod.array(ZodUUID).nullable().optional(), + +}); + +export type UserCreate = zod.infer; + +export function isUserCreate(data: any): data is UserCreate { + try { + ZodUserCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodUserCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/rest-tools.ts b/front/src/back-api/rest-tools.ts index d269ed7..7c12d0d 100644 --- a/front/src/back-api/rest-tools.ts +++ b/front/src/back-api/rest-tools.ts @@ -3,30 +3,29 @@ * @copyright 2024, Edouard DUPIN, all right reserved * @license MPL-2 */ - -import { RestErrorResponse, isRestErrorResponse } from "./model"; +import { RestErrorResponse, isRestErrorResponse } from './model'; export enum HTTPRequestModel { - ARCHIVE = "ARCHIVE", - DELETE = "DELETE", - HEAD = "HEAD", - GET = "GET", - OPTION = "OPTION", - PATCH = "PATCH", - POST = "POST", - PUT = "PUT", - RESTORE = "RESTORE", + ARCHIVE = 'ARCHIVE', + DELETE = 'DELETE', + HEAD = 'HEAD', + GET = 'GET', + OPTION = 'OPTION', + PATCH = 'PATCH', + POST = 'POST', + PUT = 'PUT', + RESTORE = 'RESTORE', } export enum HTTPMimeType { - ALL = "*/*", - CSV = "text/csv", - IMAGE = "image/*", - IMAGE_JPEG = "image/jpeg", - IMAGE_PNG = "image/png", - JSON = "application/json", - MULTIPART = "multipart/form-data", - OCTET_STREAM = "application/octet-stream", - TEXT_PLAIN = "text/plain", + ALL = '*/*', + CSV = 'text/csv', + IMAGE = 'image/*', + IMAGE_JPEG = 'image/jpeg', + IMAGE_PNG = 'image/png', + JSON = 'application/json', + MULTIPART = 'multipart/form-data', + OCTET_STREAM = 'application/octet-stream', + TEXT_PLAIN = 'text/plain', } export interface RESTConfig { @@ -54,6 +53,14 @@ export interface ModelResponseHttp { data: any; } +export type ErrorRestApiCallback = (response: Response) => void; + +let errorApiGlobalCallback: ErrorRestApiCallback | undefined = undefined; + +export const setErrorApiGlobalCallback = (callback: ErrorRestApiCallback) => { + errorApiGlobalCallback = callback; +}; + function isNullOrUndefined(data: any): data is undefined | null { return data === undefined || data === null; } @@ -78,6 +85,7 @@ export interface RESTRequestType { data?: any; params?: object; queries?: object; + headers?: any; callbacks?: RESTCallbacks; } @@ -87,15 +95,15 @@ function replaceAll(input, searchValue, replaceValue) { function removeTrailingSlashes(input: string): string { if (isNullOrUndefined(input)) { - return "undefined"; + return 'undefined'; } - return input.replace(/\/+$/, ""); + return input.replace(/\/+$/, ''); } function removeLeadingSlashes(input: string): string { if (isNullOrUndefined(input)) { - return ""; + return ''; } - return input.replace(/^\/+/, ""); + return input.replace(/^\/+/, ''); } export function RESTUrl({ @@ -133,9 +141,9 @@ export function RESTUrl({ } } if (restConfig.token !== undefined && restModel.tokenInUrl === true) { - searchParams.append("Authorization", `Bearer ${restConfig.token}`); + searchParams.append('Authorization', `Bearer ${restConfig.token}`); } - return generateUrl + "?" + searchParams.toString(); + return generateUrl + '?' + searchParams.toString(); } export function fetchProgress( @@ -159,7 +167,7 @@ export function fetchProgress( return new Promise((resolve, reject) => { // Stream the upload progress if (progressUpload) { - xhr.io?.upload.addEventListener("progress", (dataEvent) => { + xhr.io?.upload.addEventListener('progress', (dataEvent) => { if (dataEvent.lengthComputable) { progressUpload(dataEvent.loaded, dataEvent.total); } @@ -167,7 +175,7 @@ export function fetchProgress( } // Stream the download progress if (progressDownload) { - xhr.io?.addEventListener("progress", (dataEvent) => { + xhr.io?.addEventListener('progress', (dataEvent) => { if (dataEvent.lengthComputable) { progressDownload(dataEvent.loaded, dataEvent.total); } @@ -187,19 +195,19 @@ export function fetchProgress( }; } // Check if we have an internal Fail: - xhr.io?.addEventListener("error", () => { + xhr.io?.addEventListener('error', () => { xhr.io = undefined; - reject(new TypeError("Failed to fetch")); + reject(new TypeError('Failed to fetch')); }); // Capture the end of the stream - xhr.io?.addEventListener("loadend", () => { + xhr.io?.addEventListener('loadend', () => { if (xhr.io?.readyState !== XMLHttpRequest.DONE) { return; } if (xhr.io?.status === 0) { //the stream has been aborted - reject(new TypeError("Fetch has been aborted")); + reject(new TypeError('Fetch has been aborted')); return; } // Stream is ended, transform in a generic response: @@ -209,17 +217,17 @@ export function fetchProgress( }); const headersArray = replaceAll( xhr.io.getAllResponseHeaders().trim(), - "\r\n", - "\n" - ).split("\n"); + '\r\n', + '\n' + ).split('\n'); headersArray.forEach(function (header) { - const firstColonIndex = header.indexOf(":"); + const firstColonIndex = header.indexOf(':'); if (firstColonIndex !== -1) { const key = header.substring(0, firstColonIndex).trim(); const value = header.substring(firstColonIndex + 1).trim(); response.headers.set(key, value); } else { - response.headers.set(header, ""); + response.headers.set(header, ''); } }); xhr.io = undefined; @@ -241,27 +249,29 @@ export function RESTRequest({ data, params, queries, + headers = {}, callbacks, }: RESTRequestType): Promise { // Create the URL PATH: let generateUrl = RESTUrl({ restModel, restConfig, data, params, queries }); - let headers: any = {}; if (restConfig.token !== undefined && restModel.tokenInUrl !== true) { - headers["Authorization"] = `Bearer ${restConfig.token}`; + headers['Authorization'] = `Bearer ${restConfig.token}`; } if (restModel.accept !== undefined) { - headers["Accept"] = restModel.accept; + headers['Accept'] = restModel.accept; } - if (restModel.requestType !== HTTPRequestModel.GET && - restModel.requestType !== HTTPRequestModel.ARCHIVE && - restModel.requestType !== HTTPRequestModel.RESTORE + if ( + restModel.requestType !== HTTPRequestModel.GET && + restModel.requestType !== HTTPRequestModel.ARCHIVE && + restModel.requestType !== HTTPRequestModel.RESTORE ) { // if Get we have not a content type, the body is empty - if (restModel.contentType !== HTTPMimeType.MULTIPART && - restModel.contentType !== undefined - ) { + if ( + restModel.contentType !== HTTPMimeType.MULTIPART && + restModel.contentType !== undefined + ) { // special case of multi-part ==> no content type otherwise the browser does not set the ";bundary=--****" - headers["Content-Type"] = restModel.contentType; + headers['Content-Type'] = restModel.contentType; } } let body = data; @@ -302,19 +312,27 @@ export function RESTRequest({ } action .then((response: Response) => { + if ( + errorApiGlobalCallback && + 400 <= response.status && + response.status <= 499 + ) { + // Detect an error and trigger the generic error callback: + errorApiGlobalCallback(response); + } if (response.status >= 200 && response.status <= 299) { - const contentType = response.headers.get("Content-Type"); + const contentType = response.headers.get('Content-Type'); if ( !isNullOrUndefined(restModel.accept) && restModel.accept !== contentType ) { reject({ - name: "Model accept type incompatible", + name: 'Model accept type incompatible', time: Date().toString(), status: 901, message: `REST Content type are not compatible: ${restModel.accept} != ${contentType}`, - statusMessage: "Fetch error", - error: "rest-tools.ts Wrong type in the message return type", + statusMessage: 'Fetch error', + error: 'rest-tools.ts Wrong type in the message return type', } as RestErrorResponse); } else if (contentType === HTTPMimeType.JSON) { response @@ -324,12 +342,12 @@ export function RESTRequest({ }) .catch((reason: Error) => { reject({ - name: "API serialization error", + name: 'API serialization error', time: Date().toString(), status: 902, message: `REST parse json fail: ${reason}`, - statusMessage: "Fetch parse error", - error: "rest-tools.ts Wrong message model to parse", + statusMessage: 'Fetch parse error', + error: 'rest-tools.ts Wrong message model to parse', } as RestErrorResponse); }); } else { @@ -349,22 +367,22 @@ export function RESTRequest({ .text() .then((dataError: string) => { reject({ - name: "API serialization error", + name: 'API serialization error', time: Date().toString(), status: 903, message: `REST parse error json with wrong type fail. ${dataError}`, - statusMessage: "Fetch parse error", - error: "rest-tools.ts Wrong message model to parse", + statusMessage: 'Fetch parse error', + error: 'rest-tools.ts Wrong message model to parse', } as RestErrorResponse); }) .catch((reason: any) => { reject({ - name: "API serialization error", + name: 'API serialization error', time: Date().toString(), status: response.status, message: `unmanaged error model: ??? with error: ${reason}`, - statusMessage: "Fetch ERROR parse error", - error: "rest-tools.ts Wrong message model to parse", + statusMessage: 'Fetch ERROR parse error', + error: 'rest-tools.ts Wrong message model to parse', } as RestErrorResponse); }); } @@ -374,22 +392,22 @@ export function RESTRequest({ .text() .then((dataError: string) => { reject({ - name: "API serialization error", + name: 'API serialization error', time: Date().toString(), status: response.status, message: `unmanaged error model: ${dataError} with error: ${reason}`, - statusMessage: "Fetch ERROR TEXT parse error", - error: "rest-tools.ts Wrong message model to parse", + statusMessage: 'Fetch ERROR TEXT parse error', + error: 'rest-tools.ts Wrong message model to parse', } as RestErrorResponse); }) .catch((reason: any) => { reject({ - name: "API serialization error", + name: 'API serialization error', time: Date().toString(), status: response.status, message: `unmanaged error model: ??? with error: ${reason}`, - statusMessage: "Fetch ERROR TEXT FAIL", - error: "rest-tools.ts Wrong message model to parse", + statusMessage: 'Fetch ERROR TEXT FAIL', + error: 'rest-tools.ts Wrong message model to parse', } as RestErrorResponse); }); }); @@ -400,12 +418,12 @@ export function RESTRequest({ reject(error); } else { reject({ - name: "Request fail", + name: 'Request fail', time: Date(), status: 999, message: error, - statusMessage: "Fetch catch error", - error: "rest-tools.ts detect an error in the fetch request", + statusMessage: 'Fetch catch error', + error: 'rest-tools.ts detect an error in the fetch request', }); } }); @@ -426,12 +444,12 @@ export function RESTRequestJson( resolve(value.data); } else { reject({ - name: "Model check fail", + name: 'Model check fail', time: Date().toString(), status: 950, - error: "REST Fail to verify the data", - statusMessage: "API cast ERROR", - message: "api.ts Check type as fail", + error: 'REST Fail to verify the data', + statusMessage: 'API cast ERROR', + message: 'api.ts Check type as fail', } as RestErrorResponse); } }) diff --git a/front/src/components/Cover.tsx b/front/src/components/Cover.tsx index 3ac4b88..2f77ab0 100644 --- a/front/src/components/Cover.tsx +++ b/front/src/components/Cover.tsx @@ -8,7 +8,7 @@ import { DataUrlAccess } from '@/utils/data-url-access'; import { Icon } from './Icon'; export type CoversProps = Omit & { - data?: ObjectId[]; + data?: readonly ObjectId[]; size?: BoxProps['width']; iconEmpty?: ReactElement; slideshow?: boolean; @@ -70,7 +70,9 @@ export const Covers = ({ src={url} maxWidth={size} maxHeight={size} - boxSize={size} + //boxSize={size} + width="100%" + height="100%" onClick={onClick} /> ); diff --git a/front/src/components/TopBar/TopBar.tsx b/front/src/components/TopBar/TopBar.tsx index 61c6e72..95b25f7 100644 --- a/front/src/components/TopBar/TopBar.tsx +++ b/front/src/components/TopBar/TopBar.tsx @@ -1,26 +1,62 @@ import { ReactNode } from 'react'; - - -import { Box, Button, ConditionalValue, Flex, HStack, IconButton, Span, Text, useDisclosure } from '@chakra-ui/react'; -import { LuAlignJustify, LuArrowBigLeft, LuCircleUserRound, LuKeySquare, LuLogIn, LuLogOut, LuMoon, LuSettings, LuSun } from 'react-icons/lu'; -import { MdHelp, MdHome, MdMore, MdOutlinePlaylistPlay, MdOutlineUploadFile, MdSupervisedUserCircle } from 'react-icons/md'; +import { + Box, + Button, + ConditionalValue, + Flex, + HStack, + IconButton, + Span, + Text, + useBreakpointValue, + useDisclosure, +} from '@chakra-ui/react'; +import { + LuAlignJustify, + LuArrowBigLeft, + LuCircleUserRound, + LuKeySquare, + LuLogIn, + LuLogOut, + LuMoon, + LuSettings, + LuSun, +} from 'react-icons/lu'; +import { + MdHelp, + MdHome, + MdMore, + MdOutlinePlaylistPlay, + MdOutlineUploadFile, + MdRestartAlt, + MdSupervisedUserCircle, +} from 'react-icons/md'; import { useNavigate } from 'react-router-dom'; - - import { useColorMode, useColorModeValue } from '@/components/ui/color-mode'; -import { DrawerBody, DrawerContent, DrawerHeader, DrawerRoot } from '@/components/ui/drawer'; -import { MenuContent, MenuItem, MenuRoot, MenuTrigger } from '@/components/ui/menu'; +import { + DrawerBody, + DrawerContent, + DrawerHeader, + DrawerRoot, +} from '@/components/ui/drawer'; +import { + MenuContent, + MenuItem, + MenuRoot, + MenuTrigger, +} from '@/components/ui/menu'; import { environment } from '@/environment'; import { useServiceContext } from '@/service/ServiceContext'; import { useSessionService } from '@/service/session'; import { colors } from '@/theme/colors'; -import { requestOpenSite, requestSignIn, requestSignOut, requestSignUp } from '@/utils/sso'; - - - - +import { + requestOpenSite, + requestSignIn, + requestSignOut, + requestSignUp, +} from '@/utils/sso'; export const TOP_BAR_HEIGHT = '50px'; @@ -37,6 +73,8 @@ export const BUTTON_TOP_BAR_PROPERTY = { export type TopBarProps = { children?: ReactNode; title?: string; + titleLink?: string; + titleIcon?: ReactNode; }; const ButtonMenuLeft = ({ @@ -74,15 +112,25 @@ const ButtonMenuLeft = ({ ); }; -export const TopBar = ({ title, children }: TopBarProps) => { +export const TopBar = ({ + title, + titleLink, + titleIcon, + children, +}: TopBarProps) => { const navigate = useNavigate(); const { colorMode, toggleColorMode } = useColorMode(); const { session } = useServiceContext(); - const { clearToken } = useSessionService(); + const { clearToken, isConnected } = useSessionService(); const backColor = useColorModeValue('back.100', 'back.800'); const drawerDisclose = useDisclosure(); - const onChangeTheme = () => { - drawerDisclose.onOpen(); + const isVisible = useBreakpointValue({ base: false, md: true }); + const onOpenLeftMenu = () => { + if (!isConnected) { + onForceReload(); + } else { + drawerDisclose.onOpen(); + } }; const onSignIn = (): void => { clearToken(); @@ -99,8 +147,13 @@ export const TopBar = ({ title, children }: TopBarProps) => { const onKarso = (): void => { requestOpenSite(); }; + const onForceReload = (): void => { + // @ts-expect-error + window.location.reload(true); + }; return ( { boxShadow={'0px 2px 4px ' + colors.back[900]} zIndex={200} > - {session?.isConnected ? - - - :( - - - {environment.applName} - ) - } {title && ( - navigate(titleLink) : undefined} > - {title} - + + {titleIcon} + {title} + + )} {children} @@ -205,6 +257,13 @@ export const TopBar = ({ title, children }: TopBarProps) => { Karso (SSO) + + force reload + {colorMode === 'light' ? ( { )} - {session?.isConnected && - - - - - - {environment.applName} - - - - - } - /> - } - /> - } - /> - - - - } + {session?.isConnected && ( + + + + + + {environment.applName} + + + + + } + /> + } + /> + } + /> + + + + )} ); -}; \ No newline at end of file +}; diff --git a/front/src/components/VideoPlayer.tsx b/front/src/components/VideoPlayer.tsx index 6ff2fe6..dadeae0 100644 --- a/front/src/components/VideoPlayer.tsx +++ b/front/src/components/VideoPlayer.tsx @@ -1,6 +1,14 @@ import { useEffect, useRef, useState } from 'react'; -import { Box, chakra, Flex, IconButton, SliderTrack, Spacer, Text, useBreakpointValue } from '@chakra-ui/react'; +import { + Box, + Flex, + IconButton, + SliderTrack, + Spacer, + Text, + useBreakpointValue, +} from '@chakra-ui/react'; import { MdFastForward, MdFastRewind, @@ -16,7 +24,7 @@ import { MdRepeat, MdRepeatOne, MdStop, - MdTrendingFlat + MdTrendingFlat, } from 'react-icons/md'; import { useColorModeValue } from '@/components/ui/color-mode'; @@ -70,15 +78,15 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { const [isRunning, setIsRunning] = useState(true); useEffect(() => { if (!isRunning || time <= 0) { - console.log(`exit timer`); - setIsRunning(false); + console.log(`exit timer`); + setIsRunning(false); return; } const timer = setInterval(() => { setTime((prevTime) => { console.log(`current time : ${prevTime}`); return prevTime - 1; - }); + }); }, 1000); return () => clearInterval(timer); @@ -97,9 +105,9 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { setIsRunning(true); } }; - window.addEventListener("mousemove", resetTimerLocal); + window.addEventListener('mousemove', resetTimerLocal); return () => { - window.removeEventListener("mousemove", resetTimerLocal); + window.removeEventListener('mousemove', resetTimerLocal); }; }, [playMediaList, setTime, setIsRunning]); @@ -121,30 +129,33 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { useEffect(() => { setMediaSource( dataMedia && dataMedia?.dataId - ? DataUrlAccess.getUrl(dataMedia?.dataId) + ? DataUrlAccess.getUrl(dataMedia?.dataId, 'plop.mkv') : '' ); }, [dataMedia, setMediaSource]); + console.log(`mediaSource = ${mediaSource}`); const backColor = useColorModeValue('back.100', 'back.800'); - const configButton = isMobile ? { - borderRadius: 'full', - backgroundColor: 'transparent', - _hover: { - bgColor: 'brand.500', - }, - width: '35px', - height: '35px', - padding: '2px', - } : { - borderRadius: 'full', - backgroundColor: 'transparent', - _hover: { - bgColor: 'brand.500', - }, - width: '50px', - height: '50px', - padding: '5px', - }; + const configButton = isMobile + ? { + borderRadius: 'full', + backgroundColor: 'transparent', + _hover: { + bgColor: 'brand.500', + }, + width: '35px', + height: '35px', + padding: '2px', + } + : { + borderRadius: 'full', + backgroundColor: 'transparent', + _hover: { + bgColor: 'brand.500', + }, + width: '50px', + height: '50px', + padding: '5px', + }; useEffect(() => { if (!videoRef || !videoRef.current) { @@ -237,6 +248,7 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { * Call when meta-data is updated */ function onChangeMetadata(): void { + console.log(`onChangeMetadata: ${videoRef.current?.duration}`); const seconds = videoRef.current?.duration; if (seconds !== undefined) { setDuration(seconds); @@ -246,14 +258,16 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { if (!videoRef || !videoRef.current) { return; } - //console.log(`onTimeUpdate ${videoRef.current.currentTime}`); + console.log(`onTimeUpdate ${videoRef.current.currentTime}`); setTimeProgress(videoRef.current.currentTime); }; const onDurationChange = (event) => {}; const onChangeStateToPlay = () => { + console.log(`onChangeStateToPlay ...`); setIsPlaying(true); }; const onChangeStateToPause = () => { + console.log(`onChangeStateToPause ...`); setIsPlaying(false); }; const marks = () => { @@ -292,208 +306,227 @@ export const VideoPlayer = ({}: AudioPlayerProps) => { setIsPiP(false); } } catch (error) { - console.error("Erreur avec Picture-in-Picture:", error); + console.error('Erreur avec Picture-in-Picture:', error); } } }; const [isFullScreen, setIsFullScreen] = useState(false); useEffect(() => { const handleFullScreenChange = () => { - console.log(`changeFullScreen: ${!!document.fullscreenElement}`) + console.log(`changeFullScreen: ${!!document.fullscreenElement}`); setIsFullScreen(!!document.fullscreenElement); }; - document.addEventListener("fullscreenchange", handleFullScreenChange); + document.addEventListener('fullscreenchange', handleFullScreenChange); return () => { - document.removeEventListener("fullscreenchange", handleFullScreenChange); + document.removeEventListener('fullscreenchange', handleFullScreenChange); }; }, []); return ( <> {!isNullOrUndefined(MediaOffset) && ( <> - - + - - - {isPlaying ? ( - - ) : ( - - )} - - - - - - {' '} - - - - - - - - - - - - {playModeIcon[playingMode]} - - - {!!document.fullscreenElement ? - : - } - - {isPiPSupported && !isMobile && - - {isPiP ? : } - - } - - } - - + )} ); diff --git a/front/src/components/media/DisplayMediaFull.tsx b/front/src/components/media/DisplayMediaFull.tsx index 60d43ad..e291c8e 100644 --- a/front/src/components/media/DisplayMediaFull.tsx +++ b/front/src/components/media/DisplayMediaFull.tsx @@ -45,7 +45,7 @@ export const DisplayMediaFull = ({ overflowX="hidden" onClick={onClick} > - + + {media.id} {media.name} {media.episode && ` [${media.episode}]`} {/* {dataSeason && ( diff --git a/front/src/components/popup/MediaEditPopUp.tsx b/front/src/components/popup/MediaEditPopUp.tsx index 171ceaf..15a46ae 100644 --- a/front/src/components/popup/MediaEditPopUp.tsx +++ b/front/src/components/popup/MediaEditPopUp.tsx @@ -4,7 +4,7 @@ import { Button, Tabs, Text, useDisclosure } from '@chakra-ui/react'; import { MdAdminPanelSettings, MdDeleteForever, MdEdit } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; -import { MediaResource, MediaWrite } from '@/back-api'; +import { MediaResource, MediaUpdate, ZodMediaUpdate } from '@/back-api'; import { FormGroupShow } from '@/components/form/FormGroup'; import { FormInput } from '@/components/form/FormInput'; import { FormNumber } from '@/components/form/FormNumber'; @@ -63,19 +63,24 @@ export const MediaEditPopUp = ({}: MediaEditPopUpProps) => { }; const initialRef = useRef(null); const finalRef = useRef(null); - const form = useFormidable({ + const form = useFormidable({ initialValues: dataMedia, deltaConfig: { omit: ['covers'] }, }); - const onSave = async (dataDelta: MediaWrite) => { + const onSave = async (data: MediaUpdate) => { if (isNullOrUndefined(mediaIdInt)) { return; } - console.log(`onSave = ${JSON.stringify(dataDelta, null, 2)}`); + console.log(`onSave = ${JSON.stringify(data, null, 2)}`); + const { episode, ...rest } = data; + let episodeNumber: undefined | number = undefined; + if (episode !== undefined && episode !== null) { + episodeNumber = parseInt(`${episode}`, 10); + } store.update( MediaResource.patch({ restConfig: session.getRestConfig(), - data: dataDelta, + data: ZodMediaUpdate.parse({ episode: episodeNumber, ...rest }), params: { id: mediaIdInt, }, @@ -146,7 +151,7 @@ export const MediaEditPopUp = ({}: MediaEditPopUpProps) => { > {/* */} - + Edit Media {/* */} diff --git a/front/src/components/popup/SeasonEditPopUp.tsx b/front/src/components/popup/SeasonEditPopUp.tsx index dbfa11b..925447d 100644 --- a/front/src/components/popup/SeasonEditPopUp.tsx +++ b/front/src/components/popup/SeasonEditPopUp.tsx @@ -9,7 +9,7 @@ import { } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; -import { SeasonResource, SeasonWrite } from '@/back-api'; +import { SeasonResource, SeasonUpdate, ZodSeasonUpdate } from '@/back-api'; import { FormCovers } from '@/components/form/FormCovers'; import { FormGroupShow } from '@/components/form/FormGroup'; import { FormInput } from '@/components/form/FormInput'; @@ -66,19 +66,19 @@ export const SeasonEditPopUp = ({}: SeasonEditPopUpProps) => { }; const initialRef = useRef(null); const finalRef = useRef(null); - const form = useFormidable({ + const form = useFormidable({ initialValues: dataSeason, deltaConfig: { omit: ['covers'] }, }); - const onSave = async (deltaData: SeasonWrite) => { + const onSave = async (data: SeasonUpdate) => { if (isNullOrUndefined(seasonIdInt)) { return; } - console.log(`onSave = ${JSON.stringify(deltaData, null, 2)}`); + console.log(`onSave = ${JSON.stringify(data, null, 2)}`); store.update( SeasonResource.patch({ restConfig: session.getRestConfig(), - data: deltaData, + data: ZodSeasonUpdate.parse(data), params: { id: seasonIdInt, }, @@ -150,7 +150,7 @@ export const SeasonEditPopUp = ({}: SeasonEditPopUpProps) => { data-testid="Season-edit-pop-up" > - + Edit Season {/* */} diff --git a/front/src/components/popup/SeriesEditPopUp.tsx b/front/src/components/popup/SeriesEditPopUp.tsx index 05cd06f..73ce7ee 100644 --- a/front/src/components/popup/SeriesEditPopUp.tsx +++ b/front/src/components/popup/SeriesEditPopUp.tsx @@ -9,7 +9,7 @@ import { } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; -import { SeriesResource, SeriesWrite } from '@/back-api'; +import { SeriesResource, SeriesUpdate, ZodSeriesUpdate } from '@/back-api'; import { FormCovers } from '@/components/form/FormCovers'; import { FormInput } from '@/components/form/FormInput'; import { FormTextarea } from '@/components/form/FormTextarea'; @@ -62,19 +62,19 @@ export const SeriesEditPopUp = ({}: SeriesEditPopUpProps) => { }; const initialRef = useRef(null); const finalRef = useRef(null); - const form = useFormidable({ + const form = useFormidable({ initialValues: dataSeries, deltaConfig: { omit: ['covers'] }, }); - const onSave = async (dataDelta: SeriesWrite) => { + const onSave = async (data: SeriesUpdate) => { if (isNullOrUndefined(seriesIdInt)) { return; } - console.log(`onSave = ${JSON.stringify(dataDelta, null, 2)}`); + console.log(`onSave = ${JSON.stringify(data, null, 2)}`); store.update( SeriesResource.patch({ restConfig: session.getRestConfig(), - data: dataDelta, + data: ZodSeriesUpdate.parse(data), params: { id: seriesIdInt, }, @@ -146,7 +146,7 @@ export const SeriesEditPopUp = ({}: SeriesEditPopUpProps) => { > {/* */} - + Edit Series {/* */} diff --git a/front/src/components/popup/TypeEditPopUp.tsx b/front/src/components/popup/TypeEditPopUp.tsx index 1499ac1..93667de 100644 --- a/front/src/components/popup/TypeEditPopUp.tsx +++ b/front/src/components/popup/TypeEditPopUp.tsx @@ -9,7 +9,7 @@ import { } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; -import { TypeResource, TypeWrite } from '@/back-api'; +import { TypeResource, TypeUpdate, ZodTypeUpdate } from '@/back-api'; import { FormCovers } from '@/components/form/FormCovers'; import { FormInput } from '@/components/form/FormInput'; import { FormTextarea } from '@/components/form/FormTextarea'; @@ -65,19 +65,19 @@ export const TypeEditPopUp = ({}: TypeEditPopUpProps) => { }; const initialRef = useRef(null); const finalRef = useRef(null); - const form = useFormidable({ + const form = useFormidable({ initialValues: dataType, deltaConfig: { omit: ['covers'] }, }); - const onSave = async (dataDelta: TypeWrite) => { + const onSave = async (data: TypeUpdate) => { if (isNullOrUndefined(typeIdInt)) { return; } - console.log(`onSave = ${JSON.stringify(dataDelta, null, 2)}`); + console.log(`onSave = ${JSON.stringify(data, null, 2)}`); store.update( TypeResource.patch({ restConfig: session.getRestConfig(), - data: dataDelta, + data: ZodTypeUpdate.parse(data), params: { id: typeIdInt, }, @@ -148,7 +148,7 @@ export const TypeEditPopUp = ({}: TypeEditPopUpProps) => { > {/* */} - + Edit Type {/* */} diff --git a/front/src/environment.ts b/front/src/environment.ts index fc7221e..68c5d1b 100644 --- a/front/src/environment.ts +++ b/front/src/environment.ts @@ -60,7 +60,6 @@ export const environment = isDevelopmentEnvironment() ? environment_local : environment_back_prod; - /** * get the current REST api URL. Depend on the VITE_API_BASE_URL env variable. * @returns The URL with http(s)://*** diff --git a/front/src/scene/home/AddPage.tsx b/front/src/scene/home/AddPage.tsx index 4e4c4ff..1c25b30 100644 --- a/front/src/scene/home/AddPage.tsx +++ b/front/src/scene/home/AddPage.tsx @@ -408,7 +408,7 @@ export const AddPage = () => { episode: `${parsedElement[index].episode}`, }; console.log(`data= ${JSON.stringify(data, null, 2)}`); - console.error('Not_ implemented'); + console.error('Not_implemented'); storeMedia .update( MediaResource.uploadMedia({ @@ -468,6 +468,18 @@ export const AddPage = () => { ); }; const addNewSeries = (data: string): Promise => { + if (form.values['typeId'] === undefined) { + return new Promise((_resolve, reject) => { + reject({ + name: 'form value is empty [typeId] ...', + time: Date().toString(), + status: 950, + error: 'REST Fail to verify the data', + statusMessage: 'catch ERROR', + message: 'form value is empty [typeId] ...', + } as RestErrorResponse); + }); + } return storeSeries.update( SeriesResource.post({ restConfig: session.getRestConfig(), @@ -763,7 +775,7 @@ export const MediaDetectionDetail = ({ data }: { data: InspectionType }) => { - {data.media.date} + {data.media.datePublication} diff --git a/front/src/scene/sso/SSOPage.tsx b/front/src/scene/sso/SSOPage.tsx index 4a7572d..7c6c524 100644 --- a/front/src/scene/sso/SSOPage.tsx +++ b/front/src/scene/sso/SSOPage.tsx @@ -1,47 +1,58 @@ import { useEffect } from 'react'; -import { Center, Heading, Image, Text } from '@chakra-ui/react'; +import { Center, Flex, Heading, Image, Text } from '@chakra-ui/react'; +import { MdFactCheck, MdWarning } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; +import { useEffectOnce } from 'react-use'; import avatar_generic from '@/assets/images/avatar_generic.svg'; +import { Icon } from '@/components'; import { PageLayoutInfoCenter } from '@/components/Layout/PageLayoutInfoCenter'; import { TopBar } from '@/components/TopBar/TopBar'; -import { isDevelopmentEnvironment } from '@/environment'; +import { toaster } from '@/components/ui/toaster'; import { useSessionService } from '@/service/session'; import { b64_to_utf8 } from '@/utils/sso'; export const SSOPage = () => { const { data, keepConnected, token } = useParams(); - console.log(`- data: ${data}`); - console.log(`- keepConnected: ${keepConnected}`); - console.log(`- token: ${token}`); + //const { data, keepConnected, token } = useState(); + // console.log(`- data: ${data}`); + // console.log(`- keepConnected: ${keepConnected}`); + // console.log(`- token: ${token}`); const navigate = useNavigate(); - const { isConnected, setToken, login, clearToken } = useSessionService(); - useEffect(() => { - if (token) { - setToken(token); - } else { - clearToken(); + const { isConnected, errorSession, setToken, login } = useSessionService(); + useEffectOnce(() => { + if (token === undefined || token === '') { + return; } - }, [token, setToken, clearToken]); - const delay = isDevelopmentEnvironment() ? 2000 : 2000; + try { + setToken(token); + } catch (e) { + toaster.create({ + title: 'Connection Fail', + description: `invalid token data model.`, + type: 'error', + }); + navigate('/'); + } + }); + const delay = 1000; useEffect(() => { if (isConnected) { - const destination = data ? b64_to_utf8(data) : '/'; - console.log(`program redirect to: ${destination} (${delay}ms)`); + toaster.create({ + title: 'Connection Succeed', + description: `Welcome back: ${login}.`, + type: 'success', + }); + const destination = data ? b64_to_utf8(data) : '/home'; + const destinationFinal = destination === '' ? '/home' : destination; + console.log(`program redirect to: '${destinationFinal}' (${delay}ms)`); setTimeout(() => { - navigate(`/${destination}`); + // note: check if the "navigate" is in the dependence of the use effect!!! + navigate(`/${destinationFinal}`, { replace: true }); }, delay); } - }, [isConnected]); - /* - const [searchParams] = useSearchParams(); - console.log(`data: ${searchParams.get('data')}`); - console.log(`keepConnected: ${searchParams.get('keepConnected')}`); - console.log(`token: ${searchParams.get('token')}`); - const dataFromParam = useGetCreateActionParams(); - console.log(`data group: ${JSON.stringify(dataFromParam, null, 2)}`); - */ + }, [isConnected, login, navigate]); return ( <> @@ -53,20 +64,52 @@ export const SSOPage = () => {
- {!isConnected && ( - - ERROR: connection fail ! - + {!isConnected && errorSession !== undefined && ( + <> + + + + + + ERROR: {errorSession.message} + + + {errorSession.description && ( + + {errorSession.description} + + )} + + )} + {!isConnected && errorSession === undefined && ( + + + + + + ERROR: Not connected ! + + )} {isConnected && ( - <> - - Connected: Redirect soon! - - - Welcome back: {login} - - + + + + + Connected: Redirect soon! + + + + + Welcome back: {login} + + + )} diff --git a/front/src/service/Advancement.ts b/front/src/service/Advancement.ts index c494224..98f00ed 100644 --- a/front/src/service/Advancement.ts +++ b/front/src/service/Advancement.ts @@ -22,7 +22,7 @@ export const useAdvancementServiceWrapped = ( { restApiName: 'Advancement', primaryKey: 'id', - available: session.token !== undefined, + available: false, //session.token !== undefined, getsCall: () => { return UserMediaAdvancementResource.gets({ restConfig: session.getRestConfig(), @@ -47,40 +47,43 @@ export type updateTimeProps = { time: number; total: number; addCount: boolean; -} +}; -export const useAdvancementUpdateTime = (id: number, - config: Omit, 'queryFunction'> - = {}) => { +export const useAdvancementUpdateTime = ( + id: number, + config: Omit< + useQueryCallProps, + 'queryFunction' + > = {} +) => { const { store } = useAdvancementService(); const { onSuccess, ...restConfig } = config; const { getRestConfig } = useSessionService(); - const { call, ...rest } = useQueryCall< - UserMediaAdvancement, - updateTimeProps - >({ - queryFunction: (inputData) => { - const data = { - time: inputData.time, - percent: inputData.time / inputData.total, - addCount: inputData.addCount - }; - return UserMediaAdvancementResource.patch({ - restConfig: getRestConfig(), - params: { - id - }, - data - }); - }, - onSuccess: (response) => { - if (onSuccess) { - onSuccess(response); - } - store.updateRaw(response); - }, - ...restConfig, - }); + const { call, ...rest } = useQueryCall( + { + queryFunction: (inputData) => { + const data = { + time: inputData.time, + percent: inputData.time / inputData.total, + addCount: inputData.addCount, + }; + return UserMediaAdvancementResource.patch({ + restConfig: getRestConfig(), + params: { + id, + }, + data, + }); + }, + onSuccess: (response) => { + if (onSuccess) { + onSuccess(response); + } + store.updateRaw(response); + }, + ...restConfig, + } + ); return { updateTime: call, ...rest }; }; diff --git a/front/src/service/Media.ts b/front/src/service/Media.ts index 22691bc..fa3a5d2 100644 --- a/front/src/service/Media.ts +++ b/front/src/service/Media.ts @@ -24,7 +24,7 @@ export const useMediaServiceWrapped = ( { restApiName: 'Media', primaryKey: 'id', - available: session.token !== undefined, + available: session.isConnected, getsCall: () => { return MediaResource.gets({ restConfig: session.getRestConfig(), diff --git a/front/src/service/Season.ts b/front/src/service/Season.ts index 2c86fe4..07a76f1 100644 --- a/front/src/service/Season.ts +++ b/front/src/service/Season.ts @@ -25,7 +25,7 @@ export const useSeasonServiceWrapped = ( { restApiName: 'Season', primaryKey: 'id', - available: session.token !== undefined, + available: session.isConnected, getsCall: () => { return SeasonResource.gets({ restConfig: session.getRestConfig(), diff --git a/front/src/service/Series.ts b/front/src/service/Series.ts index 326dc5b..67f8a21 100644 --- a/front/src/service/Series.ts +++ b/front/src/service/Series.ts @@ -26,7 +26,7 @@ export const useSeriesServiceWrapped = ( { restApiName: 'Series', primaryKey: 'id', - available: session.token !== undefined, + available: session.isConnected, getsCall: () => { return SeriesResource.gets({ restConfig: session.getRestConfig(), diff --git a/front/src/service/Type.ts b/front/src/service/Type.ts index 46fe200..f7c7d1a 100644 --- a/front/src/service/Type.ts +++ b/front/src/service/Type.ts @@ -25,7 +25,7 @@ export const useTypeServiceWrapped = ( { restApiName: 'Type', primaryKey: 'id', - available: session.token !== undefined, + available: session.isConnected, getsCall: () => { return TypeResource.gets({ restConfig: session.getRestConfig(), diff --git a/front/src/service/session.ts b/front/src/service/session.ts index 40e125c..5d9c13c 100644 --- a/front/src/service/session.ts +++ b/front/src/service/session.ts @@ -1,21 +1,33 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { JwtPayload, RESTConfig } from '@/back-api'; +import { createListCollection } from '@chakra-ui/react'; + +import { + JwtToken, + RESTConfig, + RestErrorResponse, + UserResource, + setErrorApiGlobalCallback, +} from '@/back-api'; import { PartRight } from '@/back-api/model/part-right'; +import { toaster } from '@/components/ui/toaster'; import { environment, getApiUrl } from '@/environment'; import { useServiceContext } from '@/service/ServiceContext'; import { isBrowser } from '@/utils/layout'; import { parseToken } from '@/utils/sso'; -import { createListCollection } from '@chakra-ui/react'; -const TOKEN_KEY = 'karideo-token-key-storage'; +const TOKEN_KEY = 'karusic-token-key-storage'; export const USERS_COLLECTION = createListCollection({ items: [ - { label: "admin", value: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxIiwiYXBwbGljYXRpb24iOiJrYXJ1c2ljIiwiaXNzIjoiS2FyQXV0aCIsInJpZ2h0Ijp7ImthcnVzaWMiOnsiQURNSU4iOnRydWUsIlVTRVIiOnRydWV9fSwibG9naW4iOiJIZWVyb1l1aSIsImV4cCI6MTcyNDIwNjc5NCwiaWF0IjoxNzI0MTY2ODM0fQ.TEST_SIGNATURE_FOR_LOCAL_TEST_AND_TEST_E2E" }, - { label: "NO_USER", value: "svelte" }, + { + label: 'admin', + value: + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxIiwiYXBwbGljYXRpb24iOiJrYXJ1c2ljIiwiaXNzIjoiS2FyQXV0aCIsInJpZ2h0Ijp7ImthcnVzaWMiOnsiQURNSU4iOnRydWUsIlVTRVIiOnRydWV9fSwibG9naW4iOiJIZWVyb1l1aSIsImV4cCI6MTcyNDIwNjc5NCwiaWF0IjoxNzI0MTY2ODM0fQ.TEST_SIGNATURE_FOR_LOCAL_TEST_AND_TEST_E2E', + }, + { label: 'NO_USER', value: 'svelte' }, ], -}) +}); export const USERS = { admin: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxIiwiYXBwbGljYXRpb24iOiJrYXJ1c2ljIiwiaXNzIjoiS2FyQXV0aCIsInJpZ2h0Ijp7ImthcnVzaWMiOnsiQURNSU4iOnRydWUsIlVTRVIiOnRydWV9fSwibG9naW4iOiJIZWVyb1l1aSIsImV4cCI6MTcyNDIwNjc5NCwiaWF0IjoxNzI0MTY2ODM0fQ.TEST_SIGNATURE_FOR_LOCAL_TEST_AND_TEST_E2E', @@ -34,9 +46,43 @@ export function getRestConfig(): RESTConfig { }; } +const getDeltaPrint = (date: Date): string => { + const now = new Date(); + let deltaSeconds = Math.floor((date.getTime() - now.getTime()) / 1000); + const isPast = deltaSeconds < 0; + + deltaSeconds = Math.abs(deltaSeconds); + + const days = Math.floor(deltaSeconds / 86400); + deltaSeconds %= 86400; + + const hours = Math.floor(deltaSeconds / 3600); + deltaSeconds %= 3600; + + const minutes = Math.floor(deltaSeconds / 60); + const seconds = deltaSeconds % 60; + + const result = [days > 0 ? `${days}j` : '', `${hours}h${minutes}:${seconds}s`] + .filter(Boolean) + .join(' '); + + return `${result}${isPast ? ' ago' : ''}`; +}; + +const isInThePast = (date: Date): boolean => { + const now = new Date(); + return date.getTime() < now.getTime(); +}; + +export type SessionErrorType = { + message: string; + description?: string; +}; + export type SessionServiceProps = { token?: string; isConnected: boolean; + errorSession?: SessionErrorType; setToken: (token: string) => void; clearToken: () => void; login?: string; @@ -51,102 +97,165 @@ export const useSessionService = (): SessionServiceProps => { }; export const useSessionServiceWrapped = (): SessionServiceProps => { - const [token, setToken] = useState( + // Load the token from the system (init) + const [tokenStorage, setTokenStorage] = useState( isBrowser ? (localStorage.getItem(TOKEN_KEY) ?? undefined) : undefined ); - const [config, setConfig] = useState(undefined); + // Token that is ready to use + const [tokenStr, setTokenStr] = useState(''); + const [errorSession, setErrorSession] = useState< + SessionErrorType | undefined + >(undefined); + const [token, setToken] = useState(undefined); - const updateRight = useCallback(() => { + const getRestConfigLocal = useCallback((): RESTConfig => { + return { + server: getApiUrl(), + token: tokenStr, + }; + }, [tokenStr]); - console.log('Detect a new token...'); - setConfig(undefined); - if (token === undefined) { - console.log(` ==> No User`); - localStorage.removeItem(TOKEN_KEY); - } else { - const dataParsedToken = parseToken(token)?.payload; - console.log(`Get right: ${JSON.stringify(dataParsedToken, null, 2)}`); - setConfig(dataParsedToken); - console.log(' ==> Login ... (try to keep right)'); - if (isBrowser) { - localStorage.setItem(TOKEN_KEY, token); + const updateRight = useEffect(() => { + //console.log('Detect a new token...'); + if (isBrowser) { + //console.log('update internal property'); + if (tokenStorage === undefined) { + //console.log(` ==> No User`); + setToken(undefined); + setTokenStr(''); + localStorage.removeItem(TOKEN_KEY); + } else { + //console.log(' ==> Login ... (try to keep right)'); + let tokenParsed: JwtToken | undefined = undefined; + try { + tokenParsed = parseToken(tokenStorage); + } catch (e) { + setErrorSession({ + message: 'Fail to parse the token', + }); + return; + } + //console.log(`get new token: ${JSON.stringify(tokenParsed, null, 2)}`); + const exp = new Date(tokenParsed.payload.exp * 1000); + if (isInThePast(exp)) { + //console.log(`token expired at: exp: ${exp.toISOString()}: delta=${getDeltaPrint(exp)}`); + const iat = new Date(tokenParsed.payload.iat * 1000); + //console.log(`iat: ${iat.toISOString()}: delta=${getDeltaPrint(iat)}`); + setErrorSession({ + message: 'The inserted token has expired', + description: `It expired at ${exp.toISOString()}\nSince: ${getDeltaPrint(exp)}`, + }); + return; + } + // Validate token on the server: + UserResource.getMe({ + restConfig: { + server: getApiUrl(), + token: tokenStorage, + }, + }) + .then((_response) => { + // if the login work well, then the token does not fail with authentication + //console.log('Authentication finished: ...'); + setTokenStr(tokenStorage); + setToken(tokenParsed); + localStorage.setItem(TOKEN_KEY, tokenStorage); + }) + .catch((error: RestErrorResponse) => { + setErrorSession({ + message: 'The server reject the token.', + description: `name: ${error.name}\nmessage: "${error.message}"`, + }); + setTokenStr(''); + setToken(undefined); + localStorage.removeItem(TOKEN_KEY); + }); } } - }, [localStorage, parseToken, token]); + }, [ + localStorage, + parseToken, + setErrorSession, + setToken, + setTokenStr, + tokenStorage, + ]); + const setTokenLocal = useCallback( - (token: string) => { - setToken(token); - updateRight(); + (token?: string) => { + if (token ? token.startsWith('__') : false) { + token = undefined; + } + localStorage.removeItem(TOKEN_KEY); + setTokenStorage(token); + setTokenStr(''); + setToken(undefined); + setErrorSession(undefined); }, [updateRight, setToken] ); const clearToken = useCallback(() => { - console.log('Clear Token'); + localStorage.removeItem(TOKEN_KEY); + setTokenLocal(undefined); setToken(undefined); - updateRight(); }, [updateRight, setToken]); - const hasReadRight = useCallback( - (group: RightGroup) => { - if (token === undefined) { - return false; - } - const right = config?.right[environment.applName]; - if (right === undefined) { - return false; - } - return [PartRight.READ, PartRight.READ_WRITE].includes( - right?.[group] ?? 0 - ); - }, - [config] - ); - const hasWriteRight = useCallback( - (group: RightGroup) => { - if (token === undefined) { - return false; - } - const right = config?.right[environment.applName]; - if (right === undefined) { - return false; - } - return [PartRight.READ, PartRight.READ_WRITE].includes( - right?.[group] ?? 0 - ); - }, - [config] - ); - - const getRestConfig = useCallback((): RESTConfig => { - return { - server: getApiUrl(), - token: token ?? '', - }; - }, [token]); useEffect(() => { - updateRight(); - }, [updateRight]); + setErrorApiGlobalCallback((response: Response) => { + if (response.status == 401) { + toaster.create({ + title: 'API request rejected', + description: `API Authentication rejected by server.`, + type: 'error', + }); + clearToken(); + } + }); + }, [clearToken]); + + const hasReadRight = useCallback( + (part: RightGroup) => { + //console.log(`right = ${JSON.stringify(token?.payload?.right?.[environment.applName], null, 2)}`); + const right = token?.payload?.right?.[environment.applName]; + if (right === undefined) { + return false; + } + return [PartRight.READ, PartRight.READ_WRITE].includes(right[part]); + }, + [token] + ); + const hasWriteRight = useCallback( + (part: RightGroup) => { + const right = token?.payload?.right?.[environment.applName]; + if (right === undefined) { + return false; + } + return [PartRight.READ, PartRight.READ_WRITE].includes(right[part]); + }, + [token] + ); return { - token, + token: tokenStr, isConnected: token !== undefined, + errorSession, setToken: setTokenLocal, clearToken, - login: config?.login, + login: token?.payload?.login, hasReadRight, hasWriteRight, - getRestConfig, + getRestConfig: getRestConfigLocal, }; }; -export const useHasRight = (group: RightGroup) => { +export const useHasRight = (part: RightGroup) => { const { token, hasReadRight, hasWriteRight } = useSessionService(); const isReadable = useMemo(() => { - console.log(`get is read for: ${group} ==> ${hasReadRight(group)}`); - return hasReadRight(group); - }, [token, hasReadRight, group]); + //console.log(`get is read for: ${part} ==> ${hasReadRight(part)}`); + return hasReadRight(part); + }, [token, hasReadRight, part]); const isWritable = useMemo(() => { - return hasWriteRight(group); - }, [token, hasWriteRight, group]); + return hasWriteRight(part); + }, [token, hasWriteRight, part]); return { isReadable, isWritable }; }; diff --git a/front/src/theme/theme.ts b/front/src/theme/theme.ts index 44ae56c..bfa57e5 100644 --- a/front/src/theme/theme.ts +++ b/front/src/theme/theme.ts @@ -9,12 +9,20 @@ import { colors } from './colors'; const baseTheme: SystemConfig = { globalCss: { + ':root': { + // permit to "firefox" not reload the page when scroll on top + overscrollBehavior: 'contain', + }, body: { + // permit to "chromium" not reload the page when scroll on top + overscrollBehavior: 'contain', + // Prevents text selection + userSelect: 'none', + // Other ... overflowY: 'none', bg: { _light: 'back.50', _dark: 'back.700' }, color: { _light: 'text.900', _dark: 'text.50' }, fontFamily: 'Roboto, Helvetica, Arial, "sans-serif"', - userSelect: 'none' /* Prevents text selection */, }, svg: { width: '32px', diff --git a/front/src/utils/http.ts b/front/src/utils/http.ts deleted file mode 100644 index cd3d741..0000000 --- a/front/src/utils/http.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { RESTConfig } from '@/back-api'; -import { getApiUrl } from '@/environment'; -import { getUserToken } from '@/service/session'; - -export function getRestConfig(): RESTConfig { - return { - server: getApiUrl(), - token: getUserToken() ?? '', - }; -} diff --git a/front/src/utils/sso.ts b/front/src/utils/sso.ts index 3adca48..ba814ac 100644 --- a/front/src/utils/sso.ts +++ b/front/src/utils/sso.ts @@ -108,14 +108,14 @@ export function requestSignIn(name?: string): void { console.log( `Request sign-in: '${environment.ssoSignIn}' + '${hashLocalData(name)}'` ); - window.location.href = environment.ssoSignIn + hashLocalData(name) + "/"; + window.location.href = environment.ssoSignIn + hashLocalData(name) + '/'; } /** * Request SSO Disconnect */ export function requestSignOut(name?: string): void { const url = environment.ssoSignOut + hashLocalData(name); - console.log(`Request just to the SSO: ${url}`) + console.log(`Request just to the SSO: ${url}`); // unlog from the SSO window.location.href = url; } @@ -124,7 +124,7 @@ export function requestSignOut(name?: string): void { */ export function requestSignUp(name?: string): void { const url = environment.ssoSignUp + hashLocalData(name); - console.log(`Request just to the SSO: ${url}`) + console.log(`Request just to the SSO: ${url}`); // unlog from the SSO window.location.href = url; }